Changes between Initial Version and Version 1 of docs/making-rpm/other-section


Ignore:
Timestamp:
2013/02/09 03:29:53 (14 years ago)
Author:
yasumichi
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • docs/making-rpm/other-section

    v1 v1  
     1[wiki:docs Vine Linux ドキュメント] / [wiki:../ RPM パッケージの作成方法] / スクリプト部で使用できるその他のセクション 
     2 
     3[[PageOutline]] 
     4 
     5= スクリプト部で使用できるその他のセクション = 
     6 
     7スクリプト部に入れることができるセクションは、[wiki:../make-spec#スクリプト部 スクリプト部]で説明したほかにもいろいろあります。 
     8 
     9インストール時やアンインストール時に起動するセクションとして下の表のようなセクションがあります。 
     10 
     11||=  セクション名  =||=  概要  =|| 
     12||[#pre %pre]           ||RPM パッケージをインストールするときパッケージの展開前に行うことを書く|| 
     13||[#post %post]         ||RPM パッケージをインストールするときパッケージの展開後に行うことを書く|| 
     14||[#preun %preun]       ||RPM パッケージをアンインストールするとき展開ファイルの削除前に行うことを書く|| 
     15||[#postun %postun]     ||RPM パッケージをアンインストールするとき各ファイルを削除した後に行うことを書く|| 
     16 
     17さらに、他のパッケージがインストールされた時に起動するスクリプトも記述できます。 
     18 
     19||=  セクション名  =||=  概要  =|| 
     20||[#triggerin %triggerin]       ||あるパッケージがインストールされていた、もしくは、された時に起動するスクリプト|| 
     21||%triggerun                    ||あるパッケージの削除前に起動するスクリプト|| 
     22||%triggerpostun                ||あるパッケージの削除後に起動するスクリプト|| 
     23 
     24パッケージが正しくインストールされているかを検証するには、rpm コマンドで -V オプションを用いますが、-V オプションでできることを増やすためのセクションもあります。 
     25 
     26||=  セクション名  =||=  概要  =|| 
     27||[#verifyscript %verifyscript]||RPM パッケージを検証するとき(rpm -V を実行した時)に追加して起動するスクリプト|| 
     28 
     29この章で説明するセクションは、SPEC ファイルから RPM パッケージを作るときには、実行されることはありません。 
     30 
     31%pre, %post, %preun, %postun, %triggerin, %triggerun, %triggerpostun, といったセクションを使うのは、ちょっと注意が必要です。, 詳しくは、[../symlink シンボリック・リンク等を%postとかで張らない]を参照してください。 
     32 
     33== インストール時やアンインストール時に起動するセクション == 
     34 
     35=== %pre セクション === #pre 
     36 
     37RPM パッケージをインストールするとき、パッケージの展開前に行うことを書く。 -pオプションについては%postの場合(以下)参照。 
     38 
     39ここでの処理で必要となるパッケージ等は、Requires(pre): で指定します。 
     40 
     41=== %post セクション === #post 
     42 
     43RPM パッケージをインストールするとき、パッケージの展開後に行うことを書く。 
     44 
     45ここでの処理で必要となるパッケージ等は、Requires(post): で指定します。 
     46 
     47==== %post セクションを利用して info ファイルをインストールする例 ==== 
     48 
     49{{{ 
     50#!sh 
     51%post 
     52if [ "$1" = 0 ] ; then 
     53%{_syssbindir}/install-info %{_infodir}/hoge.info.gz %{_infodir}/dir 
     54fi 
     55}}} 
     56として、info のメニューエントリに infoファイルを追加します。 if [ $1 = 0 ]; then と fi の行は、 アップグレード時には実行せず、インストール時だけに実行させるための記述です。[../symlink シンボリック・リンク等を%postとかで張らない]も参照してください。 
     57 
     58%{_syssbindir}/install-info というコマンドが必要になるので、 Requires(post): %{_syssbindir}/install-info とします。 
     59 
     60info ファイルは、アンインストール時にも処理が必要になります。[../symlink シンボリック・リンク等を%postとかで張らない]も参照してください。 
     61 
     62==== ライブラリをインストールする後に ldconfig を実行する例 ==== 
     63 
     64{{{ 
     65#!sh 
     66%post 
     67%{_syssbindir}/ldconfig 
     68}}} 
     69とすると、ldconfigが実行される。また、代わりに 
     70{{{ 
     71#!sh 
     72%post -p %{_syssbindir}/ldconfig 
     73}}} 
     74と、-pオプションを用いて書くと、 シェルを起動すること無く直接コマンドが実行される。 またこのコマンドはrpmパッケージのインストール時に必要なコマンドとして、 Requires(interp): %{_syssbindir}/install-info として登録される。 
     75 
     76正確にいうと、タグに -pオプションをつけた場合は、 /bin/sh ではなく別のプログラムでスクリプト部分を解釈(interpret)させるということになります。 この場合には Requires(interp) として登録されます。(%postなので Requires(post) としても登録されます。) 
     77 
     78==== %post セクションで -p オプションを使用して問題が起こる例 ==== 
     79 
     80{{{ 
     81#!sh 
     82%post -p %{_syssbindir}/ldconfig 
     83# update ld.so.cache 
     84 
     85%files 
     86}}} 
     87 
     88この場合は %post と %files の間の2行が、スクリプト部分になります。 一行目に 
     89 
     90{{{ 
     91#!sh 
     92# update ld.so.cache 
     93}}} 
     94 
     95と書いてあります。 bash であれば、# で始まる行は コメントと解釈され無視されますが、 このスクリプト部分を読み、実行するのは /bin/sh ではなく %{_syssbindir}/ldconfig です。 ldconfig には # 以降をコメントとして無視するというルールは無いので、 そのまま実行しようとしてエラーになります。 
     96 
     97エラーを起こさないようにするには 
     98{{{ 
     99#!sh 
     100%post -p %{_syssbindir}/ldconfig 
     101 
     102 
     103%files 
     104}}} 
     105とするか、 
     106{{{ 
     107#!sh 
     108%post 
     109%{_syssbindir}/ldconfig 
     110# update ld.so.cache 
     111 
     112%files 
     113}}} 
     114とします。 
     115 
     116一つ目の例では、%{_syssbindir}/ldconfig がスクリプト部分を実行するために起動し(、起動した時点で ld.so.cache が更新されますが)、スクリプト部分については何も書かれていないので何もせずに終了します。 
     117 
     118二つ目の例では、/bin/sh が起動し、スクリプト部分を解釈し %{_syssbindir}/ldconfig を実行、# 以下はコメントなので無視します。 
     119 
     120=== %preun セクション === #preun 
     121 
     122RPM パッケージをアンインストールするとき、展開ファイルの削除前に行うことを書く。 
     123 
     124ここでの処理で必要となるパッケージ等は、Requires(preun): で指定します。 
     125 
     126-pオプションについては%postの場合と同様です。Requires(interp): と Requires(preun): に登録されます。 
     127 
     128==== %preun セクションを利用して info ファイルをアンインストールする例 ==== 
     129 
     130{{{ 
     131#!sh 
     132%preun 
     133if [ $1 = 0 ]; then 
     134%{_syssbindir}/install-info --delete %{_infodir}/hoge.info.gz %{_infodir}/dir 
     135fi 
     136}}} 
     137として、info のメニューエントリから削除します。 if [ $1 = 0 ]; then と fi の行は、 アップグレード時には実行せず、アンインストール時だけに実行させるための記述です。[../symlink シンボリック・リンク等を%postとかで張らない]も参照してください。 
     138 
     139=== %postun セクション === #postun 
     140 
     141RPM パッケージをアンインストールするとき、各ファイルを削除した後に行うことを書く。 
     142 
     143ここでの処理で必要となるパッケージ等は、Requires(postun): で指定します。 
     144 
     145-pオプションについては%postの場合と同様です。Requires(interp): と Requires(postun): に登録されます。 
     146 
     147== 他のパッケージがインストールされた時に起動するセクション == 
     148 
     149=== %triggerin セクション === #triggerin 
     150 
     151あるパッケージがインストールされていた、もしくは、された時に起動するスクリプトを書く。 
     152 
     153{{{ 
     154#!sh 
     155%triggerin -- hoge 
     156echo "hoge is installed" 
     157}}} 
     158と書いておくと、パッケージhogeをインストールしたときに、 上記メッセージが表示されます。以下のように、バージョン指定もできます。 
     159 
     160{{{ 
     161#!sh 
     162%triggerin -- hoge > 3.0 
     163echo "hoge is installed" 
     164}}} 
     165 
     166同様にして、あるパッケージの削除前に実行される %triggerun、あるパッケージの削除後に実行される %triggerpostun があります。このセクションについては、 /usr/share/doc/rpm-<version>/triggers に詳しい説明があります。 
     167 
     168== パッケージの検証時に起動するセクション == 
     169 
     170=== %verifyscript セクション === #verifyscript  
     171 
     172RPM パッケージを検証するとき(rpm -Vを実行した時)に、追加して実行することを書く。 
     173 
     174ここでの処理で必要となるパッケージ等は、Requires(verify): で指定します。 
     175 
     176-p オプションについては [#post %post] の場合と同様です。Requires(interp): と Requires(verify): に登録されます。 
     177 
     178このスクリプトの実行結果は、成功した場合には何も表示されず、エラーが発生したときにエラーメッセージのみが標準出力に出力されます。rpm -Vvv などのようにした場合には、標準出力への出力も確認できます。 
     179 
     180たとえば、[#pre %pre] で %{_sbindir}/useradd hoge などとしてユーザーを登録した場合には、 
     181{{{ 
     182#!sh 
     183%verifyscript 
     184%{_bindir}/id hoge 
     185}}} 
     186としておくと、hoge というユーザーが存在しているかどうかを確認することができます。 
     187 
     188この場合、/usr/bin/id というコマンドは coreutils というパッケージに含まれているので、 Requires(verify): %{_bindir}/id あるいは、Requires(verify): coreutils とします。