CentOS 5系(RedHat Enterprise Linux 5系)でサポートされているRubyのバージョンは1.8.5系。
前エントリ「CentOS 5系でPHP5.3系やMySQL5.1系を使いたい場合」の流れで、Rubyもバージョン1.8系の最新版である1.8.7に、RPM(yum)を利用してバージョンアップすることにしました。(1.8.5は枯れていて、サポートしていないアプリもあったり、なので。)
とは言っても、やっぱり前エントリ同様、ソースからコンパイルして・・・よりは、rpm(yum)でのパッケージ管理をしておきたいところ。が、Ruby1.8.7系のメンテナンスをしているRPM(yum)リポジトリが見つからなかったので、自前でrpmを作ることに。以下手順を残しておきます。
前提
今回、私が作った環境は以下。でも、CentOSやRedHatであれば、特にバージョンを問わず以降のやり方で動くと思います。
# cat /etc/redhat-release CentOS release 5.5 (Final)
# ruby -v ruby 1.8.5 (2006-08-25) [i386-linux]
specファイルを作る
まず、RPMを作るためには、ソースコードと関連パッケージとの依存関係を記したspecファイルが必要です。
ということで、その雛形となるべくFedoraのrpmリポジトリから、src.rpmファイルを取得します。
# wget http://download.fedora.redhat.com/pub/fedora/linux/development/13/source/SRPMS/ruby-1.8.6.399-1.fc13.src.rpm
次にダウンロードしたファイルを以下の感じで展開します。
尚、展開後は、"/usr/src/redhat/"以下に配置されます。
# rpm -i --nomd5 ruby-1.8.6.399-1.fc13.src.rpm
次に、お目当てのspecファイル(/usr/src/redhat/SPECS/ruby.spec)を以下のように編集します。
diff(差分)を貼り付けておきますが、簡単に説明すると以下のような感じです。
(※ 2010/06/11時点でのRuby1.8系の最新版は、1.8.7-p249です。)
- 「%define rubyver」を1.8.7に変更
- 「%define _patchlevel」を249に変更
- 「Patch(数字):」の行を全て削除
- 「%patch(数字) -p1」の行を全て削除
diff(差分)は以下。
# diff -u /usr/src/redhat/SPECS/ruby.spec.orig /usr/src/redhat/SPECS/ruby.spec --- /usr/src/redhat/SPECS/ruby.spec.orig 2010-06-08 01:22:47.000000000 -0400 +++ /usr/src/redhat/SPECS/ruby.spec 2010-06-08 01:33:53.000000000 -0400 @@ -1,6 +1,6 @@ %define rubyxver 1.8 -%define rubyver 1.8.6 -%define _patchlevel 399 +%define rubyver 1.8.7 +%define _patchlevel 249 %define dotpatchlevel %{?_patchlevel:.%{_patchlevel}} %define patchlevel %{?_patchlevel:-p%{_patchlevel}} %define arcver %{rubyver}%{?patchlevel} @@ -40,27 +40,7 @@ Source4: irb.1 Source10: ruby-mode-init.el -Patch1: ruby-deadcode.patch -Patch20: ruby-1.8.6-p383-rubyprefix.patch -Patch21: ruby-deprecated-sitelib-search-path.patch -Patch22: ruby-deprecated-search-path.patch -Patch23: ruby-multilib.patch # Needed in 1.8.6-p287, no longer needed in 1.8.6-p368? -#Patch25: ruby-1.8.6.111-gcc43.patch -Patch26: ruby-1.8.6-rexml-CVE-2008-3790.patch -Patch27: ruby-1.8.6-p287-CVE-2008-5189.patch -Patch28: ruby-1.8.6-p287-remove-ssl-rand-range.patch -Patch29: ruby-always-use-i386.patch -Patch30: ruby-openssl-1.0.patch -Patch31: ruby-1.8.6-p369-ri-gem_multipath.patch -# Patch32 from ruby_1_8 branch -Patch32: ruby-1.8head-irb-save-history.patch -Patch33: ruby-1.8.6-p383-mkmf-use-shared.patch -# Testing -# Patch34 disabled for now -Patch34: ruby-1.8.6-simplify-openssl-digest.patch -# bz 580993 -Patch35: ruby_1_8_7-gc-open4_096segv.patch Summary: An interpreter of object-oriented scripting language Group: Development/Languages @@ -186,25 +166,8 @@ tar fxz %{SOURCE1} popd pushd %{name}-%{arcver} -%patch1 -p1 -%patch20 -p1 -%patch21 -p1 %ifarch ppc64 s390x sparc64 x86_64 -%patch22 -p1 -%patch23 -p1 %endif -#%patch25 -p1 -#%patch26 -p1 -%patch27 -p0 -%patch28 -p1 -%patch29 -p1 -%patch30 -p2 -%patch31 -p1 -%patch32 -p0 -%patch33 -p1 -# Once kill patch34 due to build failure on actionpack -#%%patch34 -p1 -%patch35 -p1 popd %build
Rubyのソースコードをゲットする
次に、"/usr/src/redhat/SOURCES"以下に、Rubyの最新版をダウンロードして配置します。
# cd /usr/src/redhat/SOURCES # wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p249.tar.bz2
RubyのRPMを作る(ビルドする)
RPMを作成するべく、rpmbuildを実行します。
が、以下のようにエラーが発生した場合は、パッケージが足りていないため、片っ端からyumでインストールしましょう。
# rpmbuild -bb /usr/src/redhat/SPECS/ruby.spec
error: Failed build dependencies:
readline-devel is needed by ruby-1.8.7.249-1.i386
ncurses-devel is needed by ruby-1.8.7.249-1.i386
gdbm-devel is needed by ruby-1.8.7.249-1.i386
tcl-devel is needed by ruby-1.8.7.249-1.i386
tk-devel is needed by ruby-1.8.7.249-1.i386
libX11-devel is needed by ruby-1.8.7.249-1.i386
openssl-devel is needed by ruby-1.8.7.249-1.i386
db4-devel is needed by ruby-1.8.7.249-1.i386
byacc is needed by ruby-1.8.7.249-1.i386
emacs is needed by ruby-1.8.7.249-1.i386
(上記のようなエラーが出た場合)足りないパッケージをyumで全部インストール。
# yum install readline-devel ncurses-devel gdbm-devel tcl-devel tk-devel libX11-devel openssl-devel db4-devel byacc emacs
で、rpmbuildを再実行。
# rpmbuild -bb /usr/src/redhat/SPECS/ruby.spec
無事、成功すると、以下のような感じで、"/usr/src/redhat/RPMS/i386"以下にRPMファイルが生成されているはず。
(i386の部分は、アーキテクチャに依存します。他にはx86_64とか。)
# ll /usr/src/redhat/RPMS/i386/ total 12172 -rw-r--r-- 1 root root 581822 Jun 8 01:54 ruby-1.8.7.249-1.i386.rpm -rw-r--r-- 1 root root 2311392 Jun 8 01:55 ruby-debuginfo-1.8.7.249-1.i386.rpm -rw-r--r-- 1 root root 335640 Jun 8 01:54 ruby-devel-1.8.7.249-1.i386.rpm -rw-r--r-- 1 root root 1501295 Jun 8 01:55 ruby-docs-1.8.7.249-1.i386.rpm -rw-r--r-- 1 root root 332740 Jun 8 01:55 ruby-irb-1.8.7.249-1.i386.rpm -rw-r--r-- 1 root root 1873325 Jun 8 01:54 ruby-libs-1.8.7.249-1.i386.rpm -rw-r--r-- 1 root root 318544 Jun 8 01:55 ruby-mode-1.8.7.249-1.i386.rpm -rw-r--r-- 1 root root 401830 Jun 8 01:55 ruby-rdoc-1.8.7.249-1.i386.rpm -rw-r--r-- 1 root root 2308416 Jun 8 01:55 ruby-ri-1.8.7.249-1.i386.rpm -rw-r--r-- 1 root root 558459 Jun 8 01:55 ruby-static-1.8.7.249-1.i386.rpm -rw-r--r-- 1 root root 1871060 Jun 8 01:55 ruby-tcltk-1.8.7.249-1.i386.rpm
作成したRPMパッケージをインストール
以下の感じで実行します。この辺は、お馴染みのやり方ですよね。
# rpm -Uvh /usr/src/redhat/RPMS/i386/ruby-*.rpm
という感じで、無事にRuby1.8.7をパッケージインストールすることができました!
# ruby -v ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-linux]
関連リンク
Linuxサーバ Hacks 2 ―コネクティング、モニタリング、トラブルシューティング
- 作者: Bill von Hagen,Brian K. Jones,菅野良二
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2006/10/24
- メディア: 単行本(ソフトカバー)
- 購入: 3人 クリック: 26回
- この商品を含むブログ (31件) を見る