パッケージ化された内容がすべてそのディレクトリから削除される場合でも、パッケージ解除された内容をその存在する場所に維持するには、ディレクトリを個別にパッケージ化してインストールします。ディレクトリからほかのパッケージ化された内容がすべてアンインストールされた場合でも、そのディレクトリをインストールしたパッケージがインストールされている状態である限り、そのディレクトリはインストールされたままになります。
たとえば次の手順を実行し、dir に内容を配布するほかのインストール済み IPS パッケージがない場合は、dir ディレクトリの内容 (IPS によって配布されていないアプリケーションを含む) が /var/pkg/lost+found に回収されます。
dir に IPS パッケージとして配布されなかったアプリケーションをインストールします。
dir に内容をインストールする IPS パッケージをインストールします。
dir に内容をインストールする IPS パッケージをアンインストールします。
dir にインストールされているパッケージ解除されたソフトウェアを維持するには、dir ディレクトリを専用の IPS パッケージにパッケージ化します。
必要なディレクトリまたはディレクトリ構造を配布する IPS パッケージを作成します。そのパッケージをインストールします。そのパッケージをアンインストールするまでは、そのディレクトリ構造はその場所に維持されます。そのディレクトリに内容を配布するほかのパッケージをアンインストールしても、そのディレクトリは削除されません。
IPS によりすでに配布されているディレクトリを配布するパッケージは作成しないでください。異なる所有権、アクセス権、またはほかの属性が設定されているディレクトリが更新によってインストールされる場合、その更新は正常に完了しない可能性があります。次の手順の pkgmogrify ステップを参照してください。
この例は /usr/local を示します。/usr/local/bin または IPS パッケージで配布されない異なるディレクトリ構造を含めるように、容易に拡張できます。
$ mkdir -p usrlocal/usr/local
$ pkgsend generate usrlocal | pkgfmt > usrlocal.p5m.1 $ cat usrlocal.p5m.1 dir path=usr owner=root group=bin mode=0755 dir path=usr/local owner=root group=bin mode=0755
配布する /usr はすでに Oracle Solaris により配布されているので除外し、またメタデータを追加するため、pkgmogrify 入力ファイルを作成します。ディレクトリの所有権またはアクセス権をデフォルトから変更するために変換を追加することもできます。
$ cat usrlocal.mog set name=pkg.fmri value=pkg://site/usrlocal@1.0 set name=pkg.summary value="Create the /usr/local directory." set name=pkg.description value="This package installs the /usr/local \ directory so that /usr/local remains available for unpackaged files." set name=variant.arch value=$(ARCH) <transform dir path=usr$->drop>
$ pkgmogrify -DARCH=`uname -p` usrlocal.p5m.1 usrlocal.mog | \ pkgfmt > usrlocal.p5m.2 $ cat usrlocal.p5m.2 set name=pkg.fmri value=pkg://site/usrlocal@1.0 set name=pkg.summary value="Create the /usr/local directory." set name=pkg.description \ value="This package installs the /usr/local directory so that /usr/local remains available for unpackaged files." set name=variant.arch value=i386 dir path=usr/local owner=root group=bin mode=0755
$ pkglint usrlocal.p5m.2 Lint engine setup... Starting lint run... $
この例では、yourlocalrepo リポジトリのデフォルトパブリッシャーはすでに site に設定されています。
$ pkgsend -s yourlocalrepo publish -d usrlocal usrlocal.p5m.2 pkg://site/usrlocal@1.0,5.11:20140303T180555Z PUBLISHED
$ pkg refresh site $ pkg list -a usrlocal NAME (PUBLISHER) VERSION IFO usrlocal (site) 1.0 ---
$ pkg install -v usrlocal Packages to install: 1 Estimated space available: 20.66 GB Estimated space to be consumed: 454.42 MB Create boot environment: No Create backup boot environment: No Rebuild boot archive: No Changed packages: site usrlocal None -> 1.0,5.11:20140303T180555Z PHASE ITEMS Installing new actions 5/5 Updating package state database Done Updating package cache 0/0 Updating image state Done Creating fast lookup database Done Reading search index Done Updating search index 1/1
$ pkg list usrlocal NAME (PUBLISHER) VERSION IFO usrlocal (site) 1.0 i-- $ pkg info usrlocal Name: usrlocal Summary: Create the /usr/local directory. Description: This package installs the /usr/local directory so that /usr/local remains available for unpackaged files. State: Installed Publisher: site Version: 1.0 Build Release: 5.11 Branch: None Packaging Date: March 3, 2014 06:05:55 PM Size: 0.00 B FMRI: pkg://site/usrlocal@1.0,5.11:20140303T180555Z $ ls -ld /usr/local drwxr-xr-x 2 root bin 2 Mar 3 10:17 /usr/local/