第7章 パッケージのエラーの検証

目次

7.1. 怪しげな変更
7.2. インストールに対するパッケージの検証
7.3. パッケージのメンテナースクリプトの検証
7.4. Using lintian
7.5. debc コマンド
7.6. debdiff コマンド
7.7. interdiff コマンド
7.8. mc コマンド

ここでは, 公式アーカイブにパッケージをアップロードする前に、作成したパッケージのエラーをあなた自身で確認するために知っておかなければならない方法について、幾つか述べます。

あなたのマシン以外でのテストもまた良いアイデアです。以下に述べるすべてのテストにおける、どんな警告とエラーについてでもしっかりと確認しておかなければなりません。

あなたの 3.0 (quilt) フォーマットのノンネイティブ Debian パッケージ をビルドした後で、debian/patches ディレクトリー内に debian-changes-* のような新規の自動生成されたパッチファイルを見つけた場合。何かの間違いで何らかのファイルを変更したか、ビルドスクリプトがアップストリームソースに変更を加えた可能性が大いにあります。あなたの間違いなら、それを修正しましょう。ビルドスクリプトが引き起こした場合は、rules ファイルのカスタマイズ」 にあるように dh-autoreconf を使って根本原因を修正するか、source/options にあるように source/options を使って回避策をとります。

あなたのパッケージが問題なくインストールできるかどうかをテストしなければなりません。debi(1) コマンドはあなたが作成した全てのバイナリーパッケージのインストールテストに役立ちます。

$ sudo debi gentoo_0.9.12-1_i386.changes

別のシステムでインストール時に問題が起きるのを防ぐために、Debian アーカイブよりダウンロードした Contents-i386 ファイルを用いて、他の既存のパッケージと重複するファイルがないことを確認しておかなければなりません。apt-file コマンドはこの作業において恐らく役に立つでしょう。重複するファイルが存在するならば、実際に問題になることを回避するために、ファイルをリネームするか、複数のパッケージが依存する独立のパッケージに共通ファイルを移動するか、他の影響のあるパッケージと調整しながら alternatives (update-alternatives(1) 参照)を用いるか、debian/controlConflicts 項目を宣言して下さい。

全てのメンテナースクリプト (preinstprermpostinst そして postrm ファイルのこと) は、それが debhelperプログラムで自動生成されたのでない場合は、正しく書くことが非常に困難です。だからあなたが新米メンテナーならばこれらは使わないで下さい ({pre,post}{inst,rm} 参照)。

パッケージがこれらの重要なメンテナースクリプトを使用するならば、インストールだけではなく、削除、完全削除 (purge)、そしてアップグレードについても確実にテストしましょう。多くのメンテナースクリプトのバグは削除もしくは完全削除の場合に発生します。これらのテストのためには、以下の様に dpkg コマンドを実行します:

$ sudo dpkg -r gentoo
$ sudo dpkg -P gentoo
$ sudo dpkg -i gentoo_version-revision_i386.deb

以下のような順番で実行すべきでしょう:

  • (可能な場合は)前回バージョンをインストールします。

  • 旧バージョンからアップグレードします。

  • 旧バージョンになるよう、ダウングレードします (オプション)。

  • 完全削除 (purge) します。

  • 新しいパッケージとしてインストールします。

  • 削除します。

  • もう一度インストールします。

  • 完全削除 (purge) します。

これが最初に作成したパッケージならば、将来発生するかもしれない問題を防ぐために、異なるバージョンのダミーパッケージを作成すべきです。

あなたのパッケージが過去の Debian にてリリースされていた場合には、人々は大抵最新の Debian のリリース版に含まれているバージョンからパッケージのアップグレードをするであろう、ということに配慮しましょう。上記の手順で、そのバージョンからきちんとアップグレードできることを、忘れずに確認しておいてください。

ダウングレードは公式にはサポートされていませんが、これをサポートするのは友好的な態度です。

lintian(1).changes に対して実行しましょう。lintian コマンドはパッケージ作成時のよくある間違いをチェックするために多くのテストスクリプトを実行します。[76]

$ lintian -i -I --show-overrides gentoo_0.9.12-1_i386.changes

もちろん、.changes のファイル名はあなたが作成したパッケージに置き換えて下さい。lintian コマンドの出力は以下のようにマークされています:

  • E: はエラーです。 確実にポリシー違反もしくはパッケージエラーです。

  • W: は警告です。 ポリシー違反もしくはパッケージングエラーである可能性があります。

  • I: は参考情報です。パッケージのとある性質について参考となる情報を提供します。

  • N: は覚書です。 デバッグに有用な情報を詳述します。

  • O: はオーバーライド通知です。 lintian-overrides ファイルによりメッセージがオーバーライドされたメッセージです。これは --show-overrides オプションを指定した際に表示されます。

警告が出た場合には、パッケージを調整するか、その警告が不当であることを確認して下さい。もし警告が不当である場合には {package.,source/}lintian-overrides で述べた lintian-overrides を作成して下さい。

dpkg-buildpackage によるパッケージの生成と lintian の実行は、debuild(1) コマンド、もしくは pdebuild(1) コマンドを用いれば一気に実行することができます。

debc(1) コマンドを用いるとバイナリーパッケージに含まれるファイルの一覧が得られます。

$ debc package.changes

debdiff(1) コマンドを用いると、二つのソースパッケージに含まれているファイルを比較することができます。

$ debdiff old-package.dsc new-package.dsc

debdiff(1) コマンドは二つのバイナリーパッケージに含まれるファイルの一覧を比較することもできます。

$ debdiff old-package.changes new-package.changes

これらのコマンドは、ソースパッケージ中でどんな変更をしたのか、バイナリーパッケージの中で意図せず削除したり配置を間違えたりしていないか、そしてバイナリーパッケージの更新時に不用意な変更をしていないかどうか、といった事柄を確認するのに便利です。

interdiff(1) コマンドを用いると、二つの .diff.gz ファイルを比較することができます。旧来の 1.0 ソース形式でパッケージを更新している場合には、メンテナーがソースに意図しない変更をしていないことを確認するのに便利です。

$ interdiff -z old-package.diff.gz new-package.diff.gz

新規の 3.0 ソースフォーマットは patches/* で説明したように複数のパッチファイル中に変更を保存します。各々の debian/patches/* ファイルの変化も interdiff を使って追いかけられます。

mc(1) の様に、*.debパッケージファイルだけではなく、*.udev, *.debian.tar.gz, *.diff.gz, *.orig.tar.gz の中身を閲覧することができるファイルマネージャを用いると、多くのファイルの検査が直感的に行なえます。

不要なファイルやサイズがゼロのファイルがバイナリーパッケージとソースパッケージに含まれていないことをよく確認して下さい。 大抵は不要なファイルが正しく削除されずに残ってしまっています。rules を調整しこれを修正して下さい。



[76] /etc/devscripts.conf~/.devscripts において debuildコマンド」 で述べた設定をしている場合には、lintian-i -I --show-overrides オプションを指定する必要はありません。