スクリプト部で使用できるその他のセクション
スクリプト部に入れることができるセクションは、セクション II.5.2 - スクリプト部で説明したほかにもいろいろあります。
セクション名 | 概要 | 詳細説明 |
---|---|---|
%pre | RPMパッケージをインストールするときパッケージの展開前に行うことを書く | セクション III.11.1 - %preセクション |
%post | RPMパッケージをインストールするときパッケージの展開後に行うことを書く | セクション III.11.2 - %postセクション |
%preun | RPMパッケージをアンインストールするとき展開ファイルの削除前に行うことを書く | セクション III.11.3 - %preunセクション |
%postun | RPMパッケージをアンインストールするとき各ファイルを削除した後に行うことを書く | セクション III.11.4 - %postunセクション |
さらに、他のパッケージがインストールされた時に起動するスクリプトも記述できます。
セクション名 | 概要 | 詳細説明 |
---|---|---|
%triggerin | あるパッケージがインストールされていた、もしくは、された時に起動するスクリプト | セクション III.11.5 - %triggerinセクション |
%triggerun | あるパッケージの削除前に起動するスクリプト | セクション III.11.5 - %triggerinセクション参照 |
%triggerpostun | あるパッケージの削除後に起動するスクリプト | セクション III.11.5 - %triggerinセクション参照 |
パッケージが正しくインストールされているかを検証するには、rpm コマンドで -V オプションを用いますが、-V オプションでできることを増やすためのセクションもあります。
セクション名 | 概要 | 詳細説明 |
---|---|---|
%verifyscript | RPMパッケージを検証するとき(rpm -Vを実行した時)に追加して起動するスクリプト | セクション III.11.6 - %verifyscriptセクション |
この章で説明するセクションは、SPECファイルからRPMパッケージを作るときには、実行されることはありません。
%pre %post %preun %postun %triggerin %triggerun %triggerpostun といったセクションを使うのは、ちょっと注意が必要です。 詳しくは、付録 A - RPMパッケージをつくるときの注意を参照してください。
- III.11.1. %preセクション
- III.11.2. %postセクション
- III.11.3. %preunセクション
- III.11.4. %postunセクション
- III.11.5. %triggerinセクション
- III.11.6. %verifyscriptセクション
III.11.1. %preセクション
RPMパッケージをインストールするとき、パッケージの展開前に行うことを書く。 -pオプションについては%postの場合(以下)参照。
ここでの処理で必要となるパッケージ等は、Requires(pre): で指定します。
III.11.2. %postセクション
RPMパッケージをインストールするとき、パッケージの展開後に行うことを書く。
ここでの処理で必要となるパッケージ等は、Requires(post): で指定します。
%post if [ "$1" = 0 ] ; then %{_syssbindir}/install-info %{_infodir}/hoge.info.gz %{_infodir}/dir fi
%{_syssbindir}/install-info というコマンドが必要になるので、 Requires(post): %{_syssbindir}/install-info とします。
info ファイルは、アンインストール時にも処理が必要になります。 セクション III.11.3 - %preunセクション も参照してください。
%post %{_syssbindir}/ldconfig
%post -p %{_syssbindir}/ldconfig
正確にいうと、タグに -pオプションをつけた場合は、 /bin/sh ではなく別のプログラムでスクリプト部分を解釈(interpret)させるということになります。 この場合には Requires(interp) として登録されます。(%postなので Requires(post) としても登録されます。)
%post -p %{_syssbindir}/ldconfig # update ld.so.cache %files
# update ld.so.cache
エラーを起こさないようにするには
%post -p %{_syssbindir}/ldconfig %files
%post %{_syssbindir}/ldconfig # update ld.so.cache %files
一つ目の例では、%{_syssbindir}/ldconfig がスクリプト部分を実行するために起動し(、起動した時点で ld.so.cache が更新されますが)、スクリプト部分については何も書かれていないので何もせずに終了します。
二つ目の例では、/bin/sh が起動し、スクリプト部分を解釈し %{_syssbindir}/ldconfig を実行、# 以下はコメントなので無視します。
III.11.3. %preunセクション
RPMパッケージをアンインストールするとき、展開ファイルの削除前に行うことを書く。
ここでの処理で必要となるパッケージ等は、Requires(preun): で指定します。
-pオプションについては%postの場合と同様です。Requires(interp): と Requires(preun): に登録されます。
%preun if [ $1 = 0 ]; then %{_syssbindir}/install-info --delete %{_infodir}/hoge.info.gz %{_infodir}/dir fi
III.11.4. %postunセクション
RPMパッケージをアンインストールするとき、各ファイルを削除した後に行うことを書く。
ここでの処理で必要となるパッケージ等は、Requires(postun): で指定します。
-pオプションについては%postの場合と同様です。Requires(interp): と Requires(postun): に登録されます。
III.11.5. %triggerinセクション
あるパッケージがインストールされていた、もしくは、された時に起動するスクリプトを書く。
%triggerin -- hoge echo "hoge is installed"
%triggerin -- hoge > 3.0 echo "hoge is installed"
同様にして、あるパッケージの削除前に実行される%triggerun、 あるパッケージの削除後に実行される%triggerpostunがあります。このセクションについては、 /usr/share/doc/rpm-<version>/triggers に詳しい説明があります。
III.11.6. %verifyscriptセクション
RPMパッケージを検証するとき(rpm -Vを実行した時)に、追加して実行することを書く。
ここでの処理で必要となるパッケージ等は、Requires(verify): で指定します。
-pオプションについては%postの場合と同様です。Requires(interp): と Requires(verify): に登録されます。
このスクリプトの実行結果は、成功した場合には何も表示されず、エラーが発生したときにエラーメッセージのみが標準出力に出力されます。rpm -Vvv などのようにした場合には、標準出力への出力も確認できます。
たとえば、%pre で %{_sbindir}/useradd hoge などとしてユーザーを登録した場合には、
%verifyscript %{_bindir}/id hoge
この場合、/usr/bin/id というコマンドは coreutils というパッケージに含まれているので、 Requires(verify): %{_bindir}/id あるいは、Requires(verify): coreutils とします。