dockerのUbuntuコンテナにrbenvをインストールする手順

docker の Ubuntu コンテナで Ruby 関連の実験をしたく、rbenv を導入したので手順をまとめます。docker hub の公式 Ruby コンテナは敢えて使わない方針です。

rbenv のインストール

apt-get update して、git をインストール後、 git clone します。

apt-get update
apt-get install git
git clone https://github.com/rbenv/rbenv.git ~/.rbenv

パスを通します。

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile

ruby-build が必要なので、 https://github.com/rbenv/ruby-build#installation を参考に git clone します。ruby-build はコマンドラインで Ruby の様々なバージョンを簡単にインストールするためのプラグインで、インストールすると rbenv install コマンドが使えるようになります。

git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

最後に rbenv が正常にインストールされたか、下記コマンドでチェックします。

curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash
rbenv -v

ruby のインストール

次のようなコマンドで好きなバージョンの ruby を指定してインストールできます。

rbenv install 2.5.1

インストールできるリストは次のコマンドでチェックできます。

rbenv install -l

インストール後、下記コマンドでインストールした ruby をセットします。

rbenv global 2.5.1

トラブルシューティング

docker の Ubuntu コンテナにインストールする際、ハマりどころが色々ありましたのでトラブルシューティングとしてメモしました。これで次回以降のインストールも余裕ですね!やったね!

rbenv shims の PATH が無くて怒られる

Checking for rbenv shims in PATH: not found The directory `/root/.rbenv/shims’ must be present in PATH for rbenv to work. Please run `rbenv init’ and follow the instructions.

rbenv は次のような感じになるよう、 shims の PATH を優先的に読ませる必要があります。

~/.rbenv/shims:/usr/local/bin:/usr/bin:/bin

~/.bash_profile に記述するか、 rbenv init コマンドを SSH の都度実行する必要があります。 rbenv init を毎回実行するのは面倒なので、次のように ~/.bash_profile に記述して、SSH の際に自動で rbenv init が実行されるよう設定すると楽チンです。

echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

ruby-bulid が無くて怒られる

Checking `rbenv install’ support: not found Unless to plan to add Ruby versions manually, you should install ruby-build. Please refer to https://github.com/rbenv/ruby-build#installation

ruby-build はコマンドラインで Ruby の様々なバージョンを簡単にインストールするためのプラグインです。ruby-build を使うと、 rbenv install コマンドが使えるようになります。

ruby-build は rbenv のディレクトリに git clone してインストールします。

git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

C コンパイラが無くて ruby のインストールに失敗する

docker の Ubuntu のコンテナなど、C コンパイラがインストールされていないマシンではインストールに失敗します。Ruby はもともと C 言語で作られている言語だからです。

BUILD FAILED (Ubuntu 18.04 using ruby-build 20180822-8-g336584c)

Inspect or clean up the working tree at /tmp/ruby-build.20180904233402.4696 Results logged to /tmp/ruby-build.20180904233402.4696.log

Last 10 log lines: checking for ruby… false checking build system type… x86_64-pc-linux-gnu checking host system type… x86_64-pc-linux-gnu checking target system type… x86_64-pc-linux-gnu checking for gcc… no checking for cc… no checking for cl.exe… no configure: error: in `/tmp/ruby-build.20180904233402.4696/ruby-2.5.1’: configure: error: no acceptable C compiler found in $PATH See `config.log’ for more details

C コンパイラは次のコマンドでインストールできます。

apt-get install build-essential

依存関係のライブラリがないっつって怒られる

例えば次のような感じのエラー。指示通り apt-get install -y libreadline-dev zlib1g-dev でインスールします。

BUILD FAILED (Ubuntu 18.04 using ruby-build 20180822-8-g336584c)

Inspect or clean up the working tree at /tmp/ruby-build.20180904234436.5583 Results logged to /tmp/ruby-build.20180904234436.5583.log

Last 10 log lines: installing capi-docs: /root/.rbenv/versions/2.5.1/share/doc/ruby The Ruby readline extension was not compiled. The Ruby zlib extension was not compiled. ERROR: Ruby install aborted due to missing extensions Try running `apt-get install -y libreadline-dev zlib1g-dev` to fetch missing dependencies.

Configure options used: –prefix=/root/.rbenv/versions/2.5.1 LDFLAGS=-L/root/.rbenv/versions/2.5.1/lib CPPFLAGS=-I/root/.rbenv/versions/2.5.1/include

Ruby のインストールに成功したっぽいけど、ruby コマンドがないとか言われる

例えば下記の文字。 ruby -v などでバージョンを確認した時に表示されるエラーです。

rbenv: ruby: command not found

The `ruby’ command exists in these Ruby versions: 2.5.1

rbenv はインストールした ruby のバージョンを指定する必要があるので、下記コマンドでセットします。

rbenv global 2.5.1