mercurial-buildpackageを使ってDebianパッケージを作成。¶
upstreamがmercurialで管理されているソフトウェアをDebianパッケージにするのに、mercurial-buildpackageを使ってみたのでそのメモです。
まずはパッケージの導入。
$ sudo apt-get install mercurial-buildpackage
upstream(今回はfuncparserlib)からcloning。
$ hg clone https://code.google.com/p/funcparserlib/
複製先ディレクトリ: funcparserlib
全チェンジセットを取得中
チェンジセットを追加中
マニフェストを追加中
ファイルの変更を追加中
154 のチェンジセット(443 の変更を 132 ファイルに適用)を追加(+1個のヘッド)
ブランチ default へ更新中
ファイル状態: 更新数 33、 マージ数 0、 削除数 0、 衝突未解消数 0
デフォルトのブランチはdefaultですが、
$ cd funcparserlib
$ hg branch
default
$ hg branches
default 153:faefc873c619
0.3.x 112:28528a73b122
funcparserlibは0.3.xがリリース用のブランチなので、0.3.xにチェックアウトします。
$ hg update 0.3.x
ファイル状態: 更新数 20、 マージ数 0、 削除数 14、 衝突未解消数 0
glogでチェンジセットが112になっていることを確認できます。
$ hg glog
(snip)
| o チェンジセット: 113:f7bb0e84c0fe
| | 親: 111:004c67aabeb3
| | ユーザ: Andrey Vlasovskikh <andrey.vlasovskikh@gmail.com>
| | 日付: Wed May 05 17:49:27 2010 +0400
| | 要約: m
| |
| | @ チェンジセット: 112:28528a73b122
| | | ブランチ: 0.3.x
| | | 親: 110:e568fcc9e6d6
| | | ユーザ: Andrey Vlasovskikh <andrey.vlasovskikh@gmail.com>
| | | 日付: Tue Nov 29 23:03:05 2011 +0300
| | | 要約: Switched from nosetests to unittest for compatibility
| | |
| o | チェンジセット: 111:004c67aabeb3
| | | 親: 109:e33b53943458
| | | ユーザ: Andrey Vlasovskikh <andrey.vlasovskikh@gmail.com>
| | | 日付: Mon Mar 15 12:43:18 2010 +0300
| | | 要約: m
| | |
+---o チェンジセット: 110:e568fcc9e6d6
| | ブランチ: 0.3.x
| | 親: 108:f7b9c45450d7
| | ユーザ: Andrey Vlasovskikh <andrey.vlasovskikh@gmail.com>
| | 日付: Tue Nov 29 23:03:03 2011 +0300
| | 要約: Python 3 compatibility
| |
| o チェンジセット: 109:e33b53943458
| | 親: 107:c2069a3825d2
| | ユーザ: Andrey Vlasovskikh <andrey.vlasovskikh@gmail.com>
| | 日付: Sun Mar 14 13:18:09 2010 +0300
| | 要約: Fixed #12: Positions in lexer error ouput are now 1-based instead of 0-based
| |
o | チェンジセット: 108:f7b9c45450d7
| | ブランチ: 0.3.x
| | 親: 106:4e1434e9013b
| | ユーザ: Andrey Vlasovskikh <andrey.vlasovskikh@gmail.com>
| | 日付: Fri Nov 18 02:15:56 2011 +0300
| | 要約: More information in exception objects (Issue 14)
| |
(snip)
なお最新のリリースの0.3.5のタグは、.hgtagsファイルで確認できます。
$ cat .hgtags
7d24cd9e4b75a85b1ee04f761e59857296d535d4 0.1
e68a2a1d0f55f07f9702dc4ee5da7f6f536402e8 0.2
8c9841ffcaa8b2b17ae93140aea89fd99526bed8 0.3
e5f9249d65bc6c9f8a5d219e31c3abd30167588a 0.3.1
23cf9ed9635b112fcb2247d960f4a918eaaad4bc 0.3.2
dfcce3e0b5765a393489570a41c7c95f5d8f1b15 0.3.3
ce8269e2e9ad9795f089b397efbec33758337016 0.3.4
2a094772c9e97ee5de5618f9c4479253fb357e4e 0.3.5
現在Debianパッケージとなっているfuncparserlib0.3.5は、Python2.7がデフォルトになってからビルドができないバグがあります。これは0.3.xのheadであるチェンジセット112では修正されているので、これをtarballにアーカイブします。doc/changes.mdとdoc/index.mdがsymlinkになっていますが、このままアーカイブするとmercurial-importorigおよびdebuild時にコケます。原因は、
http://twitter.com/#!/yy_y_ja_jp/status/176181847347298305:
@mkouhei mercurial-buildpackageが使ってるnekoがsymlink対応してない 6 days ago
とのことなので、この二つのsymlinkはアーカイブせずに-Xオプションで除外しておきます。
$ hg archive --prefix funcparserlib/ -r 112 -t tgz -X doc/Changes.md -X doc/index.md ../funcparserlib_0.3.5+hg~100.orig.tar.gz
このアーカイブしたファイルを元にmercurial-importorigを行います。
$ mkdir -p deb/funcparserlib
$ cd deb/funcparserlib
$ hg init
$ mercurial-importorig ../../funcparserlib_0.3.5+hg~100.orig.tar.gz
I: Reverting branch funcparserlib to state before import.
importができたらdh_makeを実行します。
$ dh_make -p funcparserlib_0.3.5+hg~100 -f ../../funcparserlib_0.3.5+hg~100.orig.tar.gz
Type of package: single binary, indep binary, multiple binary, library, kernel module, kerne
l patch?
[s/i/m/l/k/n] s
Maintainer name : Kouhei Maeda
Email-Address : mkouhei@palmtb.net
Date : Sun, 04 Mar 2012 02:29:27 +0900
Package Name : funcparserlib
Version : 0.3.5+hg~100
License : blank
Type of Package : Single
Hit <enter> to confirm:
Done. Please edit the files in the debian/ subdirectory now. You should also
check that the funcparserlib Makefiles install into $DESTDIR and not in / .
debian/*を編集後、debianディレクトリを登録しコミットします。
$ hg add debian
$ hg commit
Debianバージョン用のタグを設定します。
$ cat .hgtags
b4881fbed50135a62b070892f1f6fc2f91b81c5d funcparserlib_0.3.5+hg~112
$ mercurial-tagversion
$ cat .hgtags
b4881fbed50135a62b070892f1f6fc2f91b81c5d funcparserlib_0.3.5+hg~112
2e1787194ce0a880ef38e2ac09af5648a7cae27c funcparserlib_0.3.5+hg~112-1
mercurial-buildpackageコマンドでビルドすると、
$ mercurial-buildpackage
親ディレクトリにパッケージが生成されます。
$ ls -lrt ..
(snip)
-rw-r--r-- 1 user user 2837 3月 4 04:50 funcparserlib_0.3.5+hg~112-1.debian.tar.gz
-rw-r--r-- 1 user user 978 3月 4 04:50 funcparserlib_0.3.5+hg~112-1.dsc
drwxr-xr-x 9 user user 4096 3月 4 04:50 funcparserlib
-rw-r--r-- 1 user user 30376 3月 4 04:50 python-funcparserlib_0.3.5+hg~112-1_all.deb
-rw-r--r-- 1 user user 2241 3月 4 04:50 funcparserlib_0.3.5+hg~112-1_amd64.changes
-rw-r--r-- 1 user user 4790 3月 4 04:50 funcparserlib_0.3.5+hg~112-1_amd64.build
あとはいつもと同じようにpbuilderでチェックします。
$ cd ..
$ sudo pbuilder --build funcparserlib_0.3.5+hg~112-1.dsc
参考¶
リンク先はgit-buildpackageを使っていて、野良パッケージの作成が目的で、origファイルを消すという謎の手順がありますが、基本的な手順は参考になりました。