使用 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 发行版中是否受支持,请参见 Solaris 2.6 Reference Manual AnswerBook,其网址为 http://docs.sun.com。
所有软件包都必须通过 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)。