在使用 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 发行版中不存在的命令选项。例如,-f 选项是 umount 命令的新增选项。
所有软件包都必须通过 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 命令可测试运行时软件包安装顺应性,但可能不会在所有情况下都有效。在以下示例中,truss 命令除去所有只读的非 $BASEDIR 访问,而仅显示对不在指定的替换根 (/) 中的路径的非只读访问。
# BASEDIR=/a; export BASEDIR # truss -t open /usr/sbin/pkgadd -R ${BASEDIR} SUNWvxvm \ 2>&1> /dev/null | grep -v O_RDONLY | grep -v \ 'open("'${BASEDIR} |
有关本部分所引用的命令的详细信息,请参见手册页 dircmp(1)、fssnap(1M)、 ps(1) 或 truss(1)。