heroku で redmine をフルに動かそうと思ってセットアップをしていたんだけど、heroku では subversion が使えないので、リポジトリ連携を動かすことができない。コードと紐付いていない Issue Tracking はゴミ同然なので何とかしてみた。
その昔は vulcan という gem を使って heroku でビルドサーバーとパッケージを作るという方法があったみたいだけど、最近だと heroku run bash
でログインしてビルドするという方法らしい。
ログインしたら、ビルドしたいパッケージをダウンロードする。wget は入ってないので curl を使う。なお、ログイン後の $HOME は /app という Rails.root になっているので tmp とか vendor に適当に chdir しておく。
$ curl -O http://ftp.kddilabs.jp/infosystems/apache/subversion/subversion-1.8.5.tar.gz
subversion をビルドするには apr と sqlite3 が必要なので、片っ端からダウンロードする。あと、sqlite は zip でしか提供しておらず、heroku の dyno には unzip が入ってないので、手元にダウンロードしてから改めて tar.gz にして s3 あたりに置いて dyno の中に置くということをやった。だるい。
今回は /app/vendor/apr-1.5.0
や /app/vendor/subversion-1.7.4
という感じにバイナリを展開できるように作ることにした。
$ tar xf apr-1.5.0.tar.gz
$ mv apr-1.5.0{,.src}
$ cd vendor/apr-1.5.0.src
$ ./configure --prefix=/app/vendor/apr-1.5.0
$ make && make install
だいたいこんな感じで apr, apr-util をビルドしてから subversion も同様に展開する。subversion は sqlite をワーキングディレクトリに配置しないとダメらしいので configure が指定するようにソースコードを展開する。後は --with-apr とかその辺のオプションを良い感じに設定してビルド。
ビルド後はディレクトリを tar cf で固めてから、dyno の外に持っていく。dyno から外の世界に持っていくのはパスワード認証が出来る ssh 接続可能なサーバーのみなので、DigitalOcean で一時作業用の vm を作って root とパスワードログインして手元に持ってきてから、vm を壊して終わり。便利だなあ。
作成したパッケージを s3 に配置してから buildpack をこんな感じに修正したら、無事 heroku の dyno で svn コマンドが使えるようになった。
apt を使わせてくれたらこんな面倒なことしなくていいのになあ。グラフィックとか、特殊なライブラリを要求するようなアプリケーションを heroku で動かしている人はカスタムパッケージをビルドしてからの buildpack 改造が便利なようです。お試しください。
> sqlite は zip でしか提供しておらず<br>公式サイトで配布してある sqlite-autoconf-3080200.tar.gz みたいなのが、普通に ./configure ... && make && make install できるアーカイブで、かつ sqlite-amalgamation-3080200.zip に含まれるファイルは全部全く同じように入っているはずです。
なんと...