root がなくても git-svn が使いたい
よくあるニーズですね。
以下、Linux 環境でのおはなしです。
使いたいコマンドがインストールされていないなら、野良ビルドして、置けるところに置いて、パスをとおせばいいわけです。
git の野良ビルドなんて特に悩むところなんてないんですが、これが、git-svn を使いたいとなると git 本体だけでなく svn の perl バインディングが必要になります。これを、perl が見に行ってくれるところに置くにも root 権限がいるわけで、まあ、デフォルト以外のところも探しに行ってもらうような方法もあるのかもしれませんが、見つけられなかったので、じゃあもう、perl からインストールしちゃおう、というのが以下の手順になります。
なんだかんだと毎年1回くらいこれで苦労してるような気がするので、いい加減なにかメモを書いておこうと思った次第です。
まずインストール先を決める
今回は、${HOME}/.install/ にしました。
で、決めたら、環境変数 PATH と LD_LIBRARY_PATH をこれに合わせて設定しておきます。これが設定されてないと野良ビルドできないやつとかあります。業務の合間にぼちぼちとかいう感じで作業してると、ふつーに数日掛かり *1ということになったりするので、もう .bash_profile (とか、その類のファイル) に書いておきます。
export PATH=${HOME}/.install/bin:${PATH} export LD_LIBRARY_PATH=${HOME}/.install/lib:${LD_LIBRARY_PATH}
基本的な作業の流れ
目的は、git コマンドが呼びだした → perl インタプリタが → use しようとしているモジュール (svn の perl バインディング) を見つけられるようにすること、なので、
- Perl モジュールの置き場所と、そこを見に行くインタプリタを用意するために perl を野良ビルドしてインストール
- Perl モジュールをインストール
- そのモジュールを見つけられる perl インタプリタを呼び出すような git コマンドを野良ビルドしてインストール
となります。
ところで、2. の Perl モジュールのインストールですが、これは CPAN にはなく、subversion の tar 玉からインストールすることができます。
依存関係の解決
ディストロのパッケージシステムを使ってインストールするなら、依存関係は自動的に解決して必要なパッケージもインストールしてくれますが、野良ビルドだとそうはいかないわけで、configure スクリプトを実行してはエラーメッセージを読み、必要なライブラリの tar 玉を取ってきてインストールし、make でビルドエラーが起こればまた必要なライブラリの tar 玉を取ってきてインストールし、ってなことを繰り返して必要なコマンドをインストールすることになります。
今回、野良ビルドしたパッケージはこちら。
- gdbm-1.12
- perl-5.24.0
- apr-1.5.2
- apr-util-1.5.4
- swig-3.0.11
- subversion-1.9.5
- git-2.11.0
もちろん、環境は千差万別なので、環境ごとに依存ライブラリは変わるでしょう。このメモが次回にどの程度役に立つかはちょっと心配なところです。
あと、野良ビルドしてインストールしたライブラリは、configure スクリプトは勝手には見つけてくれないことが多いので、そういうときはオプションなどで教えてあげる必要があります。configure スクリプトだと --help オプションでだいたいは分かりますが、Makefile の中を検索してうんぬんみたいなことをしたりなんだり。
手順
実行した手順をスクリプトとしてまとめて書いちゃうと以下になります。
#!/bin/bash -eu DEST=${HOME}/.install # # perl # gdbm tar xf ~/.download/gdbm-1.12.tar.gz cd gdbm-1.12 ./configure --prefix=${DEST} make make install cd - # perl tar xf ~/.download/perl-5.24.0.tar.gz cd perl-5.24.0 ./Configure -des -Dprefix=${DEST} -Dccflags=-L${DEST}/lib -Dldflags=-L${DEST}/lib make make install cd - # # Subverion Perl binding # apr tar xf ~/.download/apr-1.5.2.tar.bz2 cd apr-1.5.2 ./configure --prefix=${DEST} make make install cd - # apr-util tar xf ~/.download/apr-util-1.5.4.tar.bz2 cd apr-util-1.5.4 ./configure --prefix=${DEST} --with-apr=${DEST}/bin/apr-1-config make make install cd - # swig tar xf ~/.download/swig-3.0.11.tar.gz cd swig-3.0.11 ./configure --prefix=${DEST} --with-perl5=${DEST}/bin/perl make make install cd - # svn swig-pl tar xf ~/.download/subversion-1.9.5.tar.bz2 cd subversion-1.9.5 ./configure --prefix=${DEST} --with-swig=${DEST}/bin/swig PERL=${DEST}/bin/perl --libdir=${DEST}/lib make make swig-pl make install-swig-pl cd - # # git tar xf ~/.download/git-2.11.0.tar.gz cd git-2.11.0 make prefix=${DEST} PERL_PATH=${DEST}/bin/perl all make prefix=${DEST} PERL_PATH=${DEST}/bin/perl install cd -
今回ハマったところをいくつかあげてみると、
参考にした情報
- http://blog.livedoor.jp/sasata299/archives/51182513.html
- http://perl-users.jp/articles/advent-calendar/2009/hacker/16.html
- http://subversion.1072662.n5.nabble.com/memory-failure-in-perl-bindings-for-subversion-1-5-6-td144135.html
- https://svn.haxx.se/users/archive-2011-02/0467.shtml
- https://groups.google.com/forum/#!topic/subversion_users/9lDJzhT4vZU
まとめ
サーバー管理者のひとにお願いして入れてもらうといいと思います。
*1:トラブルシューティングしながらという感じにもなるので、今回は2週間かかった。