使用 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 参考手册解答。
所有软件包都必须通过 pkgchk 验证。在创建软件包之后以及安装它之前,必须使用以下命令对其进行检查。
# pkgchk -d 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)。