MillerはCSVとJSONをコマンドラインで処理するツールです。前回↓はなぜか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
changelog。dch
というコマンドを使うと自動で生成できるみたいです。
dch --create -v 3.4.0 --package miller
するとこんな画面が現れるので適当に書きます。
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
仕組みはあんまり分かりませんが、ひとまずビルドできたのでよかったです。