本附录适用于需要使用定制 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 发行版中不存在的命令选项。例如,-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)。
定制 JumpStart 程序顺应性能够确保软件包可作为传统 Solaris 安装公用程序的一部分被添加和删除,这些公用程序包括:
定制 JumpStart 程序
Solaris suninstall 程序
Solaris Web Start 安装方法
定制 JumpStart 程序顺应性还可确保软件包可参与 Solaris 升级。要获得定制 JumpStart 程序顺应性,软件包还必须遵循“定制 JumpStart 程序和 Solaris Live Upgrade 替换根 (/) 要求”中概述的替换根 (/) 要求。
为了能够有效地使用定制 JumpStart 程序,软件包必须在不提示用户输入信息的情况下添加或删除。为了禁止用户交互,请使用 pkgadd 命令 -a 选项来设置一个新的管理文件。-a 选项将定义一个安装管理文件,该文件用来替代缺省的管理文件。使用缺省文件时可能会导致提示用户输入更多信息。您可以创建一个管理文件,该文件指示 pkgadd 应绕过这些检查,并在用户确认下安装软件包。以下示例显示了如何使用 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 在安装软件包之前提示用户加以确认。
mail= instance=overwrite partial=nocheck runlevel=nocheck idepend=nocheck space=nocheck setuid=nocheck confiict=nocheck action=nocheck basedir=default
有关详细信息,请参见手册页 admin( 4) 或 pkgadd( 1M)。