要将未打包内容保留在原处(即使所有打包的内容均已从该目录卸载),需要单独对目录进行打包和安装。即使所有其他打包内容已从目录中卸载,只要安装目录的软件包仍处于安装状态,则目录也处于安装状态。
例如,如果执行以下步骤且没有其他安装的 IPS 软件包向 dir 提供内容,则 dir 目录的内容将挽救到 /var/pkg/lost+found,包括 IPS 未提供的应用程序:
将未以 IPS 软件包格式提供的应用程序安装到 dir 中。
安装向 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
创建 pkgmogrify 输入文件,添加元数据并排除提供 /usr(因为该目录已由 Oracle Solaris 提供)。您可能还需要添加转换,以更改缺省的目录所有权或权限。
$ 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/