7 lintian と linda を使っての Debian パッケージの作成精度向上

上川純一      
___________________________________________________________________________________________________________________________

7.1 Debian パッケージに関する問題のパターンマッチング

Debian パッケージを作成する際に, このファイルにこういう内容を書いているのであれば一般 的 に 問 題 だ ろ う , と か , こ の フ ァイ ル が こ の 内 容 に な って い る の で あ れ ば テ ン プ レ ー ト ファイルのままになっているのではないか, ということを指摘するのは実はそんなに難しいこ と で は あ り ま せ ん . Debian パッケージのファイルの中を正規表現で検索してしまえば見 付 か り ま す . そ う い う 一 般 的 な 問 題 の 解 決 方 法 と し て , lintian や linda は利用されていま す .

例えば, 間違ったタイプのファイルが間違ったディレクトリに配置されている, というような問題を検出 す る の に 優 れ て い ま す .

7.2 実行してみる

で は , 実 行 し て み ま しょう.

lintian を実行してみます. deb パッケージを指定すると, バリナリパッケージを確認します. dsc ファイ ル を 指 定 す る と , ソ ー ス パ ッケ ー ジ を 確 認 し ま す . changes ファイルを指定すると, そのアップロードに 含 ま れ る 予 定 の フ ァイ ル を 全 て 確 認 し て く れ ま す . 何 か メ ッセ ー ジ が 出 る と , -i オプションをつけると, 詳 細 な メ ッセ ー ジ を 表 示 し て く れ ま す .

# lintian wysihtml-el_0.11.cvs.1-1_powerpc.deb
# lintian wysihtml*dsc
# lintian wysihtml*changes
E: wysihtml_0.11.cvs.1-1_powerpc.changes: bad-distribution-in-changes-file UNRELEASED
# lintian -i wysihtml*changes
E: wysihtml_0.11.cvs.1-1_powerpc.changes: bad-distribution-in-changes-file UNRELEASED
N:
N:   You’ve specified an unknown ‘target distribution’ for your upload in
N:   the debian/changelog file.
N:
N:   Note, that the distributions non-free and contrib are no longer valid.
N:   You’ll have to use distribution ‘unstable’ and ‘Section: non-free/xxx’
N:   or ‘Section: contrib/xxx’ instead.
N:

出力が E:ではじまる場合は, ポリシーに反するエラーです. W:は特にポリシーに反するというわけで はないですが, 直したほうが良いのではないか, と推測される「よくある問題」 に対しての警告 です.

同様に linda を実行してみます.

# linda wysihtml-el_0.11.cvs.1-1_powerpc.deb
# linda wysihtml*dsc
# linda wysihtml*changes

この二つのツールの出力は全く同じではないので, とりあえず両方実行しておきましょう.

7.2.1 警告メッセージの対応方法

Debian Policy に基づいてどの部分が問題なのか, を指摘してくれます. 修正の方法も書いてある場合も あるので, 適切に対応しましょう.

/usr/share/lintian/overrides/, /usr/share/linda/overrides/ にファイルを追加すると, メッセージを無 視するように設定することができます. これらのファイルのことを lintian overrides, linda overrides とよ びます.

適切でない警告*8 を 出す場合もあるので, そういう場合にはここにファイルを追加するようにパッケージを作成し ます. 個人的には, ユーザに必要でないファイルをシステムに追加することになるため, 好きではありません. できることであれば, lintian や linda に適切な修正パッチを投げま しょう.

7.3 どうなっているのか

lintian と linda が内部構成としてどうなっているのか解説します.

7.3.1 lintian の構成

lintian は perl script です. Debian Package を一時ディレクトリに展開して, それに対して grep などを活用し, 構成を分析します. 正規表現でそれっぽい間違いを発見したら, 報告し ます.

/usr/share/lintian/checks/以下に説明文と perl のスクリプトが大量に入っています. これらが順番に 実 行 さ れ ま す .

追加するためには, そのディレクトリにある.desc ファイルを編集して, perl のスクリプトを作成すれば よいようです.

lintian は実行時にまずパッケージを lintian lab と呼ぶ場所に展開してくれるので, その展開されたファ イルを解析すれば良いです.

7.3.2 linda の構成

linda は lintian を python をつかって再実装したものです.

/usr/share/linda/checks/ 以下に python のスクリプトが大量に入っています. /usr/share/linda/data/以 下にチェックのメッセージの対応表があります. 各メッセージは短いのですが, それぞれの文章は gettext 経由で取得するように実装されているようです.

msgid "versioned-provides_l"
msgstr ""
"The package shown above is trying to do versioned provides, but they aren’t "
"supported by dpkg, and therefore, should not be used."

msgid "versioned-provides_s"
msgstr "Package contains a versioned Provides with package %s."

参考として, lintian, linda 各パッケージのアップロードの履歴の状況を調べてみました. lintian が活発 でなかった 2002,2003 年の時期に linda が活発に開発されていたような雰囲気がうかがえなくもない です.

 zgrep ’^ -- ’ /usr/share/doc/lintian/changelog.Debian.gz | cut -d, -f2 | awk ’{print $3}’ | uniq -c
      2 2005
     10 2004
      6 2003
     14 2002
     18 2001
     13 2000
     12 1999
     44 1998


 zgrep ’^ -- ’ /usr/share/doc/linda/changelog.gz | cut -d, -f2 | awk ’{print $3}’ | uniq -c
      2 2005
      9 2004
     20 2003
     36 2002

7.4 どう応用するか

devscripts に入っている debuild コマンドでパッケージをビルドすると, lintian を自動的に実行してくれ ます*9 . debuild コマンドを活用しましょう.

lintian linda で確認できる問題もありますが, 他にも問題は発生します. パッケージの問題は他に何が あるか, 確認してみます. 段階がいくつかありますが, 簡単に考えてみても, それぞれ別の段階で下記の ような不具合が発生するでしょう.

この問題については lintian と linda の確認はほぼ無力です.

実際は pbuilder などの他のツールを併用します. debdiff で前のバージョンとの差を確認したり, debit コ マンド*10 を 利用して, 自動テストツールで動作を確認したりします.

あとは, Debian のユーザがパッケージをインストールして, 利用してくれて, 問題を発見して BTS で 報告してくれるのを待つばかりです.

東 京 エ リ ア Debian 勉強会 2005 夏_________________________________________________________

PIC