serversman@VPSにcheckinstallとruby1.9.3を入れる


今回、ふとtwitterbotのアイデアが浮かんだので、rubyでつくろうと思ったのですが、今借りているVPSに入れようとすると思った以上に、詰まったのでメモ書きの意味で、ここに書き残します。

前述のようにserverman@VPSの環境にrubyを入れようと思ったのですが、CentOSのリポジトリではrubyが古く、gemもうまく動いてくれなかったので、ソースから入れることにしました。

そうして調べているうちに、ソースから入れるときにmakeからrpmパッケージをコマンド一発で作ってくれるcheckinstallというパッケージを見つけたので、これを使えばuninstallオプションのないものでも、rpm -eで削除できるようになるので、管理がやりやすくなるメリットがあります。

そのため、まずはcheckinstall自身をソースからインストール→checkinstallでrpmパッケージ化→rpmで再度インストールということを行います。

その前にcheckinstallの動作に必要なパッケージをまずyumでインストールします。

yum install rpm-build gettext

そして、ソースダウンロード、インストール→rpm化して再インストールを行います。

wget http://checkinstall.izto.org/files/source/checkinstall-1.6.2.tar.gz
tar zxvf checkinstall-1.6.2.tar.gz
cd checkinstall-1.6.2
make
make install

checkinstall -R
rpm -i [表示されたrpmパッケージのパス]

このようにすることでmake installを行う代わりにrpmパッケージを作成し、利用することができるようになりました。

次に、rubyインストールに必要な各パッケージをインストールします。

sudo yum install ncurses-devel gdbm-devel openssl-devel zlib-devel readline-devel libyaml-devel gcc-c++

さらに、ruby1.9.3をインストールするためには、旧バージョンのrubyが必要との事だったので、yum経由と混合させるのもどうかと思ったので、こちらもソースからパッケージ化してインストールしました。

wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p358.tar.bz2
tar xvzf ruby-1.8.7-p358.tar.bz2
./configure
make	 
checkinstall -R	 
rpm -i /usr/src/redhat/RPMS/i386/ruby-1.8.7-p358-1.i386.rpm

そして、ruby -vで入ったことを確認した後、本題のrubyのインストールです。
以下のコマンドでruby1.9.3のソースコマンドをダウンロード→makeします。

wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p125.tar.gz
tar xvzf ruby-1.9.3-p125.tar.bz2
cd ruby-1.9.3-p125
./configure
make
checkinstall -R

しかし、このままパッケージ化してインストールしようとすると以下のエラーが出ます。

rpm -i /usr/src/redhat/RPMS/i386/ruby-1.9.3-p125-1.i386.rpm
エラー: 依存性の欠如:
	/usr/local/bin/ruby は ruby-1.9.3-p125-1.i386 に必要とされています

どうやら、rpmのspecファイル中にrubyの実行バイナリが記載されていないのが原因のようなので、
こちらのサイトさんを参考に以下のコマンドで、RPMパッケージのspecファイルを修正します。

checkinstall --fstrans=no --review-spec -R make install

これを実行すると、作成終了直前にspecファイルを修正するためのエディタ画面が起動するので、そこで以下の内容を追記します。

Summary:   Package created with checkinstall 1.6.0
Name:      ruby-1.9.3
Version:   p125
Release:   1
License: GPL
Packager:  checkinstall-1.6.0
Group:     Applications/System
BuildRoot: /var/tmp/IQgTHcloUngGdAdfDUMG/package
Provides:  ruby-1.9.3
Requires:  ,/bin/sh

%description
Package created with checkinstall 1.6.0

%files
%dir "//usr/"
%dir "//usr/doc/"
%dir "//usr/doc/ruby-1.9.3-p125/"
"//usr/local/bin/ruby" #←この文を追記
"//usr/doc/ruby-1.9.3-p125/NEWS"

これで、普通にrpm -iでインストールできるパッケージを作成できました。
そして、以下のコマンドでインストール、そしてインストールが完了したかを確認します。

rpm -i /usr/src/redhat/RPMS/i386/ruby-1.9.3-p125-1.i386.rpm
ruby -v
ruby 1.9.3p125 (2012-02-16 revision 34643) [i686-linux]

rubyのバージョンが正しく表示され、インストール完了しました。

これで、VPS上でruby1.9.3を利用できるようになりました。
ruby1.9.1からはgemも標準で組み込まれているので、特にgemを別途追加する必要もなくライブラリを入れることも可能に

しかし、実際にはrpmパッケージ化した上でインストール可能、かつ実行可能状態にするのに時間がかかりすぎて、本来の目的であるbotを作る時間が今回はなくなってしまうという本末転倒…(パッケージになったと思ったら、実行時に絶対にセグフォになる等も…)

また、そちらは後日、先日書いたandroidウィジェット開発の気分転換にでも書こうかと…

参考リンク


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください