%postとかで張らない.
間違えてもそれ(%postではったリンクなど)を
%preunや%postunで削除してはいけない.
シンボリック・リンクを含む全てのファイルを%installまでで インストールして,%filesに加えるべきである.(詳しくは後述)
サブパッケージの作り方を覚えると,やたら沢山のサブパッケージをつくる
人がいるが,アップグレード時のメンテ(rpm -Uやspecの書き直し
)が面倒になるばかりか,どれがなんだか分からなくなったりする.
分割は必要最小限に.
%config は乱用しない.
%configを多くすると,%filesが非常にわかりづらくなることがあり,version up等の時に この部分のメンテに労力がかかるようになりよくない. デフォルトのままで出来るだけ多くの人が利用できるようなconfigファイ ルを用意し,ユーザの%configの設定は必要最小限ですむように心掛 けると,多くの人が利用しやすいものができ,多くの場合に%fileの記述もすっきりする.
configファイルの設定やMakefileなどを変えたりするために頑張って patchをいろいろつくるよりも,別にファイルを用意してSourceに加 えておき,%installあたりで
``cp ${RPM_SOURCE_DIR}/hoge.conf .`` とかしてしまったほうが,すっきりすることが多い.srpmをばらしても,そ のファイルがすぐ出てきてわかりやすく,アップデートのために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 (アップデート)を実行すると
%postでシンボリック・リンクがつくられる.
%preunでさっき新しいパッケージが作ったシンボリック・
リンクが削除される.
実はこの問題は解決法があります.
%pre, %post, %preun, %postunのスクリプト実行
時には,スクリプトに対して以下の引数が与えられます.
rpm -iでインストールを行うとき
%pre,%postに対して$1=1
rpm -Uでアップデートを行うとき
%pre, %postに対して$1=2
%preun, %postunに対して$1=1
rpm -eでアンインストールを行うとき
%preun,%postunに対して$1=0
rpm -eでアンインストールするときには0がわたされるわけです.
これを利用すると,
%post
if [ $1 = 1]; then
echo ``First installation!''
fi
%preun
if [ $1 = 0]; then
echo ``Good bye!''
fi
とかできるわけです.
(それでも%postなどでシンボリック・リンクをはったりすると,
出どころ不明のファイルが増えることになります.その他トラブルをさけるため,
できるだけファイルは%filesに加えるようにし,%postなどに書
くスクリプトはできるだけ少なくしましょう)