試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Ubuntu向けパッケージ作成上のメモ(milkjfフォントのUbuntu向けパッケージに関するメモ)

Ubuntu向けにパッケージを作成した際のメモの内、「milkjfフォントとut(内海氏)版AnthyのUbuntu向けパッケージを作成(2010/11/20現在)」で公開したmilkjfフォントのパッケージを作成した際のメモをここで扱う。

ビルド時依存のパッケージについて

milkjfフォントのパッケージを作成していた段階で、「ローカル上で.debパッケージを作ると正しくフォントが配置されて認識もされ、正しく動作するのだが、ソースパッケージのファイル群をアップロード*1すると、出来上がったパッケージではフォントが認識されない」という現象が起きた。
しばらく悩んだが、サーバ上のビルドログを見ると

/bin/sh: bdftopcf: not found

という行があるのを見つけ、更に、出来上がったバイナリパッケージのサイズが極端に小さく、BDF形式からのPCF形式への変換自体がまともに行われていなかったことが分かった。これはbdftopcfコマンドがビルドを行うサーバの環境にインストールされていなかったのが原因で、debian/controlファイルに

Build-Depends-Indep: xfonts-utils

を記述して、ビルド時の依存パッケージを(漏らさずに)指定することで解決した。本来は変換処理に失敗した場合にはビルド失敗として扱うようにしたほうが好ましいのかもしれないが、今回の場合はbdftopcfコマンドがあれば基本的に失敗することはないためにこのようにした。
ビルド時の依存パッケージはdebian/controlの「Source:」で始まるまとまり(最初の空行より上)の「Build-Depends」と「Build-Depends-Indep」のいずれかで指定*2することになっており、前者は使用ライブラリの開発パッケージなど,後者がビルド段階における「変換」処理の結果がアーキテクチャ非依存の場合に付けるものとなるが、「debhelper」パッケージなどは例外となっている?
(2010/12/17)パッケージがアーキテクチャ非依存指定(Architecture: all)の場合はBuild-DependsかBuild-Depends-Indepのいずれかに「debhelper」がないときに,アーキテクチャ依存指定(Architecture: any)の場合はBuild-Dependsに*3「debhelper」がないときにlintian*4のエラー「package-uses-debhelper-but-lacks-build-depends」と警告「package-lacks-versioned-build-depends-on-debhelper 7」が出る。XのPCFフォントのような変換結果がアーキテクチャ非依存となるパッケージで(Build-Depends-Indepではなく)Build-Dependsに「xfonts-utils」を入れてもlintianはメッセージを出さないが、記述としてはBuild-Depends-Indepに入れるべきなものとなる。

Xのビットマップフォントの登録に関する処理

milkjfフォントはX Window Systemで利用可能なBDF形式のビットマップフォントだが、PCF形式に変換したものをフォントのディレクトリに配置した後でmkfontdirというツールでfonts.dirというファイルを更新しないと(フォントの探索パスが配置場所に合っていても)認識されない。
XのビットマップフォントのDebianパッケージを作成すると、このファイルを更新するための処理をパッケージ作成者が直接記述しなくても、パッケージをインストールした環境では(fonts.dirの更新の処理が)自動的にインストール直後に行われ、その後パッケージを削除した場合にも更新が行われる。
ただし、厳密には完全に自動というわけではなく、パッケージビルドの流れの中でdh_installxfontsというコマンドがpostinst(インストール直後),postrm(削除直後)の各スクリプトを書き出しており、それはパッケージ作成処理の要であるdhコマンド(ここでは詳しくは扱わない)の実行の流れの中の1つという形となっている。

PPAにアップロードしたパッケージのlintianの警告やエラーに対する方針と他の方による再利用について

PPAリポジトリで作成・公開しているパッケージには本記事の途中で触れたlintianが幾つかの警告メッセージを出しており、Debianのポリシーに厳密に準拠するためには色々と修正が必要となるが、動くパッケージを作成することのほうを優先しており、エラーとなるものは極力修正するようにはしているが、警告メッセージが完全に出ないようにする予定はない。パッケージ作成の部分(パッケージ情報やビルド手順の記述など)に関しては権利を主張するつもりはないので、例えばDebianもしくはUbuntu向けに成果物のいずれかを引き継いで公式なパッケージとして追加・メンテをしたい、というような方がいれば、「そのあたりの対応作業を含めて全てをお任せする」ということになる。
また、PPAリポジトリにアップロードしたパッケージをもとに誰かが改変をし、それをUbuntuのPPAリポジトリにアップロードしたりすることについても歓迎(その際、メンテナ情報は改変/アップロードをした方の情報に変更のこと)。

関連記事:

*1:PPAではソースパッケージ(バイナリパッケージのアップロードは不可)をアップロードするとサーバ上でビルド処理が行われ、バイナリパッケージ(と元のソースパッケージ)が公開される

*2:複数ある場合はコンマで区切る,バージョンでの指定も可

*3:Build-Depends-Indepの記述は「build-depends-indep-without-arch-indep」が出るので不可

*4:debuildでパッケージを作成した際に自動的に実行されるパッケージ検証ツール