wiki:docs/making-rpm/followup

Version 1 (modified by yasumichi, 11 years ago) (diff)

--

Vine Linux ドキュメント / RPM パッケージの作成方法 / パッケージ作成後に確認すること

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

  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 文を利用して) slocate と rpm -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 してみる。FootNote(Vine Linux 6.0 から、仮想環境を構築し、その中で RPM パッケージの作成を行う [wiki:VineBootstrap vbootstrap] というパッケージを提供しています。このパッケージを利用することにより、実環境のパッケージをアンインストールすることなく !BuildRequires の漏れを検出することができます。)?
    *-devel というパッケージをアンインストールするのに、筆者は(bash で)次のようなコマンド(for 文)を利用しています。sed や awk で処理してる部分はもう少し上手なやり方があるかもしれません。
    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 で、依存関係のチェック等が行えて便利です。

FootNote?