Millerのdebパッケージをつくる

MillerはCSVJSONコマンドラインで処理するツールです。前回↓はなぜかFreeBSDでのビルドを書きましたが、もちろんLinuxでもビルドできます。

↓このドキュメントを見てやったら意外とdebパッケージつくれたのでメモ。Ubuntu 15.10でやりました。

IntroDebianPackaging - Debian Wiki

必要なパッケージをインストール

Millerをビルドするのに必要なパッケージ

sudo apt install automake autoconf libtool flex

debパッケージを作るのに必要なパッケージ

sudo apt install devscripts debhelper

debパッケージをつくる準備

アーカイブ

取得

Githubからtar.gzファイルを取ってきます。

mkdir deb-build
cd deb-build

wget https://github.com/johnkerl/miller/releases/download/v3.4.0/mlr-3.4.0.tar.gz
名前を変える

The name consists of the source package name, an underscore, the upstream version number, followed by .orig.tar.gz.

とあるので名前を変えます。_じゃないといけないのに注意。

mv mlr-3.4.0.tar.gz miller_3.4.0.orig.tar.gz
展開
tar xf miller_3.4.0.orig.tar.gz
mv mlr-3.4.0 miller-3.4.0/
cd miller-3.4.0/

debianディレクトリ

ここにchangelogとかcopyrightとかを置きます。

mkdir debian/
debian/changelog

changelogdchというコマンドを使うと自動で生成できるみたいです。

dch --create -v 3.4.0 --package miller

するとこんな画面が現れるので適当に書きます。

f:id:yutannihilation:20160217220226p:plain:w400

debian/compat

compatibilityのレベルを指定するものらしいですがよく分かりません。9って書いておけばいいらしいです。

echo 9 > debian/compat
debian/control

パッケージに関する情報について書いたファイルです。Rユーザーは見覚えがあるフォーマットでしょう。今回は適当に埋めますが、各フィールドの詳細はここに書かれています:Debian Policy Manual - Control files and their fields

Source: miller
Maintainer: yutannihilation <example@example.com>
Section: misc
Priority: optional
Standards-Version: 3.9.2
Build-Depends: debhelper (>= 9)

Package: miller
Architecture: amd64
Description: Miller is like sed, awk, cut, join, and sort for
 name-indexed data such as CSV and tabular JSON
debian/copyright

ライセンスについて書かれたファイルです。とりあえず空でいいらしいです。

touch debian/copyright
debian/rules

debhelperがビルドするときに使うファイル?らしいです。インデントは空白ではなくてタブなのに注意。

#!/usr/bin/make -f
%:
        dh $@
debian/source/format

これはソースのフォーマットを示すものらしいです。第5章 debianディレクトリーにあるその他のファイルによると、

  • 3.0 (native): ネイティブ Debian パッケージ
  • 3.0 (quilt): それ以外の全て。

と書かれているので、後者を書いておきます。

3.0 (quilt)

これで準備OKのはず。

debパッケージをつくる

debuildは、正式なパッケージとして署名するのでなければ-us -ucを指定します。で、やってみると、

$ debuild -us -uc

...snip...

E: miller changes: changed-by-address-malformed yutannihilation <yutannihilation@yubuntu>
W: miller source: non-native-package-with-native-version
W: miller source: debhelper-but-no-misc-depends miller
W: miller source: ancient-standards-version 3.9.2 (current is 3.9.6)
E: miller: debian-changelog-file-contains-invalid-email-address yutannihilation@yubuntu
W: miller: copyright-without-copyright-notice
E: miller: description-starts-with-package-name
W: miller: empty-binary-package
W: miller: zero-byte-file-in-doc-directory usr/share/doc/miller/copyright
Finished running lintian.

なんかエラーが出ます。うっ、これは...Rのパッケージをつくったときもこんなの見た記憶が…!

めげずにメールアドレスの形式とかを修正すると、ちゃんとビルドできました。

$ dpkg-deb --contents ../miller_3.4.0_amd64.deb
drwxr-xr-x root/root         0 2016-02-17 08:45 ./
drwxr-xr-x root/root         0 2016-02-17 08:45 ./usr/
drwxr-xr-x root/root         0 2016-02-17 08:45 ./usr/bin/
-rwxr-xr-x root/root    412560 2016-02-17 08:45 ./usr/bin/mlr
drwxr-xr-x root/root         0 2016-02-17 08:45 ./usr/share/
drwxr-xr-x root/root         0 2016-02-17 08:45 ./usr/share/man/
drwxr-xr-x root/root         0 2016-02-17 08:45 ./usr/share/man/man1/
-rw-r--r-- root/root     13684 2016-02-17 08:45 ./usr/share/man/man1/mlr.1.gz
drwxr-xr-x root/root         0 2016-02-17 08:45 ./usr/share/doc/
drwxr-xr-x root/root         0 2016-02-17 08:45 ./usr/share/doc/miller/
-rw-r--r-- root/root         0 2016-02-17 08:43 ./usr/share/doc/miller/copyright
-rw-r--r-- root/root       155 2016-02-17 08:42 ./usr/share/doc/miller/changelog.gz

仕組みはあんまり分かりませんが、ひとまずビルドできたのでよかったです。