meaning of $1 in RPM SPEC file
http://www.vinelinux.org/manuals/making-rpm-9.html
にあった内容を念の為確認。結果は正しい。
http://www.momonga-linux.org/~tamo/RPM-Tips_all.html とかには、
よく %post 等では $1 で条件を付けていますが、あの秘密を伝授しましょう。最初のインストールでは 1, アップグレイドでは 2, アンインストール時には 0 です。実は、それだけです。アップグレイドの時は実行せず、最初のインストールの時だけ実行したいときには %post (または %pre) で $1 が 1 かどうかを確かめれば良いというわけです。
みたいに書いてあるが、アップグレードの時の記述は厳密ではない、という理解。
- 確認したバージョン
[root@dl140 NOTRUN x86_64]# rpm --version RPM バージョン 4.4.2 [root@dl140 NOTRUN x86_64]#
%define dbgf /tmp/debug <省略> %pre echo "pre: $1: `date`" >> %{dbgf} %post echo "post: $1: `date`" >> %{dbgf} %preun echo "preun: $1: `date`" >> %{dbgf} %postun echo "postun: $1: `date`" >> %{dbgf}
result
- "-ivh"
pre: 1: 2009年 5月 25日 月曜日 19:07:43 JST post: 1: 2009年 5月 25日 月曜日 19:07:45 JST
- "-e"
preun: 0: 2009年 5月 25日 月曜日 19:07:50 JST postun: 0: 2009年 5月 25日 月曜日 19:07:50 JST
- "-i"
pre: 1: 2009年 5月 25日 月曜日 19:07:56 JST post: 1: 2009年 5月 25日 月曜日 19:07:58 JST
- "-U"
pre: 2: 2009年 5月 25日 月曜日 19:08:03 JST post: 2: 2009年 5月 25日 月曜日 19:08:06 JST preun: 1: 2009年 5月 25日 月曜日 19:08:06 JST postun: 1: 2009年 5月 25日 月曜日 19:08:06 JST
結論
下記のコードをテンプレートに、対応するイベントのif内に書けば良い
%pre if [ "$1" = 1 ]; then echo "pre: -i" ; fi if [ "$1" = 2 ]; then echo "pre: -U" ; fi %post if [ "$1" = 1 ]; then echo "post: -i" ; fi if [ "$1" = 2 ]; then echo "post: -U" ; fi %preun if [ "$1" = 0 ]; then echo "preun: -e" ; fi if [ "$1" = 1 ]; then echo "preun: -U" ; fi %postun if [ "$1" = 0 ]; then echo "postun: -e" ; fi if [ "$1" = 1 ]; then echo "postun: -U" ; fi