再びpython-debianのお話

この記事は Debian/Ubuntu Advent Calendar 2017 12月14日の記事です。

昨日で投稿が止まってしまいそうだったので急遽書いてみました。

python-debianとは

python-debiandebian/control.changes などのフォーマットを扱うのに便利ならライブラリです。Debianパッケージとして提供されているので、 sudo apt install python-debian としてインストールすることができます。

使い方

オンラインマニュアルは無いのですが、Debian Sourcesのpython-debianのページ から任意のバージョンの README, README.deb822 や、 examples 以下のサンブルコードを参考にすることはできます。

でも結局Debianパッケージをインストールしないと使えないので、 /usr/share/doc/python-debian 以下を参照すれば良いだけですが。

なぜ「再び」かというと

I made debsign of Python libary that can be run without a TTY でもpython-debianのネタを書いていました。JenkinsでDebianパッケージのカスタムビルドパッケージをビルドして、GPGサインしてローカルアーカイブにアップロードするために:code:debsign コマンドの代わりに python-debianを使ったPythonパッケージを作った ときのネタでした。

changesファイルを読み取り、GPGで署名後のハッシュで上書きする

やっていることは上記の記事に書いてあるのですが、実際の処理は書いていなかったので抜き出してみると、下記のような感じです。

import deb822

with open('path/to/changes_file', 'rb') as fileobj:
    changes = deb822.Changes(fileobj)

return [changes['Files'],
        changes['Checksums-Sha1'],
        changes['Checksums-Sha256']]

ビルドしたdebianパッケージの .changes ファイルのmd5, sha1, sha256のチェックサムを読み取って、 .changes ファイルのエントリを書き換え、署名するのですが、python-debian パッケージに含まれる、 deb822.Changes クラスでバイナリモードで読み取った .changes を読み込むだけで、上記のように簡単に対象のエントリにアクセスできる便利なやつです。

python-debianに含まれるモジュール

deb822以外にも

  • arfile
  • changelog
  • copyright
  • debfile
  • debian_support
  • debtags

などが含まれるのでpython-debianパッケージをインスールしていれば、 pydoc コマンドでdocstringのドキュメントを読むことができます。実際に使うときはそちらを参照するのが良いでしょう。

まとめ

  • python-debianという便利なDebianパッケージがあるよ
  • 以前作ったPythonパッケージでは、 deb822.Changes だけでアクセスできて便利だったよ
  • ドキュメントはpython-debianパッケージ自体に含まれているよ

というお話でした。