在 Oracle® Solaris 11.2 中使用映像包管理系统打包和交付软件

退出打印视图

更新时间: 2014 年 7 月
 
 

单独对目录进行打包

要将未打包内容保留在原处(即使所有打包的内容均已从该目录卸载),需要单独对目录进行打包和安装。即使所有其他打包内容已从目录中卸载,只要安装目录的软件包仍处于安装状态,则目录也处于安装状态。

例如,如果执行以下步骤且没有其他安装的 IPS 软件包向 dir 提供内容,则 dir 目录的内容将挽救到 /var/pkg/lost+found,包括 IPS 未提供的应用程序:

  1. 将未以 IPS 软件包格式提供的应用程序安装到 dir 中。

  2. 安装向 dir 安装内容的 IPS 软件包。

  3. 卸载向 dir 安装内容的 IPS 软件包。

要维护安装在 dir 中的未打包软件,需将 dir 目录打包到它自己的 IPS 软件包中。

创建提供所需目录或目录结构的 IPS 软件包。安装该软件包。该目录结构将一直存在,直到卸载该软件包。卸载向该目录提供内容的其他软件包不会删除该目录。

不应创建提供 IPS 已经提供的目录的软件包。如果更新时以不同的所有权、权限或其他属性安装目录,则更新可能不会成功。请参见以下过程中的 pkgmogrify 步骤。

如何在卸载内容后保留目录

  1. 创建要提供的目录结构。

    本示例介绍了 /usr/local。您可以轻松扩展它,使其包含 /usr/local/bin 或 IPS 软件包不提供的其他目录结构。

    $ mkdir -p usrlocal/usr/local
  2. 创建初始软件包清单。
    $ 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
  3. 排除 IPS 已经提供的目录。

    创建 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>
  4. 应用对初始清单的更改。
    $ 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
  5. 检查工作。
    $ pkglint usrlocal.p5m.2
    Lint engine setup...
    Starting lint run...
    $
  6. 将软件包发布到系统信息库。

    在此示例中,yourlocalrepo 系统信息库的缺省发布者已设置为 site

    $ pkgsend -s yourlocalrepo publish -d usrlocal usrlocal.p5m.2
    pkg://site/usrlocal@1.0,5.11:20140303T180555Z
    PUBLISHED
  7. 确保能够看到想要安装的新软件包。
    $ pkg refresh site
    $ pkg list -a usrlocal
    NAME (PUBLISHER)      VERSION      IFO
    usrlocal (site)       1.0          ---
  8. 安装软件包。
    $ 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
  9. 确保软件包已安装。
    $ 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/