Ruby 1.8.7 が終了するのでレンサバCGIで Ruby 2.0.0-p195 と tDiary を動かした
あと一週間でついに Ruby 1.8.7 のサポートが終了する。Ruby 1.8.0のリリースが2003年8月だから、10年間もお世話になったことになる。
ところが、さくらのレンタルサーバはまだ Ruby 1.8 しか入っていない。
$ /usr/local/bin/ruby -v
ruby 1.8.7 (2012-10-12 patchlevel 371) [amd64-freebsd8]
tDiary も次のリリースからは 1.8 がサポート終了になるので、さくらのレンタルサーバで Ruby 2.0 で tDiary の最新版を動かす手順をまとめておく *1 。
git のインストール
Ruby 2.0 のインストールに rbenv + ruby-build を使うので、 GitHub からソースコードを取得できるように git をインストールしておく。インストール先はホームディレクトリ ($HOME) 。 FreeBSD の make だとビルドに失敗するため、 gmake (GNU Make) を使う。
$ wget --no-check-certificate https://git-core.googlecode.com/files/git-1.8.3.1.tar.gz
$ tar zxvf git-1.8.3.1.tar.gz
$ cd git-1.8.3.1
$ ./configure --prefix=$HOME --enable-pthreads=-pthread --with-curl=/usr/local
$ gmake && gmake install
--enable-pthreds
オプションを指定しないとビルドでエラーになる。
LINK git-credential-store
libgit.a(run-command.o)(.text+0x6a2): In function `start_async':
/home/machu-test/src/git-1.8.3.1/run-command.c: 719: undefined reference to `pthread_create'
libgit.a(preload-index.o)(.text+0x97): In function `read_index_preload':
/home/machu-test/src/git-1.8.3.1/preload-index.c: 92: undefined reference to `pthread_create'
gmake: *** [git-credential-store] Error 1
--with-curl
を指定しないと、インストール後に https スキームが使えない。
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
Cloning into '/home/machu-test/.rbenv'...
fatal: Unable to find remote helper for 'https'
参考リンク
- さくらサーバにGitを入れて使ってみる | GettingOUT
- さくらのレンタルサーバにgitを入れる : pthread_create 云々 | DOOM! DOOMER!! DOOMEST!?
- 【さくら スタンダード プラン】RE: fatal: Unable to find remote helper for 'http' を解決【git】 - ぐぐったら出てきた。
rbenv + ruby-build のインストール
Ruby は普通に tar.gz のソースからインストールするのではなく、 rbenv と ruby-build で管理する。これで、今後のバージョンアップへの追従が楽になる。昔はrvmを使っていたけど、今は rbenv 。インストール手順は 公式ドキュメント を参照。
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ mkdir ~/.rbenv/plugins
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
さくらのレンタルサーバは標準シェルが csh なので、 rbenv の設定は .bashrc に追記している (.bash_profile はログオン時しか読まれない) 。
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
$ source ~/.bashrc
$ rbenv --version
rbenv 0.4.0-49-g8b04303
ruby 2.0.0-p195 のインストール
rbenv を使ってコンパイルする。
$ rbenv install 2.0.0-p195
そのままだと、 configure で失敗する。
/tmp/ruby-build.20130617231646.39014/yaml-0.1.4 /tmp/ruby-build.20130617231646.39014 ~
/home/machu-test/.rbenv/plugins/ruby-build/bin/ruby-build: ./configure: /bin/sh: bad interpreter: Permission denied
./configure が失敗するのは、 /tmp (/var/tmp) が noexec に設定されているため。
$ cat /etc/fstab
# Device Mountpoint FStype Options Dump Pass#
/dev/ad0p2 none swap sw 0 0
/dev/ad0p3 / ufs rw,acls 1 1
/dev/ad0p4 /usr ufs rw,acls 2 2
/dev/ad0p5 /var ufs rw,userquota,noexec,nosuid 2 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0
/dev/ad1 /home ufs rw,userquota,acls,nosuid 2 2
環境変数 TMPDIR をホームディレクトリ以下に設定すればよい。あわせて、 gmake を使うように環境変数 MAKE も設定しておく(でないと、ビルドに失敗する)。 .bashrc に追記する。
export TMPDIR=$HOME/tmp
export MAKE=gmake
これで、 Ruby 2.0 がインストールできた。
$ rbenv install 2.0.0-p195
$ rbenv global 2.0.0-p195
$ ruby -v
ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-freebsd8.1]
tDiary のインストール
git を使って、開発版の tDiary をダウンロード。
$ cd ~/www
$ git clone https://github.com/tdiary/tdiary-core.git
$ mv tdiary-core diary
$ cd diary
$ mv index.rb index.cgi
$ mv update.rb update.cgi
最新の tDiary は、関連パッケージを外部ライブラリ (RubyGems) として取得するようになっている。ライブラリの管理で bundler が必要なので、インストールしておく。 bundle install コマンドで、外部ライブラリ (HikiDocなど) をインストールする。なお、リリース版のパッケージでは外部ライブラリを同梱して配布する予定なので、この作業は不要。
$ gem install bundler
$ rbenv rehash
$ bundle install --gemfile Gemfile.cgi
あとはいつもどおり、 .htaccess や .htpasswd や tdiary.conf を設定すればおしまい。
まとめ
レンタルサーバのCGIでも、最新版の Ruby と tDiary を普通に動かすことができる。ポイントは3つかな。
- Rubyは rbenv を使ってインストールする
- /tmp ではなく $HOME/tmp を使う
- make ではなく gmake を使う
レンタルサーバの利用者がそれぞれ Ruby 2.0 をコンパイルするのは無駄なので、さくらのレンタルサーバ標準で使えるようにしてほしいところ。