パッケージ作成後に確認すること

  1. SPEC ファイルのエンコーディング等を確認する。

    $ rpm -qpi hoge.rpm
    で文字化けしないかどうか、また、バージョンなど、記述した内容にミスが無いか確認する。

    $ LANG=C rpm -qpi hoge.rpm
    として英語による出力も確認する。

  2. Changelog の記述を確認する。

    $ rpm -qp --changelog hoge.rpm | head
    などで、追記した部分を確認する。

  3. 依存関係(Requires)を確認する。

    $ rpm -qpR hoge.rpm

    パッケージがシェルスクリプトのファイルなどを含んでいる場合、その中で利用されるコマンド(もしくはパッケージ)が Requires: で指定されているかを確かめる必要もあります。これは、実際にシェルスクリプトを実行するなどして確かめる必要があります。

    RPMパッケージをbuildするときには、 そのパッケージに含まれるバイナリの実行に必要なライブラリ名も、 自動的にRequiresに加えられます(正確には必要なライブラリのsonameが加えられます)。 rpmパッケージをinstallするときに、必要なライブラリがシステム上にないと、 libhoge.so is neededとかいって、おこられますが、 libhoge.soがなんというパッケージに入ってるかわからずに困ることがよくあるので、 必要なパッケージ名をきちんとRequiresに書くように心がけましょう。

    筆者はbuildした時に出力されるメッセージの

    Requires: /bin/sh libICE.so.6 libORBit-2.so.0
    といった部分を、(bash の for文 を利用して)slocaterpm -qf で処理してパッケージ名を調べています。
    $ for i in libICE.so.6 libORBit-2.so.0 ;
    do slocate $i |xargs rpm -qf ;
    done | sort -u

  4. build 時の依存関係(BuildRequires)を確認する。

    できあがった src.rpm を、BuildRequires で指定していない devel などのパッケージをアンインストールした状態で rebuild してみる。

    *-devel というパッケージをアンインストールするのに、筆者は(bash で)次のようなコマンド(for文)を利用しています。sed や awk で処理してる部分はもう少し上手なやり方があるかもしれません。

    例 II.7-1*-develパッケージをアンインストールするシェルスクリプト
    for i in `rpm -qa --last | grep devel | sed s/devel-/"devel "/ | awk '{print $1}'` ;
    do
    	echo $i ;
    	rpm -q $i && rpm -e $i ;
    	rpm -q $i && apt-get remove $i ;
    done

ローカルに apt のリポジトリを作成しておくと、apt-get install や apt-get build-dep で、依存関係のチェック等が行えて便利です。