my coredump

自分用の公開メモです。主にプログラムのこととか書くはず。

Vagrant + CentOSで最新のRuby使うためにrpm作った

Vagrantで作って壊してって色々実験してるときに、Rubyを使う必要があった。
しかしCentOSの標準のリポジトリRubyはいまだに1.8系。
普段だったらrbenvとか使うけど今回の場合以下の理由で却下。

  • Vagrantで作って壊してのサイクルが遅くなる
  • Rubyのバージョン管理をする必要がない

そもそも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。

参考