Vagrant + CentOSで最新のRuby使うためにrpm作った
Vagrantで作って壊してって色々実験してるときに、Rubyを使う必要があった。
しかしCentOSの標準のリポジトリのRubyはいまだに1.8系。
普段だったらrbenvとか使うけど今回の場合以下の理由で却下。
そもそもVagrantでプロビジョニング書いて環境を作るなら、Rubyのバージョン変えたかったら環境毎作り直せば良いのでrbenvを使う必要性ない。複数のバージョンを同時に使う必要でもあれば別だけど。
となるとソースからビルドでも良さそうだが、これはビルドに時間がかかりすぎるのでつらい。
というわけでrpm作った。先人のおかげで意外に簡単だった。
ちなみに以下の作業で色々ツールなどを入れてちょっと汚れるのでrpmビルド用に環境があった方が良い。今回のようなケースならrpm使いたい環境をvagrant upして、rpmを作り終えたらvagrant destroyするとよい。
※できあがったrpmはホストOSに保存してからdestroyしましょう。
依存ライブラリなどの追加
EPELリポジトリ追加。
$ curl -O http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm $ sudo rpm -ivh epel-release-6-8.noarch.rpm
以下をインストールする。
$ sudo yum -y groupinstall "Development Tools" $ sudo yum --enablerepo=epel -y install libyaml libyaml-devel readline-devel ncurses-devel gdbm-devel tcl-devel openssl-devel db4-devel libffi-devel
ソースなどの取得
rpmはホームディレクトリ以下でつくるそうだ。
$ mkdir -p $HOME/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} # ソースを取得 $ (cd rpmbuild/SOURCES/; curl -O http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.2.tar.gz) # SPECファイルを取得 $ (cd rpmbuild/SPECS; curl -O https://raw.githubusercontent.com/hansode/ruby-2.1.x-rpm/master/ruby21x.spec)
rpmをビルドして動作確認
# ビルド $ rpmbuild -bb rpmbuild/SPECS/ruby21x.spec # 自分にインストールしてみる $ sudo rpm -Uvh rpmbuild/RPMS/x86_64/ruby-2.1.2-2.el6.x86_64.rpm # インストールできたか確認 $ ruby -v $ gem -v
/vagrantに置いてまっさらな環境にインストール
Vagrantの共有ディレクトリにあるファイルはvagrant destroy
しても残るのでそこに置いて試す。
Vagrantでは、ホスト側のVagrantfileのあるディレクトリがゲスト側の/vagrantディレクトリにマウントされているのでとりあえずそこに作ったrpmを置く。
$ vagrant destroy
して
$ vagrant up $ vagrant ssh
インストールの際にもRubyの依存ライブラリをインストールする。EPELも必要。 たぶん"Development Tools"はいらないと思うけど試してない。
rpmをインストールして動作確認。
$ sudo rpm -Uvh /vagrant/ruby-2.1.2-2.el6.x86_64.rpm $ ruby -v $ gem -v
ちゃんとバージョンが出ればOK。
参考
Ruby 2.0 のインストール
ほとんどこれのまま。ありがとうございます。
変えたのはwgetをcurlにしたくらい(素のCentOSに入ってなかったので)。CentOSにEPELリポジトリを追加する
EPELのURLどこだっけ?と毎回のようにググってる。今回はここに行き着いた。http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/
その結果たどり着いた場所。hansode/ruby-2.1.x-rpm
rpmのspec。頭を垂れる他ない。