CentOS 5 に Ruby 1.8.7 をセットアップする(ために checkinstall をセットアップする)

先日、弊社内の開発サーバがハードディスクトラブルにより起動不能になりました。
すぐさま別のサーバに環境を構築して引き継ぎを行なったのですが、短期間で行なった応急処置で100%完全に引き継げるはずもなく、ささいなトラブルはいくつか生じているようです。

例えば、先日のFlash Lite の中身を動的に変更するという記事に貼ってあった、サンプルの CGI が出力されなくなってしまいました。当該記事の中で入れた諸々のライブラリが、移転先サーバには入っていないせいですね。

今回はこれらをセットアップしようと思います。とはいえ、以前書いた内容をそのままやるだけだと思っていたんですが…。

まず、移転先サーバには、Ruby や RubyGems のインストールに用いた checkinstall が入っていませんでした。
CentOS 4 だった旧サーバでは、rpmforge のレポジトリを有効にしてやれば、yum コマンドで checkinstall をセットアップ出来たのに、CentOS 5になった移転先サーバではなぜか以下のように “Nothing to do” になってしまいます。

# yum --enablerepo=rpmforge install checkinstall
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* addons: rsync.atworks.co.jp
* base: rsync.atworks.co.jp
* extras: rsync.atworks.co.jp
* rpmforge: ftp-stud.fht-esslingen.de
* updates: rsync.atworks.co.jp
rpmforge                                                                                                                                                                         | 1.1 kB     00:00
Setting up Install Process
Nothing to do

そのため、DAG: checkinstall RPM packages for Red Hat, CentOS and Fedoraから SRPM を取得し、バイナリパッケージを手元で作ってやろうとしたのですが、パッケージの作成が完遂しません

# wget http://dag.wieers.com/rpm/packages/checkinstall/checkinstall-1.6.0-3.rf.src.rpm
# rpm -ivh checkinstall-1.6.0-3.rf.src.rpm
# cd /usr/src/redhat/SPECS/
# rpmbuild -bb checkinstall.spec
実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.67425
+ umask 022
+ cd /usr/src/redhat/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ cd /usr/src/redhat/BUILD

(中略)

installwatch.c:2322: warning: cast from pointer to integer of different size
installwatch.c: At top level:
installwatch.c:2675: error: conflicting types for 'readlink'
/usr/include/unistd.h:777: error: previous declaration of 'readlink' was here
installwatch.c: In function 'fopen64':
installwatch.c:3176: warning: cast from pointer to integer of different size
make[1]: *** [installwatch.o] Error 1
make[1]: Leaving directory `/usr/src/redhat/BUILD/checkinstall-1.6.0/installwatch-0.7.0beta4'make: *** [all] Error 2エラー: /var/tmp/rpm-tmp.48525 の不正な終了ステータス (%build)
RPM ビルドエラー:
/var/tmp/rpm-tmp.48525 の不正な終了ステータス (%build)

調べたところ Freak: RHEL5 x86_64にcheckinstall-1.6.1をインストールしようとしたらmakeでエラー と、同じようなハマり方をしている人が居ました。マイナーバージョンが一つ新しいようですが、パッチは手元で試したところ当たるようだったので、このパッチを当てて Build するように SPEC ファイルを書き換えました。

# diff -u checkinstall.spec.orig checkinstall.spec
--- checkinstall.spec.orig      2010-03-02 20:49:21.000000000 +0900
+++ checkinstall.spec   2010-03-02 21:02:07.000000000 +0900
@@ -13,6 +13,7 @@
Vendor: Dag Apt Repository, http://dag.wieers.com/apt/

Source: http://checkinstall.izto.org/files/source/checkinstall-%{version}.tgz
+Patch: installwatch.c.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root

%description
@@ -37,6 +38,8 @@
s|#PREFIX#|%{_prefix}|g;
' checkinstall checkinstallrc* installwatch-*/installwatch

+%patch
+
%build
%{__make} %{?_smp_mflags} \
PREFIX="%{_prefix}"

パッチも、1〜2行目を以下のように書き換えて /usr/src/redhat/SOURCES に SPEC ファイルで指定した installwatch.c.patch というファイル名で保存します。

--- checkinstall-1.6.0/installwatch-0.7.0beta4/installwatch.c     2007-04-07 14:27:23.000000000 -0400
+++ installwatch-0.7.0beta4/installwatch.c     2007-04-07 14:25:06.000000000 -0400

すると rpmbuild によるパッケージの作成がうまくいくようになるので、出来たパッケージをインストールします。
これで checkinstall の準備は出来ました。

次は Ruby のセットアップ時に必要になるライブラリを入れます。

# yum install zlib-devel openssl-devel readline-devel ← (場合によっては nkf なども)

今回のサーバではセットアップ済でしたが、場合によっては nkf などもこの時に必要になるようです。
準備が出来たら Ruby, RubyGems を入れます

# wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p249.tar.gz
# tar xvzf ruby-1.8.7-p249.tar.gz
# cd ruby-1.8.7-p249
# ./configure --prefix=/usr --with-install-readline
# make
# checkinstall -fstrans=no
# rpm -ivh /usr/src/redhat/RPMS/x86_64/ruby-1.8.7-p249-1.x86_64.rpm
#
# cd
# wget http://rubyforge.org/frs/download.php/69365/rubygems-1.3.6.tgz
# tar xzvf rubygems-1.3.6.tgz
# cd rubygems-1.3.6/
# checkinstall -R "ruby setup.rb"
# rpm -ivh /usr/src/redhat/RPMS/x86_64/rubygems-1.3.6-1.x86_64.rpm

次は、前回使ったライブラリ(nokogiri)の依存ライブラリを入れた上で、nokogiri をインストールします

# yum install libxml2-devel libxslt-devel
# gem install nokogiri

これで、以前作った cgi が機能するようになりました。作業完了です。

This movie requires Flash Player 4.0.0
QRコード
http://dev.uniba.jp/~rei/swfmill/test.cgi

さらっと流しましたが、結構試行錯誤しました。以下に参考URLを挙げておきます。

preload preload preload