Ubuntuのgit関連パッケージが、DebianとOpenSSLとのライセンス関係で、SSL非対応な件+Ubuntuでパッケージをビルド
cat 0001-xxx.patch | git imap-send だ!!
んん???何だこのエラーメッセージは。
SSL requested but SSL support not compiled in
いまどき何でSSLが使えないの!?
答えはとても簡単でした。以下のリンクにありました。
https://bugs.launchpad.net/ubuntu/+source/git-core/+bug/432786
「Debianではライセンスの都合上、OpenSSLをリンクできません。SSL使いたかったら、GnuTLSを使うように修正してちょ!」いやいや、ちょっとまて。upstreamを大幅に変更することになってしまうじゃないか。Ubuntuだけ、ちゃんとリンクさせるようにオプション変更した別パッケージを用意する、なんてことはできないのやら。
とりあえず俺様は使ってみたいので、使えないなど許せないので、力づくでもコンパイルを通す(謎)。
mkdir 適当なフォルダ cd 適当なフォルダ apt-get source git-core sudo apt-get build-dep git-core
とすると、ソースコードとビルドに必要なソフトウェア群が用意されます。このとき用意された、git-core-1.7.0.4というフォルダの中に、debian/rulesというテキストファイルがあります。このファイルは実はMakefileになっています。O_OPENSSL=1という文字列を代入している部分があるので、それだけを削除。
あとは次のコマンドを打てばよし!
fakeroot debian/rules binary
おっと・・・コンパイルエラーが出てしまいました。
git-compat-util.h:139:25: error: openssl/ssl.h: No such file or directory
なるほど、ヘッダがないということは、開発用(dev版)のOpenSSLがインストールされていないということだ。今回は、次のようにすることで切り抜けました。
sudo apt-get install libssl-dev fakeroot debian/rules binary
ところがまだ終わりません、今度はテストでエラーを吐きました。
* expecting success: rm -fr newdir && ( mkdir newdir && chmod -w newdir && test_must_fail git init newdir/a/b ) Initialized empty Git repository in /home/yuya/trunk/git-email/git-core-1.7.0.4/t/trash directory.t0001-init/newdir/a/b/.git/ * FAIL 24: init notices EPERM rm -fr newdir && ( mkdir newdir && chmod -w newdir && test_must_fail git init newdir/a/b ) * failed 1 among 24 test(s) make[3]: *** [t0001-init.sh] エラー 1
先ほどfakerootを使いましたが、これは要するに、「擬似的にroot権限を持たせる」ものです。ところが、このテストは、「書き込み権限のないフォルダに対して書き込みをしようとして、EPREM(権限のない操作)エラーで失敗する」ことをチェックするためのものです。もちろん、擬似的とはいえroot権限では、パーミッション設定を無視して書き込みをすることができます。よって、このテストはパスするわけがないのです。
よって作戦変更。結局のところ、Debianで用いられているのと同じ方法、dpkg-buildpackageコマンドを利用することで解決しました。
なお、このコマンドではroot権限が(擬似的にも)ない状態で実行されます。-rsudoオプションを付けておくと、root権限が必要になった時点でsudoが実行されるようになるそうですが、今回はなしでも特に問題はありませんでした。
ここまできてなんなのですが、
最終的に用いた方法は、以下のとおりです。
mkdir 適当なフォルダ cd 適当なフォルダ apt-get source git-core sudo apt-get build-dep git-core sudo apt-get install libssl-dev cd git-core-1.7.0.4 nano debian/rules # NO_OPENSSL=1を削除 dpkg-buildpackage
次のサイトを参考にしました。http://ambiesoft.ddo.jp/blog/archives/893
Debianの場合(今回最終的に用いた手段)はこっちです。Debian ¥Ñ¥Ã¥±¡¼¥¸¤Îºî¤êÊý
編集後記:どうやら、apt-get -b source
追記:どうやら、最初はgit-emailパッケージに対してやっていたものの、超勘違いでimap-sendはgit-coreパッケージのようでしたが、それはdpkgでインストールして初めて気づきました。実はビルド関連のコマンドの実行時には、「git-email・・・git-coreですね、なるほどわかります」としてgit-coreを対象に作業してくれていたようです。