EC2 や Lightsail で rbenv install した際に BUILD FAILED になった場合はスワップ領域を疑う

※スペックの低い Raspberry Pi でも有効な方法です

結論

1. まずは現在のスワップ領域を調べます

$ grep Swap /proc/meminfo
SwapCached:            0 kB
SwapTotal:             0 kB
SwapFree:              0 kB

見事にゼロです。

2. スワップ領域を作ります

公式ページ に従います。数値は適宜変更してください*1

$ sudo dd if=/dev/zero of=/swapfile1 bs=1M count=1024
1024+0 レコード入力
1024+0 レコード出力
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 16.4753 s, 65.2 MB/s
$ sudo chmod 600 /swapfile1
$ sudo mkswap /swapfile1
スワップ空間バージョン 1 を設定します。サイズ = 1024 MiB (1073737728 バイト)
ラベルはありません, UUID=e0ce694b-f829-45d7-9a79-a4b75ed28f3e
$ sudo swapon /swapfile1

3. スワップ領域が作られたかを確認する

$ grep Swap /proc/meminfo
SwapCached:            0 kB
SwapTotal:       1048572 kB
SwapFree:        1048572 kB

ちゃんと作られたようです。

4. 再起動時にもスワップ領域が作られているようにする

上記までですと、再起動時にスワップ領域が消えてしまいます。したがってこちらも 公式ページ にしたがって、再起動時にスワップ領域が作られるようにします。ワンライナーだと以下のように書けます(長いので、右にスクロールしてください)。

$ sudo sh -c 'echo "/swapfile1  none        swap    sw              0   0" >> /etc/fstab'

補足

  • rbenv install した場合だけでなく、一般的にキッツい作業をさせようとするとエラーが起きます
  • 一度作った領域を変更する場合は $ sudo swapoff を実行します*2

参考

*1:公式ページにあるように bs * count のサイズがスワップのサイズになります

*2:--all をつけるとすべての領域を無効にします

Powered by はてなブログ