pkgsend generate 命令的 source 参数可以是 SVR4 软件包。有关支持的源的完整列表,请参见 pkgsend(1) 手册页。当源是 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 输出的以下几点:
pkg.summary 和 pkg.description 属性是根据 pkginfo 文件中的数据自动创建的。
set 操作是根据 pkginfo 文件中的额外参数生成的。set 操作在 pkg.send.convert.* 名称空间下设置。使用 pkgmogrify(1) 转换可将此类属性转换为更合适的属性名称。
legacy 操作是根据 pkginfo 文件中的数据生成的。
生成了 license 操作,指向 SVR4 软件包中所使用的版权文件。
发出了有关无法转换的脚本操作的错误消息。
以下检查显示了 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 执行器可实现与此脚本相同的结果,如添加需要的任何侧面或执行器中所述。有关执行器的详尽说明,请参见Chapter 7, 在软件包安装过程中自动进行系统更改。
pkgsend generate 命令还检查是否存在类操作脚本,并生成错误消息来指示应该检查哪些脚本。
在由 SVR4 软件包到 IPS 软件包的所有转换中,需要的功能可以通过使用现有操作类型或 SMF 服务来实现。有关可用操作类型的详细信息,请参见软件包内容:操作。有关 SMF 和软件包操作的信息,请参见Chapter 7, 在软件包安装过程中自动进行系统更改。
添加软件包元数据和解析相关项的方式与创建并发布软件包中所述相同,因此在本节中不再讨论。对于转换的软件包,软件包创建过程中下一个可能显示其特有问题的步骤是验证步骤。