ユーザー権限でruby1.9.1@x86_64-linuxをインストールする

ユーザー権限しかないサーバーで、Rubyの最新版を入れてみる。

最新版Rubyをインストールする

$ mkdir ~/src # 作業用ディレクトリ
$ cd ~/src    # 作業用ディレクトリに移動
$ wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p243.tar.bz2
        # 最新版を取得
$ tar xjvf ruby-1.9.1-p243.tar.bz2 # 解凍
$ cd ruby-1.9.1-p243 #解凍したディレクトリに移動
$ ./configure --prefix=$HOME optflags=-O3
        #インストール先を $HOME にする
        #x86_64環境だと optflags=-O3 をつけないと途中で止まる
$ make # コンパイル
$ make install # インストール

インストール先は書き込み権限のある $HOME
x86_64環境だと、optflags=-O3がないとコンパイル途中で止まってしまった
(via 1.9.1のビルドがparse.cのコンパイルで詰まっていた件 - `The rubyist'【えぬ】の日記 - Rubyist)

環境変数の設定

bash,zshなら~/.bashrc,~/zshrcに書くといいと思うよ

export PATH=:$HOME/bin:$PATH
export INCLUDE=$HOME/include

INCLUDE は gcc とかが見に来る。

RubyGemsを使ってみる

$ rubygems install twitter
/path/to/home/lib/ruby/1.9.1/rubygems/package.rb:10:in `require': no such file to load -- zlib (LoadError)
#以下略

zlibが必要ですかそうですか。
rubyインストール時に先にzlibにパスを通しておくといいみたいだけど知らない。
(via ruby 1.9.1-p0 @ Visual C++ 2005 - anon_193の日記)

zlib拡張のコンパイル・インストール

zlibはrubyアーカイブのext/zlibにあるのでコンパイルしに行く

$ cd ~/src/ruby-1.9.1-p243/ext/zlib
$ ruby extdonf.rb
checking for deflateReset() in -lz... no
checking for deflateReset() in -llibz... no
checking for deflateReset() in -lzlib1... no
checking for deflateReset() in -lzlib... no
checking for deflateReset() in -lzdll... no

ぐぬぬ。zlib自体が必要なようですね。

zlib自体のコンパイル・インストール

$ cd ~/src
$ wget http://www.zlib.net/zlib-1.2.3.tar.bz2
$ tar xjvf zlib-1.2.3.tar.bz2
$ cd zlib-1.2.3
$ ./configure --prefix=$HOME -s

インストール先は同じく$HOME

  • sをつけないと、この後の ruby extconf.rb で
libz.a: could not read symbols: Bad value

になるので、つける。意味は知らない。
(via Derakunの備忘録 Clamscanのインストール)
ここで先ほど環境変数INCLUDEを指定していないとヘッダが見つからないだの言われると思う。

rubyアーカイブに戻ってもういちどruby extconf.rb

$ ruby extconf.rb
checking for deflateReset() in -lz... yes
checking for zlib.h... no

むー、環境変数INCLUDEは見てくれないようだ。だから自分で指定する。

$ ruby extconf.rb --with-opt-include=$INCLUDE
checking for deflateReset() in -lz... yes
checking for zlib.h... yes
checking for kind of operating system... Unix
creating Makefile

Makefileができました。

$ make
$ make install

インストール完了!

気を取り直してRubyGemsを使ってみる

$ rubygems install twitter
When you HTTParty, you must party hard!
Successfully installed rubyforge-1.0.4
Successfully installed rake-0.8.7
Successfully installed hoe-2.3.3
Successfully installed ruby-hmac-0.3.2
Successfully installed oauth-0.3.5
Successfully installed mash-0.0.3
Successfully installed crack-0.1.4
Successfully installed httparty-0.4.3
Successfully installed twitter-0.6.15
9 gems installed

できた!やった!

$ gem install json
Building native extensions.  This could take a while...
Successfully installed json-1.1.9
1 gem installed

Native Extensionsもこの通り!
※ちなみに ~/.gemrc 内で gem: --no-ri --no-rdoc を指定しています。

感想

面倒。rootがあればapt-get install hogeだし。
RubyGemsが1.9系からは本体同梱になったので手間が省けているけれど、1.8系でやろうと思ったらもう一つ手間が増える事になるね。

疑問

今回コンパイルしたzlibの本体は$HOME/libにインストールされたんだけど、その後のruby extconf.rbとかはどうやってその場所を見つけたんだろう。includeパスの../libとかを自動で探してくれるとか?
誰か教えてくださいな。

追記

ちなみに、zlib本体などは自分でコンパイルせずにdebパッケージなどを自分で解凍して配置するのもいいとおもう。けど手間は大差ないかも。