本附录适用于安装或删除软件包(特别是第三方软件包)的系统管理员。遵循这些打包要求可实现以下目的:
避免修改当前运行的系统,以便使用 Solaris Live Upgrade 进行升级,并创建和维护非全局区域和无盘客户机
在使用安装程序(如自定义 JumpStart)时,禁止软件包进行交互式自动安装
本章包含以下几节:
遵守本节中的要求可确保当前运行的 OS 不被更改。
为了成功地安装操作系统,软件包必须能识别和正确地遵守备用根 (/) 文件系统,如 Solaris Live Upgrade 非活动引导环境。
软件包可以在其 pkgmap 文件(软件包映射)中包括绝对路径。如果这些文件存在,则将相对于 pkgadd 命令的 -R 选项来写它们。还可以将同时包含绝对和相对(可重定位)路径的软件包安装到备用根 (/) 文件系统上。 $PKG_INSTALL_ROOT 可放在绝对和可重定位文件之前,这样在使用 pkgadd 安装时,可正确解析所有路径。
使用 pkgadd -R 选项安装的或使用 pkgrm -R 选项删除的软件包不得更改当前正在运行的系统。此功能由自定义 JumpStart、Solaris Live Upgrade、非全局区域和无盘客户 机使用。
使用 pkgadd 命令 -R 选项安装的或使用 pkgrm 命令 -R 选项删除的软件包中包括的任何过程脚本均不得更改当前正在运行的系统。您提供的任何安装脚本必须引用前缀为 $PKG_INSTALL_ROOT 变量的目录或文件。软件包必须对所有带有 $PKG_INSTALL_ROOT 前缀的目录和文件进行写操作。软件包不得删除不带 $PKG_INSTALL_ROOT 前缀的目录。
表 B–1 提供了脚本语法的示例。
表 B–1 安装脚本语法示例
$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 |
软件包过程脚本必须独立于当前正在运行的 OS,以防止修改 OS。过程脚本定义在软件包安装和删除过程中的特定时刻所发生的操作。可以使用以下预定义的名称创建四个过程脚本:preinstall、postinstall、preremove 和 postremove。
表 B–2 创建脚本的指南
指南 |
影响 Solaris Live Upgrade |
影响非全局区域 |
---|---|---|
脚本必须在 Bourne shell (/bin/sh) 中编写。Bourne shell 是 pkgadd 命令用来执行过程脚本的解释程序。 |
X |
X |
脚本不得启动或停止任何进程,或者依赖于某些命令(例如 ps 或 truss)的输出,因为这些进程或命令都与操作系统有关,并且会报告关于当前正在运行的系统的信息。 |
X |
X |
脚本可自由使用其他标准 UNIX 命令,例如 expr、cp 和 ls 以及其他有助于编写 shell 脚本的命令。 |
X |
X |
脚本调用的任何命令必须在所有支持的发行版中可用,因为软件包必须在所有这些发行版上运行。所以,不能使用在 Solaris 8 发行版之后添加或删除的命令。 要验证在 Solaris 8、9 或 10 发行版中是否支持特定命令或选项,请参见 http://docs.sun.com 上的 Solaris Reference Manual AnswerBook 特定版本。 |
X |
软件包不得执行由软件包本身提供的命令。这是为了维护无盘客户机的兼容性,同时避免运行那些可能需要尚未安装的共享库的命令。
所有软件包都必须通过 pkgchk 验证。在创建软件包之后以及安装它之前,必须使用以下命令对其进行检查。
# pkgchk -d dir_name pkg_name |
指定该软件包所驻留的目录的名称
指定该软件包的名称
创建软件包后,必须通过使用 pkgadd 的 -R dir_name 选项将该软件包安装到备用根 (/) 文件系统位置,以便对该软件包进行测试。安装完软件包后,必须使用 pkgchk 命令检查软件包的正确性,如本例所示。
# pkgadd -d . -R /a SUNWvxvm # pkgchk -R /a SUNWvxvm |
不应显示任何错误。
如果软件包位于 /export/SUNWvxvm,则可发出以下命令。
# pkgchk -d /export 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} |
使用下列标准的 Solaris 实用程序时,必须在无用户输入信息提示的情况下,添加或删除软件包。
自定义 JumpStart 程序
Solaris Live Upgrade
Solaris 安装程序程序
Solaris Zone
要测试软件包以确保该软件包能在无用户交互的情况下安装,可使用 pkgadd 命令的 -a 选项创建一个新管理文件。-a 选项将定义一个安装管理文件,该文件用来替代缺省的管理文件。使用缺省文件时可能会导致提示用户输入更多信息。您可以创建一个管理文件,该文件指示 pkgadd 应绕过这些检查并安装软件包,无需用户确认。有关详细信息,请参见手册页 admin(4) 或 pkgadd(1M)。
以下示例说明了 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 实用程序进行用户交互。除非软件包需要的空间大于系统中的可用空间,否则 pkgadd 实用程序将使用此文件并安装软件包,而不会提示用户输入更多的信息。
mail= instance=overwrite partial=nocheck runlevel=nocheck idepend=nocheck space=ask setuid=nocheck confiict=nocheck action=nocheck basedir=default
下列参考提供有关打包要求和特定命令语法的背景信息。
有关打包要求和术语定义的详细信息 |
《Application Packaging Developer’s Guide》中的第 6 章 “Advanced Techniques for Creating Packages” |
有关添加和删除软件包以及安装管理文件的基本信息 |
《System Administration Guide: Basic Administration》中的第 16 章 “Managing Software(Overview)” |
有关本附录中引用的特定命令的详细信息,请参见手册页 |
dircmp(1)、fssnap(1M)、ps(1) 、truss(1) pkgadd(1M)、pkgchk(1M) 或 pkgrm(1M) |
有关 Solaris Live Upgrade 的概述 | |
有关自定义 JumpStart 的概述 |
《Solaris 10 安装指南:自定义 JumpStart 和高级安装》中的第 5 章 “自定义 JumpStart(概述)” |
有关 Solaris Zone 的概述 |