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


Ignore:
Timestamp:
2013/02/09 03:50:08 (11 years ago)
Author:
yasumichi
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • docs/making-rpm/symlink

    v1 v1  
     1[wiki:docs Vine Linux ドキュメント] / [wiki:../ RPM パッケージの作成方法] / シンボリック・リンク等を %post とかで張らない 
     2 
     3= シンボリック・リンク等を %post とかで張らない = 
     4 
     5== 間違えてもそれ(%post ではったリンクなど)を %preun や %postun で削除してはいけない == 
     6 
     7シンボリック・リンクを含む全てのファイルを %install まででインストールして、 %files に加えるべきである。 
     8 
     9これは特に重要です。よく、%post で、シンボリック・リンクをはって、 %preun でそのリンクを削除するような SPEC ファイルがあります。 これを行うと、アップデート時に問題が生じることがあります。以前、 libc のパッケージでこういう記述が入ってるものがあって、深刻な問題が生じたこともありました。 
     10 
     11その理由は、rpm -U <new-rpm> としたときに、 
     12{{{ 
     13#!sh 
     14rpm -e <old-rpm> 
     15rpm -i <new-rpm> 
     16}}} 
     17ではなく、 
     18{{{ 
     19#!sh 
     20rpm -i <new-rpm> 
     21rpm -e <old-rpm> 
     22}}} 
     23とはたらくためです。 
     24 
     25つまり、%post で、シンボリック・リンクをはって、 %preun でそれを削除するような rpm のバージョンアップをしようと、 rpm -U (アップデート)を実行すると 
     26 
     271. 新しいパッケージのインストールが行なわれ、 %post でシンボリック・リンクがつくられる。 
     281. 古いパッケージのアンインストールが行なわれる。 このとき、%preun でさっき新しいパッケージが作ったシンボリック・ リンクが削除される。 
     29 
     30この仕様は、libc とかのアップグレードの途中で libc とかがなくなってトラブルが生じるのを避けようとしたためのものと思われます。 
     31 
     32実はこの問題は解決法があります。 %pre, %post, %preun, %postun のスクリプト実行時には、スクリプトに対して以下の引数が与えられます。 
     33 
     34* rpm -iでインストールを行うとき 
     35  %pre, %postに対して $1=1 
     36* rpm -Uでアップデートを行うとき 
     37  * 新しいrpmのインストール時に、 %pre, %postに対して $1=2 
     38  * 古いrpmをアンインストール時に、 %preun, %postunに対して $1=1 
     39* rpm -eでアンインストールを行うとき 
     40  %preun, %postun に対して $1=0 
     41 
     42すなわち、はじめてインストールするときには、引数として 1 がわたされ、 rpm -e でアンインストールするときには 0 がわたされるわけです。 これを利用すると、 
     43{{{ 
     44#!sh 
     45%post 
     46if [ $1 = 1]; then 
     47        echo ``First installation!'' 
     48fi 
     49%preun 
     50if [ $1 = 0]; then 
     51        echo ``Good bye!'' 
     52fi 
     53}}} 
     54とかできるわけです。(それでも %post などでシンボリック・リンクをはったりすると、出どころ不明のファイルが増えることになります。その他トラブルをさけるため、できるだけファイルは %files に加えるようにし、 %post などに書くスクリプトはできるだけ少なくしましょう)