IPS パッケージを使用すると、別のパッケージによりすでに配布されているファイルのカスタマイズバージョンを提供できます。デフォルトでは、特定の場所にファイルを配布できるのは 1 つの IPS パッケージだけです。IPS パッケージを使用して、別の IPS パッケージにより配布されるファイルのカスタムバージョンを配布するには、file アクションで次の属性が設定されていることを確認します。
置換対象ファイルで overlay=allow および preserve=true 属性が設定されています。
置換ファイルで overlay=true 属性と preserve 属性 (任意の値) が設定されています。
ファイルアクションの overlay および preserve 属性の説明を参照してください。
overlay=allow 属性が設定されているバージョンは、overlay=true 属性が設定されているファイルのバージョンに置き換えられ、overlay=allow 属性が設定されているファイルのバージョンは /var/pkg/lost+found/ に保存されます。
たとえば、次の file アクションを含む isvapp というパッケージをインストールするとします。
file opt/isvapp/isvconf path=opt/isvapp/isvconf owner=root group=bin mode=0644 \ overlay=allow preserve=true
このパッケージは次のファイルをインストールします。
-rw-r--r-- 1 root bin 11358 Apr 17 18:44 /opt/isvapp/isvconf
このファイルのサイト固有のバージョンをすべてのシステムに配置するとします。このファイルの新しいバージョンを配布するには、次の file アクションを含む isvconf という名前のパッケージを作成します。
file opt/isvapp/isvconf path=opt/isvapp/isvconf owner=root group=bin mode=0644 \ overlay=true preserve=renameold
isvconf がインストールされると、次のファイルがシステムに配置されます。
$ ls -l /opt/isvapp/isvconf -rw-r--r-- 1 root bin 72157 Apr 17 18:47 /opt/isvapp/isvconf $ ls -l /var/pkg/lost+found/opt/isvapp total 24 -rw-r--r-- 1 root bin 11358 Apr 17 18:44 isvconf-20140417T184756Z
同じパスのファイルを配布する別のパッケージ (この例では isvconf2) をインストールしようとすると、次の例外でインストールが失敗します。
Creating Plan (Checking for conflicting actions): - pkg install: The following packages all deliver file actions to opt/isvapp/isvconf: pkg://site/isvconf2@1.0,5.11:20140417T190405Z pkg://site/isvapp@1.0,5.11:20140417T182316Z pkg://site/isvconf@1.0,5.11:20140417T185420Z These packages may not be installed together. Any non-conflicting set may be, or the packages must be corrected before they can be installed.
最初の置換ファイルを配布したパッケージの更新で、ファイルの新しいバージョンを配布できます。isvconf@2.0 がインストールされると、次のファイルがシステムに配置されます。
$ ls -l /opt/isvapp/isvconf* -rw-r--r-- 1 root bin 64064 Apr 17 18:52 /opt/isvapp/isvconf -rw-r--r-- 1 root bin 54365 Apr 17 18:47 /opt/isvapp/isvconf.old $ ls -l /var/pkg/lost+found/opt/isvapp total 24 -rw-r--r-- 1 root bin 11358 Apr 17 18:44 isvconf-20140417T184756Z
次の 2 つの条件の両方に該当するため、既存のファイルは isvconf.old に保存されました。
isvconf パッケージに preserve=renameold が指定されています。
このファイルは、isvconf@1.0 のインストール後、isvconf@2.0 のインストール前に編集されています。
lost+found 領域は変更されておらず、isvapp により配布された元のファイルが引き続きこの領域に含まれています。