VagrantでUbuntuサーバ/rbenv/サンドボックスモード
これまでにやったこと:
- VirtualBoxにUbuntu12.04インストール、openssh-serverインストール、vagrant用インセキュア・キーの設置、VirtualBox Guest Additionsのインストール、VagrantでBase Box作成
- デフォルトエディタをvim-noxに変更、etckeeper/git/tigのインストール、NTPインストール
- IPアドレス固定、SSHポート変更(のメモ)
- UFWの設定、Apache2インストール、a2ensite/a2dissite
- Apache2でhttps(SSL)の有効化
環境:
- VirtualBox 4.3.8
- Vagrant 1.5.1
- Ubuntu Server 12.04
今日触れる項目:
Vagrantのサンドボックスモードを使ってみる
せっかくVagrantを使ってサーバ構築の練習をしているので、Ubuntuサーバについてだけでなく、Vagrantの機能にも触れておきたいと思います。
今回の記事ではrbenvをインストールする予定なので、Sandboxモードでインストールを試み、うまくいかなければロールバック、うまくいったらコミット、という感じでVagrantをあれこれしてみたいと思います。
VagrantでSandboxモードを提供するプラグインはsaharaです。プラグインのインストールは簡単で:
$ vagrant plugin install sahara
のように打つだけです。
インストールが終わったら:
$ vagrant plugin list
でsaharaがリストされているのを確認して下さい(現時点で0.0.16がインストールされました)。
他のpluginに関するコマンドは
$ vagrant plugin -h
を参考にして下さい。たとえばいまインストールしたsaharaをアンインストールするには:
$ vagrant plugin uninstall sahara
という感じです。
まだサンドボックスモードがONになっていないので:
$ vagrant sandbox status
[default] Sandbox mode is off
と表示されます。
サンドボックスモードをONにするには:
$ vagrant sandobox on
ロールバックするには:
$ vagrant sandbox rollback
コミットするには(いちどvagrant suspend
した方がよい):
$ vagrant sandbox commit
サンドボックスモードをOFFにするには(いちどvagrant suspend
した方がよい):
$ vagrant sandbox off
という感じです。
それでは
$ vagrant sandbox on
$ vagrant sandbox status
した状態で
$ vagrant up
$ vagrant ssh
として、次のrbenvのインストールに進みます。
rbenvのインストール/Rubyのインストール
Ubuntu Server12.04にはデフォルトではrubyがインストールされていないので、まずAPTでrubyを入れておくとなにかと便利かもしれません(入れておくと、下記の「必要要件」のうちのいくつかは入れなくてもよいかもしれません。確信はありません)。
$ sudo aptitude install ruby1.9.3
UbuntuではAPTシステムでrbenvが配布されていますが、バージョンが古いです。なので、ソースからインストールします。
公式:https://github.com/sstephenson/rbenv
インストールは(gitがインストールされているのが前提)上述のページのInstallationの通りに(3まで)やっていけばOKのはずです。
gitの他にも必要な要件があるので、ググるとかして調べてみてください(ruby-buildのWikiにbuild environmentがあります)。少なくともUbuntu Server 12.04で、このシリーズの通りに(ミニマルでなく標準)インストールしてきたならば次のものが足りないと思います:libssl-dev、libreadline6-dev、libncurses5-dev、autoconf、bison、build-essential、libgdbm-dev、libyaml-dev、libffi-dev、tk-dev、doxygenなど(すべてが必須というわけではないですが。Rubyでやりたいことによって、必要な環境も異なります。RDocが必要なければdoxygenは入れなくともOK):
$ sudo aptitude install libssl-dev libreadline6-dev libncurses5-dev autoconf bison build-essential libgdbm-dev libyaml-dev libffi-dev tk-dev doxygen
$ echo $?
libssl-devをインストールするとzlib1g-devとかも自動的に入ります(入らなかったら入れましょう)。tk-devを入れると他にもたくさん色々入ります。doxygenはけっこうディスクを食います。
ホームディレクトリで:
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
までやったら、
$ exec $SHELL -l
でBashを再起動します。
$ rbenv
と打って
rbenv 0.4.0-89-g14bc162
Usage: rbenv <command> [<args>]
Some useful rbenv commands are:
commands List all available rbenv commands
local Set or show the local application-specific Ruby version
global Set or show the global Ruby version
shell Set or show the shell-specific Ruby version
rehash Rehash rbenv shims (run this after installing executables)
version Show the current Ruby version and its origin
versions List all Ruby versions available to rbenv
which Display the full path to an executable
whence List all Ruby versions that contain the given executable
See `rbenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/sstephenson/rbenv#readme
てな感じの表示がされていれば前準備はOKです。
ちなみにrbenv自体のアップデートをしたいときは、.rbenvディレクトリで
$ git pull
します。
rbenvでinstallコマンドを使えるようにするために、ruby-buildをインストールします。
公式:https://github.com/sstephenson/ruby-build
これも公式にあるインストール方法でOKです:
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
これでrbenvをつかったRubyのインストールができるようになりました(ruby-buildのアップデートも同ディレクトリでgit pull
です)。
$ rbenv install -l
でインストール可能なRubyのバージョンがリストされるので、確認して下さい。
ここでは2.0.0-p451をインストールすることにします:
$ rbenv install -v 2.0.0-p451 | tee /vagrant/ruby-tmp
$ echo $?
オプションの-v
は途中経過を出力してくれます(ログは/tmpに出力されるので、/vagrantに出力する必要がなければ|
以降はなしで)。インストールには時間がかかるので気長に待ちます。
RDocやRIなどの情報を生成したくなければ:
$ CONFIGURE_OPTS="--disable-install-rdoc" rbenv install -v 2.0.0-p451 | tee /vagrant/ruby-tmp
とオプションをつけてインストールします。
もしBUILD FAILED
のメッセージが出たら(echo $?
の返り値も0以外の数値になります)、足りていないパッケージがあります。インストール中のメッセージを上記のように/vagrant/ruby-tmpに出力していれば、足りていないパッケージが何か、おおよそわかると思います。
たとえば
The Ruby openssl extension was not compiled. Missing the OpenSSL lib?
のように出力されていれば、「rbenv missing OpenSSL」でググればホントは何を入れればいいのかほとんどの場合わかります(この場合はlibssl-devが必要です)。
他に、'Failed'で出力ファイルを検索すると、設定の失敗が分かります(こちらのケースがあってもecho $?
の返り値は0です)。
たとえば
Failed to configure gdbm. It will not be installed.
Failed to configure readline. It will not be installed.
のように出力されていれば、libreadline-dev、libgdbm-devがインストールされていません。こうしたFailed to
の行がなくなるまで、必要なものを探して頑張りましょう。Windows関連のものは必要ないでしょう。
インストールが終わったら必ずrehash
します:
$ rbenv rehash
使用するrubyのバージョンを指定します:
$ rbenv global 2.0.0-p451
確認します:
$ rbenv versions
$ ruby -v
$ gem -v
サンドボックスモードを終える
ここまでの作業でOKなので、VagrantのサンドボックスモードをコミットしてOFFにします。
$ exit
$ vagrant suspend
$ vagrant sandbox commit
$ vagrant sandbox off
$ vagrant sandbox status