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 とすれば、今回みたく変更が必要だったりしない場合は、自動でビルドしてくれるようです(entirely not tested)。


追記:どうやら、最初はgit-emailパッケージに対してやっていたものの、超勘違いでimap-sendはgit-coreパッケージのようでしたが、それはdpkgでインストールして初めて気づきました。実はビルド関連のコマンドの実行時には、「git-email・・・git-coreですね、なるほどわかります」としてgit-coreを対象に作業してくれていたようです。