应用程序包开发者指南

传统方法

可重定位软件包

System V ABI 表明,可重定位软件包背后的原始意图是使安装软件包对于管理员而言更加便利。现在,对可重定位软件包的需求更进了一大步。便利与否不是唯一的问题,更有可能发生的问题是在安装期间,一个活动的软件产品已经安装在缺省目录中。不能处理这种情况的软件包会覆写现有产品,或者安装失败。然而,可处理多个体系结构和多个版本的软件包可以顺利安装,并且为管理员提供与现有管理传统完全兼容的大量选项。

在某些方面,多个体系结构的问题和多个版本的问题是同一问题。必须可以并行安装现有软件包的变体与其他变体,并且能够在不影响功能的情况下将客户机或导出的文件系统的独立使用者定向到其中任一变体。尽管 Sun 已经制定了在服务器上处理多个体系结构的方法,但管理员可以不遵守这些推荐方法。所有软件包都必须能够符合管理员的合理安装期望。

示例-传统的可重定位软件包

此示例演示一个传统的可重定位软件包内容。该软件包将位于 /opt/SUNWstuf 中,其 pkginfo 文件和 pkgmap 文件可能如下所示。

pkginfo 文件

# pkginfo file
PKG=SUNWstuf
NAME=software stuff 
ARCH=sparc
VERSION=1.0.0,REV=1.0.5
CATEGORY=application
DESC=a set of utilities that do stuff
BASEDIR=/opt
VENDOR=Sun Microsystems, Inc.
HOTLINE=Please contact your local service provider
EMAIL=
MAXINST=1000
CLASSES=none
PSTAMP=hubert990707141632

pkgmap 文件

: 1 1758
1 d none SUNWstuf 0775 root bin
1 d none SUNWstuf/EZstuf 0775 root bin
1 f none SUNWstuf/EZstuf/dirdel 0555 bin bin 40 773 751310229
1 f none SUNWstuf/EZstuf/usrdel 0555 bin bin 40 773 751310229
1 f none SUNWstuf/EZstuf/filedel 0555 bin bin 40 773 751310229
1 d none SUNWstuf/HRDstuf 0775 root bin
1 f none SUNWstuf/HRDstuf/mksmart 0555 bin bin 40 773 751310229
1 f none SUNWstuf/HRDstuf/mktall 0555 bin bin 40 773 751310229
1 f none SUNWstuf/HRDstuf/mkcute 0555 bin bin 40 773 751310229
1 f none SUNWstuf/HRDstuf/mkeasy 0555 bin bin 40 773 751310229
1 i pkginfo 348 28411 760740163
1 i postinstall 323 26475 751309908
1 i postremove 402 33179 751309945
1 i preinstall 321 26254 751310019
1 i preremove 320 26114 751309865

因为每个软件包对象都会安装到 pkginfo 文件中的 BASEDIR 参数所定义的基目录,所以这称为传统方法。例如,pkgmap 文件中的第一个对象被安装到目录 /opt/SUNWstuf

绝对软件包

绝对软件包是安装到特定根 (/) 文件系统的软件包。这些软件包难以从多个版本和体系结构的角度进行处理。通常,所有软件包都应该是可重定位的。然而,有非常充足的理由在可重定位软件包中包括绝对元素。

示例-传统绝对软件包

如果 SUNWstuf 软件包是绝对软件包,则不应该在 pkginfo 文件中定义 BASEDIR 参数,而 pkgmap 文件将如下所示。

pkgmap 文件

: 1 1758
1 d none /opt ? ? ?
1 d none /opt/SUNWstuf 0775 root bin
1 d none /opt/SUNWstuf/EZstuf 0775 root bin
1 f none /opt/SUNWstuf/EZstuf/dirdel 0555 bin bin 40 773 751310229
1 f none /opt/SUNWstuf/EZstuf/usrdel 0555 bin bin 40 773 751310229
1 f none /opt/SUNWstuf/EZstuf/filedel 0555 bin bin 40 773 751310229
1 d none /opt/SUNWstuf/HRDstuf 0775 root bin
1 f none /opt/SUNWstuf/HRDstuf/mksmart 0555 bin bin 40 773 751310229
1 f none /opt/SUNWstuf/HRDstuf/mktall 0555 bin bin 40 773 751310229
1 f none /opt/SUNWstuf/HRDstuf/mkcute 0555 bin bin 40 773 751310229
1 f none /opt/SUNWstuf/HRDstuf/mkeasy 0555 bin bin 40 773 751310229
1 i pkginfo 348 28411 760740163
1 i postinstall 323 26475 751309908
1 i postremove 402 33179 751309945
1 i preinstall 321 26254 751310019
1 i preremove 320 26114 751309865

在此示例中,如果管理员在安装期间指定了一个备用基目录,pkgadd 命令将忽略该目录。此软件包总是安装到目标系统的 /opt/SUNWstuf

pkgadd 命令的 -R 参数按预期方式工作。例如,


pkgadd -d . -R /export/opt/client3 SUNWstuf

将对象安装在 /export/opt/client3/opt/SUNWstuf 中;但这是此软件包最接近可重定位软件包之处。

请注意,在 pkgmap 文件中,对 /opt 目录使用了问号 (?)。这表明不应该更改现有属性。这并不意味着“使用缺省属性创建目录”,尽管在某些情况下可能发生这种情况。特定于新软件包的任何目录都必须明确指定所有属性。

复合软件包

任何包含可重定位对象的软件包称为可重定位软件包。这可能令人产生误解,因为可重定位软件包可能在其 pkgmap 文件中包含绝对路径。在 pkgmap 文件中使用根 (/) 条目可以增强软件包的可重定位特性。同时具有可重定位条目和根条目的软件包称为复合软件包。

示例-传统解决方案

假定 SUNWstuf 软件包中的一个对象是在运行级别 2 执行的启动脚本。文件 /etc/rc2.d/S70dostuf 需要作为该软件包的一部分安装,但不能将其放置到基目录中。假定可重定位软件包是唯一的解决方案,pkginfopkgmap 可能如下所示。

pkginfo 文件

# pkginfo file
PKG=SUNWstuf
NAME=software stuff 
ARCH=sparc
VERSION=1.0.0,REV=1.0.5
CATEGORY=application
DESC=a set of utilities that do stuff
BASEDIR=/
VENDOR=Sun Microsystems, Inc.
HOTLINE=Please contact your local service provider
EMAIL=
MAXINST=1000
CLASSES=none
PSTAMP=hubert990707141632

pkgmap 文件

: 1 1758
1 d none opt/SUNWstuf/EZstuf 0775 root bin
1 f none opt/SUNWstuf/EZstuf/dirdel 0555 bin bin 40 773 751310229
1 f none opt/SUNWstuf/EZstuf/usrdel 0555 bin bin 40 773 751310229
1 f none opt/SUNWstuf/EZstuf/filedel 0555 bin bin 40 773 751310229
1 d none opt/SUNWstuf/HRDstuf 0775 root bin
1 f none opt/SUNWstuf/HRDstuf/mksmart 0555 bin bin 40 773 751310229
1 f none opt/SUNWstuf/HRDstuf/mktall 0555 bin bin 40 773 751310229
1 f none opt/SUNWstuf/HRDstuf/mkcute 0555 bin bin 40 773 751310229
1 f none opt/SUNWstuf/HRDstuf/mkeasy 0555 bin bin 40 773 751310229
1 d none etc	? ? ?
1 d none etc/rc2.d ? ? ?
1 f none etc/rc2.d/S70dostuf 0744 root sys 450 223443
1 i pkginfo 348 28411 760740163
1 i postinstall 323 26475 751309908
1 i postremove 402 33179 751309945
1 i preinstall 321 26254 751310019
1 i preremove 320 26114 751309865

此方法和绝对软件包方法之间没有太大差异。实际上,作为绝对软件包使用会更好,因为如果管理员为此软件包提供备用基目录,它将无法正常工作!

实际上,此软件包中只有一个文件需要相对于根保持固定,其余文件都可以任意移动。本节其余部分将讨论如何使用复合软件包解决此问题。