在使用 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)。