今回、ふと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ウィジェット開発の気分転換にでも書こうかと…