next up previous contents index
次へ: RHLで用いられてるGroup一覧 上へ: Making RPM (rpm-3.0.x対応版) 戻る: サブパッケージの作成について   目次   索引


rpmパッケージをつくるときの注意

  1. 重要: シンボリック・リンク等を%postとかで張らない. 間違えてもそれ(%postではったリンクなど)を %preun%postunで削除してはいけない.
    シンボリック・リンクを含む全てのファイルを%installまでで インストールして,%filesに加えるべきである.(詳しくは後述)
  2. あまり細かくサブパッケージに分けない.
    サブパッケージの作り方を覚えると,やたら沢山のサブパッケージをつくる 人がいるが,アップグレード時のメンテ(rpm -Uやspecの書き直し )が面倒になるばかりか,どれがなんだか分からなくなったりする. 分割は必要最小限に.
  3. %config は乱用しない.
    %configを多くすると, %filesが非常にわかりづらくなることがあり,version up等の時に この部分のメンテに労力がかかるようになりよくない. デフォルトのままで出来るだけ多くの人が利用できるようなconfigファイ ルを用意し,ユーザの%configの設定は必要最小限ですむように心掛 けると,多くの人が利用しやすいものができ,多くの場合に%file の記述もすっきりする.
  4. patchを使いすぎない
    configファイルの設定やMakefileなどを変えたりするために頑張って patchをいろいろつくるよりも,別にファイルを用意してSourceに加 えておき,%installあたりで
    ``cp ${RPM_SOURCE_DIR}/hoge.conf .`` とかしてしまったほうが,すっきりすることが多い.srpmをばらしても,そ のファイルがすぐ出てきてわかりやすく,アップデートのためにspec修正す るときも楽だったりする.
  5. specファイルはわかりやすく.第三者にもわかるようコメントを入れて.
    specファイルはソースのアップデートに対応して修正をしたり,第三者が見 て必要に応じて書き直したりすることがある. 凝っていろいろな設定をしたりする複雑なものを書くより, ポータビリティ を重視して簡潔に書いた方が後のメンテのためには吉.また,違った環境で buildができなくなるようなことが無いよう,specファイル中のスクリプト で,特殊なコマンドを呼ぶようなことは避け,一般的なコマンド使用にとど めるべき.

注意1は特に重要です. よく,%post で,シンボリック・リンクをはって, %preun でそのリンクを削除するようなspecファイルがあります. これを行うと,アップデート時に問題が生じることがあります.以前, libcの パッケージでこういう記述が入ってるものがあって,深刻な問題が生じたこ ともありました.

その理由は,rpm -U <new-rpm>は,

    rpm -e <old-rpm>
    rpm -i <new-rpm>
ではなく,
    rpm -i <new-rpm>
    rpm -e <old-rpm>
とはたらくためです.

つまり,%post で,シンボリック・リンクをはって,%preun でそれを削除するような rpm のバージョンアップをしようと, rpm -U (アップデート)を実行すると

  1. 新しいパッケージのインストールが行なわれ, %postでシンボリック・リンクがつくられる.
  2. 古いパッケージのアンインストールが行なわれる. このとき,%preunでさっき新しいパッケージが作ったシンボリック・ リンクが削除される.
この仕様は,libcとかのアップグレードの途中でlibcとかがなくなって トラブルが生じるのを避けようとしたためのものと思われます.

実はこの問題は解決法があります. %pre, %post, %preun, %postunのスクリプト実行 時には,スクリプトに対して以下の引数が与えられます.

すなわち,はじめてインストールするときには,引数として1がわたされ, rpm -eでアンインストールするときには0がわたされるわけです. これを利用すると,
%post
if [ $1 = 1]; then
    echo ``First installation!''
fi
%preun
if [ $1 = 0]; then
    echo ``Good bye!''
fi
とかできるわけです. (それでも%postなどでシンボリック・リンクをはったりすると, 出どころ不明のファイルが増えることになります.その他トラブルをさけるため, できるだけファイルは%filesに加えるようにし,%postなどに書 くスクリプトはできるだけ少なくしましょう)



平成13年2月20日