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