orangeProse別館

orangeProse(本ブログ)の補助

VagrantでUbuntuサーバ/rbenv/サンドボックスモード

VagrantUbuntuサーバ構築練習シリーズ。

これまでにやったこと:

環境:

今日触れる項目:

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

次回はRailsPHPか……決めてません。