本附录适用于需要使用定制 JumpStart 程序或 Solaris Live Upgrade 来安装或删除软件包(特别是第三方软件包)的系统管理员。遵循这些封装要求可使定制 JumpStart 安装具有非交互性,并可防止修改当前正在运行的系统,从而可以使用 Solaris Live Upgrade 进行升级。
以下参考文档提供了封装要求的背景信息。
要使定制 JumpStart 程序和 Solaris Live Upgrade 正常工作,软件包必须符合 SVR4 封装要求。《Application Packaging Developer's Guide》提供了更多关于封装要求和术语定义的特定信息。主要参见《Application Packaging Developer's Guide》中的“Advanced Package Creation Techniques”
有关添加和删除软件包以及安装管理文件的基本信息,请参见《System Administration Guide: Basic Administration》中的“Managing Software (Overview)”。请参见特定的手册页。
有关在本附录中引用的命令的详细信息,请参见手册页 dircmp( 1)、fssnap( 1M)、ps(1 ) 或 truss( 1)。
表 C–1 列出了本文档中适用于 Solaris Live Upgrade 或定制 JumpStart 程序的信息。
表 C–1 要求信息
安装方法 |
记录在案的要求 |
---|---|
Solaris Live Upgrade |
|
定制 JumpStart 程序 |
|
非活动引导环境是操作环境的副本,而不是当前运行系统的副本。由 Live Upgrade 或定制 JumpStart 程序使用的软件包必须遵循以下要求:
在没有用户交互的情况下启用定制 JumpStart 安装或升级
不对当前正在运行的系统进行任何修改,这一点在使用 Solaris Live Upgrade 时是非常必要的
下表说明了非活动引导环境顺应性的要求。
要成功安装操作系统,软件包必须识别并正确操作非活动引导环境的说明符。
软件包可以在其 pkgmap 文件(包映射)中包括绝对路径。如果这些文件存在,则将相对于 pkgadd 命令的 -R 选项来写它们。同时包含绝对路径和相对(可重定位)路径的软件包还可安装到替换根 (/) 中。$PKG_INSTALL_ROOT 被用作绝对文件和可重定位文件的前缀,以便所有路径在通过 pkgadd 安装时都可以正确解析。
正在使用 pkgadd -R 选项安装或正在使用 pkgrm -R 选项删除的软件包不得更改当前正在运行的系统。
正在使用 pkgadd 命令 -R 选项安装或正在使用 pkgrm 命令 -R 选项删除的软件包所包括的任何过程脚本均不得更改当前正在运行的系统。您所提供的任何安装脚本都必须引用那些前缀为 $PKG_INSTALL_ROOT 变量的目录或文件。软件包必须写所有带有 $PKG_INSTALL_ROOT 前缀的目录和文件。软件包不得删除不带 $PKG_INSTALL_ROOT 前缀的目录。表 C–2 提供了正确的脚本撰写语法的示例。
表 C–2 安装脚本语法示例
$PKG_INSTALL_ROOT 表示您要向其添加软件包的机器的根 (/) 文件系统的位置。该位置被设置为 pkgadd 命令的 -R 参数。例如,如果调用以下命令,则在软件包安装过程中 $PKG_INSTALL_ROOT 将成为 /a。
# pkgadd -R /a SUNWvxvm |
$BASEDIR 指向安装可重定位的软件包对象的可重定位基目录。在此仅安装可重定位的对象。不可重定位的对象(即那些在 pkgmap 文件中具有绝对路径的对象)的安装实际上总是相对于非活动引导环境,而不是相对于 $BASEDIR。如果一个软件包没有可重定位的对象,则该软件包被称为绝对软件包(或不可重定位的软件包),同时 $BASEDIR 将是未定义的,因而不可用于软件包过程脚本。
例如,假定一个软件包的 pkgmap 文件包含以下两项:
1 f none sbin/ls 0555 root sys 3541 12322 1002918510 1 f none /sbin/ls2 0555 root sys 3541 12322 2342423332 |
pkginfo 文件包含一个 $BASEDIR 定义:
BASEDIR=/opt |
如果使用以下命令安装软件包,则 ls 安装在 /a/opt/sbin/ls,而 ls2 安装为 /a/sbin/ls2。
# pkgadd -R /a SUNWtest |
在使用 Solaris Live Upgrade 以及创建新的引导环境时,请遵循以下准则以免出现问题。
您的软件包过程脚本必须独立于当前活动的操作环境。过程脚本定义在软件包安装和删除过程中的特定时刻所发生的操作。可以使用以下预定义的名称创建四个过程脚本:preinstall、postinstall、preremove 和 postremove。软件包过程脚本必须独立于当前活动的操作环境,因为可能使用 Solaris Live Upgrade 来切换非活动引导环境。
这些脚本不得启动或停止任何进程,或者依赖于某些命令(如 ps 或 truss)的输出,因为这些命令都是与操作系统有关的,并且会报告关于当前正在运行的系统的信息。
过程脚本可自由使用其它标准 UNIX 命令,如 expr、cp 和 ls 以及其它有助于 shell 脚本撰写的命令。但是,请勿修改非活动引导环境,除非符合定制 JumpStart 程序和 Solaris Live Upgrade 非活动引导环境的要求节中所介绍的规则。
所有脚本都必须以 Bourne shell (/bin/sh) 编写。Bourne shell 是 pkgadd 命令用来执行过程脚本的解释程序。
软件包过程脚本不能调用在 2.6 及以后的发行版中添加的命令。例如,软件包过程脚本不能调用 pgrep 命令。自从 2.6 发行版问世以来,许多命令都增加了附加特征。软件包过程脚本不得使用任何在 2.6 发行版中不存在的命令选项。例如,Solaris 7 发行版中添加了 umount 命令中的 -f 选项。要确认 Solaris 2.6 是否支持特定的命令或选项,请参见 http://docs.sun.com 上的《Solaris 2.6 Reference Manual AnswerBook》。
所有软件包都必须通过 pkgchk 验证。在创建软件包之后以及安装它之前,必须使用以下命令对其进行检查。
# pkgchk -d dir_name pkg_name |
dir_name |
指定该软件包所驻留的目录的名称 |
pkg_name |
指定该软件包的名称 |
例如,如果软件包位于 /export/SUNWvxvm,则您将发出以下命令。
# pkgchk -d /export SUNWvxvm |
不应显示任何错误。
在创建一个软件包之后,必须通过使用 pkgadd 的 -R dir_name 选项将该软件包安装到非活动引导环境位置以便对其进行测试。软件包安装后,如本例所示,必须使用 pkgchk 命令对其进行正确性检查。
# pkgadd -d . -R /a SUNWvxvm # pkgchk -R /a SUNWvxvm |
不应显示任何错误。
同时,软件包不得执行由软件包本身提供的命令。这样做是为了维护无盘兼容性,同时避免运行可能需要尚未安装的共享库的命令。
可使用各种命令对这些创建、修改和删除文件的要求进行检验。例如,dircmp 或 fssnap 命令可用于检验软件包是否运行正常。同时,ps 命令可用于测试守护程序的顺应性,方法是确保守护程序未被该软件包停止或启动。truss、pkgadd -v 和 pkgrm 命令可测试运行时软件包安装顺应性,但可能不会在所有的情况下都有效。在以下示例中,truss 命令除去所有只读的非 $TEMPDIR 访问,而仅显示对不在指定的非活动引导环境中的路径的非只读访问。
# TEMPDIR=/a; export TEMPDIR # truss -t open /usr/sbin/pkgadd -R ${TEMPDIR} SUNWvxvm \ 2>&1> /dev/null | grep -v O_RDONLY | grep -v \ 'open("'${TEMPDIR} |
有关在本节中引用的命令的详细信息,请参见手册页 dircmp(1)、fssnap(1M)、ps(1)、truss(1)、pkgadd(1M)、pkgchk(1M) 或 pkgrm(1M)。
定制 JumpStart 程序顺应性能够确保软件包可作为传统 Solaris 安装公用程序的一部分被添加和删除,这些公用程序包括:
定制 JumpStart 程序
Solaris suninstall 程序
Solaris Web Start 安装方法
定制 JumpStart 程序顺应性还可确保软件包可参与 Solaris 升级。要与定制 JumpStart 程序兼容,软件包也必须符合定制 JumpStart 程序和 Solaris Live Upgrade 非活动引导环境的要求中说明的非活动引导环境的要求。
为了能够有效地使用定制 JumpStart 程序,软件包必须在不提示用户输入信息的情况下添加或删除。为了禁止用户交互,请使用 pkgadd 命令 -a 选项来设置一个新的管理文件。-a 选项将定义一个安装管理文件,该文件用来替代缺省的管理文件。使用缺省文件时可能会导致提示用户输入更多信息。您可以创建一个管理文件,该文件指示 pkgadd 应绕过这些检查并安装软件包,无需用户确认。有关详细信息,请参见手册页 admin( 4) 或 pkgadd( 1M)。
以下示例显示了如何使用 pkgadd 管理文件。
如果未提供任何管理文件,则 pkgadd 将使用 /var/sadm/install/admin/default。使用此文件可能会导致发生用户交互。
# pkgadd |
如果在命令行上提供了一个相对管理文件,则 pkgadd 将在 /var/sadm/install/admin 中查找文件名并使用该文件。在本示例中,相对管理文件名为 nocheck,并且 pkgadd 将查找 /var/sadm/install/admin/nocheck。
# pkgadd -a nocheck |
如果提供的是一个绝对文件,则 pkgadd 将使用该文件。在本示例中,pkgadd 在 /tmp 中查找 nocheck 管理文件。
# pkgadd -a /tmp/nocheck |
下面是一个使用了 pkgadd 公用程序的安装管理文件的示例,它几乎不需要进行用户交互。除非软件包需要的空间大于系统中的可用空间,否则 pkgadd 公用程序将使用此文件并安装软件包,而不会提示用户输入更多的信息。
mail= instance=overwrite partial=nocheck runlevel=nocheck idepend=nocheck space=ask setuid=nocheck confiict=nocheck action=nocheck basedir=default