JavaScript is required to for searching.
跳过导航链接
退出打印视图
在 Oracle Solaris 11.1 中使用映像包管理系统打包和交付软件     Oracle Solaris 11.1 Information Library (简体中文)
为本文档评分
search filter icon
search icon

文档信息

前言

1.  IPS 设计目标、概念和术语

2.  使用 IPS 打包软件

设计软件包

创建并发布软件包

生成软件包清单

将必要的元数据添加到生成的清单中

评估相关项

生成软件包相关项

解析软件包相关项

添加需要的任何侧面或执行器

验证软件包

发布软件包

发布到本地文件系统信息库

作为软件包归档文件发布

使用软件包系统信息库和归档文件

测试软件包

将 SVR4 软件包转换为 IPS 软件包

从 SVR4 软件包生成 IPS 软件包清单

验证已转换的软件包

其他软件包转换注意事项

3.  安装、删除和更新软件包

4.  指定软件包相关项

5.  允许变量

6.  以编程方式修改软件包清单

7.  在软件包安装过程中自动进行系统更改

8.  有关软件包更新的高级主题

9.  对 IPS 软件包进行签名

10.  处理非全局区域

11.  修改已发布的软件包

A.  对软件包进行分类

B.  如何使用 IPS 打包 Oracle Solaris OS

请告诉我们如何提高我们的文档:
过于简略
不易阅读或难以理解
重要信息缺失
错误的内容
需要翻译的版本
其他
Your rating has been updated
感谢您的反馈!

您的反馈将非常有助于我们提供更好的文档。 您是否愿意参与我们的内容改进并提供进一步的意见?

将 SVR4 软件包转换为 IPS 软件包

本节显示了将 SVR4 软件包转换为 IPS 软件包的示例,并强调了可能需要特别注意的区域。

要将 SVR4 软件包转换为 IPS 软件包,请遵循本章中上面所介绍的有关在 IPS 中打包任何软件的相同步骤。其中大部分步骤对于 SVR4 到 IPS 软件包的转换都是相同的,因此在本节中不再解释。本节介绍了转换软件包(而非创建新软件包)时的不同步骤。

从 SVR4 软件包生成 IPS 软件包清单

pkgsend generate 命令的 source 参数可以是 SVR4 软件包。有关支持的源的完整列表,请参见 pkgsend(1) 手册页。当 source 是 SVR4 软件包时,pkgsend generate 将使用该 SVR4 软件包中的 pkgmap(4) 文件,而不是软件包中所交付文件所在的目录。

扫描 prototype 文件时,pkgsend 实用程序同时查找将软件包转换为 IPS 时可能导致问题的项。pkgsend 实用程序将报告那些问题并打印生成的清单。

本节中使用的示例 SVR4 软件包包含以下 pkginfo(4) 文件:

VENDOR=My Software Inc.
HOTLINE=Please contact your local service provider
PKG=MSFTmypkg
ARCH=i386
DESC=A sample SVR4 package of My Sample Package
CATEGORY=system
NAME=My Sample Package
BASEDIR=/
VERSION=11.11,REV=2011.10.17.14.08
CLASSES=none manpage
PSTAMP=linn20111017132525
MSFT_DATA=Some extra package metadata

本节中使用的示例 SVR4 软件包包含以下相应的 prototype(4) 文件:

i pkginfo
i copyright
i postinstall
d none opt 0755 root bin
d none opt/mysoftware 0755 root bin
d none opt/mysoftware/lib 0755 root bin
f none opt/mysoftware/lib/mylib.so.1 0644 root bin
d none opt/mysoftware/bin 0755 root bin
f none opt/mysoftware/bin/mycmd 0755 root bin
d none opt/mysoftware/man 0755 root bin
d none opt/mysoftware/man/man1 0755 root bin
f none opt/mysoftware/man/man1/mycmd.1 0644 root bin

对使用这些文件创建的 SVR4 软件包运行 pkgsend generate 命令可以生成以下 IPS 清单:

$ pkgsend generate ./MSFTmypkg | pkgfmt
pkgsend generate: ERROR: script present in MSFTmypkg: postinstall

set name=pkg.summary value="My Sample Package"
set name=pkg.description value="A sample SVR4 package of My Sample Package"
set name=pkg.send.convert.msft-data value="Some extra package metadata"
dir path=opt owner=root group=bin mode=0755
dir path=opt/mysoftware owner=root group=bin mode=0755
dir path=opt/mysoftware/bin owner=root group=bin mode=0755
file reloc/opt/mysoftware/bin/mycmd path=opt/mysoftware/bin/mycmd owner=root \
    group=bin mode=0755
dir path=opt/mysoftware/lib owner=root group=bin mode=0755
file reloc/opt/mysoftware/lib/mylib.so.1 path=opt/mysoftware/lib/mylib.so.1 \
    owner=root group=bin mode=0644
dir path=opt/mysoftware/man owner=root group=bin mode=0755
dir path=opt/mysoftware/man/man1 owner=root group=bin mode=0755
file reloc/opt/mysoftware/man/man1/mycmd.1 \
    path=opt/mysoftware/man/man1/mycmd.1 owner=root group=bin mode=0644
legacy pkg=MSFTmypkg arch=i386 category=system \
    desc="A sample SVR4 package of My Sample Package" \
    hotline="Please contact your local service provider" \
    name="My Sample Package" vendor="My Software Inc." \
    version=11.11,REV=2011.10.17.14.08
license install/copyright license=MSFTmypkg.copyright

请注意有关 pkgsend generate 输出的以下几点:

以下检查显示了 pkgsend generate 的错误消息和非零返回代码:

$ pkgsend generate MSFTmypkg > /dev/null
pkgsend generate: ERROR: script present in MSFTmypkg: postinstall
$ echo $?
1

SVR4 软件包使用的 postinstall 脚本无法直接转换为 IPS 等效项。必须手动检查该脚本。

软件包中的 postinstall 脚本包含以下内容:

#!/usr/bin/sh
catman -M /opt/mysoftware/man

可以使用指向现有 SMF 服务 svc:/application/man-index:default restart_fmri 执行器归档与该脚本相同的结果,如添加需要的任何侧面或执行器中所述。有关执行器的详尽说明,请参见第 7 章

pkgsend generate 命令还检查是否存在类操作脚本,并生成错误消息来指示应该检查哪些脚本。

在由 SVR4 软件包到 IPS 软件包的所有转换中,需要的功能可以通过使用现有操作类型或 SMF 服务来实现。有关可用操作类型的详细信息,请参见软件包内容:操作。有关 SMF 和软件包操作的信息,请参见第 7 章

添加软件包元数据和解析相关项的方式与创建并发布软件包中所述相同,因此在本节中不再讨论。对于转换的软件包,软件包创建过程中下一个可能显示其特有问题的步骤是验证步骤。

验证已转换的软件包

转换 SVR4 软件包时的一个常见错误源自通过 SVR4 软件包交付的目录与通过 IPS 软件包交付的相同目录中存在不匹配的属性。

在此示例中的 SVR4 软件包中,样例清单中 /opt 的目录操作的属性与系统软件包为该目录定义的属性不同。

目录操作一节说明所有的引用计数操作必须使用相同的属性。当尝试安装目前生成的 mypkg 版本时,出现以下错误:

# pkg install mypkg
Creating Plan /
pkg install: The requested change to the system attempts to install multiple actions
for dir 'opt' with conflicting attributes:

    1 package delivers 'dir group=bin mode=0755 owner=root path=opt':
        pkg://mypublisher/mypkg@1.0,5.11-0:20111017T020042Z
    3 packages deliver 'dir group=sys mode=0755 owner=root path=opt':
        pkg://solaris/developer/build/onbld@0.5.11,5.11-0.175.0.0.0.1.0:20111012T010101Z
        pkg://solaris/system/core-os@0.5.11,5.11-0.175.0.0.0.1.0:20111012T023456Z

These packages may not be installed together. Any non-conflicting set may
be, or the packages must be corrected before they can be installed.

要在发布软件包之前(而不是安装时)捕捉到错误,可以对引用系统信息库使用 pkglint(1) 命令,如以下示例所示:

$ pkglint -c ./cache -r file:///scratch/solaris-repo ./mypkg.mf.res
Lint engine setup...

PHASE                                          ITEMS
4                                          4292/4292
Starting lint run...

ERROR pkglint.dupaction007        path opt is reference-counted but has different attributes across 5
duplicates: group: bin -> mypkg group: sys -> developer/build/onbld system/core-os system/ldoms/ldomsmanager

请注意有关 path opt 在不同软件包中包含不同属性的错误消息。

pkglint 报告的额外 ldomsmanager 软件包位于引用软件包系统信息库中,但没有安装在测试系统中。先前由 pkg install 报告的错误中没有列出 ldomsmanager 软件包,因为该软件包没有安装。

其他软件包转换注意事项

虽然可以在 Oracle Solaris 11 系统上直接安装 SVR4 软件包,但是您应该创建相应的 IPS 软件包。安装 SVR4 软件包是临时的解决方案。

传统操作中所介绍的 legacy 操作以外,这两个包管理系统间不存在任何链接,并且 SVR4 和 IPS 软件包不会相互引用软件包元数据。

IPS 具有可以确定打包内容是否已正确安装的命令,如 pkg verify。但是,如果其他包管理系统合法安装了软件包或运行了可修改 IPS 软件包所安装的目录或文件的安装脚本,则会导致错误。

IPS 的 pkg fixpkg revert 命令可以覆盖通过 SVR4 软件包和 IPS 软件包交付的文件,可能会导致已打包的应用程序出现故障。

pkg install 等命令通常用于检查重复操作和引用计数操作的常见属性,当来自其他包管理系统的文件发生冲突时,该命令可能无法检测到潜在的错误。

考虑到这些潜在错误以及 IPS 中的完整软件包开发工具链,建议为 Oracle Solaris 11 开发 IPS 软件包而不是 SVR4 软件包。