AWS初心者ですが、丸三日ハマっててようやく抜け出せたので備忘録として書いておきます。
同じ現象に悩んでいる初学者の方がいましたらぜひ参考にしてみてください。
解決したいこと
EC2でrbenv install
できるようにしたい。
発生していたエラー・問題
インスタンスを作成し、ターミナルでssh接続できたのはいいのですが、その後$ rbenv install -v 3.1.0
をしても最後まで読み込みができず、何度やり直しても途中で完全に止まってしまいました。
それどころかその状態でctr+cで止めようとしてもものすごく動きが遅くなってclient_loop: send disconnect: Broken pipe(長い間放置されていたから切断しといたよ)
となります。
また、そうなってしまうとssh接続しようとしても
% ssh tester
ssh: connect to host **.**.**.** port 22: Operation timed out
とエラーが出ます。インスタンスを確認したら「インスタンスの接続性チェックに失敗しました」と出ていて、一度インスタンスを停止して再度開始したらまたssh接続できるようになりました。
ディスク容量が少ないからかと思い、容量を8G→16でインスタンスを作成し直して何度かトライするも毎回同じ結果になります。
ちなみにgitやgccなどは問題なくインストールできています。
頻発していたエラー
$ rbenv install -v 3.1.0
linking static-library libruby-static.a
/usr/bin/ar: unable to copy file 'libruby-static.a'; reason: No space left on device
make: *** [Makefile:300: libruby-static.a] Error 1
reason: No space left on device
ディスクが不足しているとのこと。
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 477M 0 477M 0% /dev/shm
tmpfs 191M 2.8M 188M 2% /run
/dev/xvda1 8.0G 1.8G 6.2G 23% /
tmpfs 477M 387M 90M 82% /tmp
tmpfs 96M 0 96M 0% /run/user/1001
上記は8Gでやっていたときのですが、/tmp
がカツカツです。ちなみに16Gに増やすと/dev/xvda1
が 16G まるまる使っていて/tmpの値は増えてませんでした。(ここらへんは私の知識不足だと思います)
とりあえずこのエラーを解決しようと思い色々調べた結果、一時ファイルシステムである tmpfs
を /tmp
マウントポイントに1Gマウントする方法を試してみました。
$ sudo mount -o size=1G,rw,nodev,nosuid -t tmpfs tmpfs /tmp
$ df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 477M 0 477M 0% /dev/shm
tmpfs tmpfs 191M 2.8M 188M 2% /run
/dev/xvda1 xfs 16G 1.8G 15G 12% /
tmpfs tmpfs 1.0G 0 1.0G 0% /tmp
tmpfs tmpfs 96M 0 96M 0% /run/user/1001
その後$ rbenv install -v 3.1.0
してみましたが
reason: No space left on device
エラーは出なかったのですが、やはり途中で完全に止まってインストールできませんでした。(ほっとくと1時間以上ずっとそのまま→止めてもインスタンスの接続性チェックに失敗しましたの無限ループ)
PCの再起動なども試しましたが変わりませんでした。
解決方法
$ TMPDIR="${PWD}/tmp" rbenv install -v 3.1.0
↑
結論:tmpファイルを拡張する必要はなく、このコマンド一つで解決した。
$ TMPDIR="${PWD}/tmp" rbenv install -v 3.1.0
installing bundled gem cache: /home/tester/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/cache
Installed ruby-3.1.0 to /home/tester/.rbenv/versions/3.1.0
~/tmp/ruby-build.20230325133648.2355.MSdMSk ~
~
NOTE: to activate this Ruby version as the new default, run: rbenv global 3.1.0
$ rbenv global 3.1.0
$ rbenv rehash
$ ruby -v
ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [x86_64-linux]
ちゃんとインストールできてました。
ちなみに/tmp
の値はまったく増えていませんでした。↓
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 477M 0 477M 0% /dev/shm
tmpfs 191M 2.8M 188M 2% /run
/dev/xvda1 16G 2.0G 14G 13% /
tmpfs 477M 0 477M 0% /tmp
tmpfs 96M 0 96M 0% /run/user/1001
どうやら/tmp
のディスク容量を拡張しようとするアプローチ方法が間違っていたみたいです。
execute可能な別のディレクトリ(マウントポイント)をTMPDIRとして指定するのが正しい方法だったみたいです。
参考:こちらの記事が大変役立ちました!