トップ «前の日記(2013/12/30 (月) ) 最新 次の日記(2014/01/01 (水) 元日)» 編集 RSS feed

HsbtDiary


2013/12/31 (火) [長年日記]

[heroku][ruby] heroku で任意のバイナリを使う術

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 をビルドするには aprsqlite3 が必要なので、片っ端からダウンロードする。あと、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 改造が便利なようです。お試しください。

本日のツッコミ(全2件) [ツッコミを入れる]
# かずひこ (2013/12/31 (火) 23:13)

> sqlite は zip でしか提供しておらず<br>公式サイトで配布してある sqlite-autoconf-3080200.tar.gz みたいなのが、普通に ./configure ... && make && make install できるアーカイブで、かつ sqlite-amalgamation-3080200.zip に含まれるファイルは全部全く同じように入っているはずです。

# hsbt (2014/01/01 (水) 元日 00:29)

なんと...