应用程序包开发者指南

path 字段

path 字段用于定义软件包对象在目标系统上的驻留位置。您可以使用绝对路径名(例如 /usr/bin/mail)或相对路径名(例如 bin/mail)来指示该位置。使用绝对路径名意味着对象在目标系统上的位置是由软件包定义的,不能更改。使用相对路径名的软件包对象表明该对象是可重定位的

可重定位对象在目标系统上不需要绝对路径位置。此类对象的位置是在安装过程中确定的。

可将所有软件包对象或某些软件包对象定义为可重定位。在编写任何安装脚本或创建 prototype 文件之前,请确定软件包对象将有固定位置(例如 /etc 中的启动脚本)还是可重定位的。

可重定位对象分为两种:可共同重定位的对象可单独重定位的对象

可共同重定位的对象

可共同重定位的对象相对于一个称作基目录的通用安装基本位置进行定位。基目录在 pkginfo 文件中由 BASEDIR 参数定义。例如, prototype 文件中一个名为 tests/generic 的可重定位对象要求 pkginfo 文件定义缺省 BASEDIR 参数。例如:


BASEDIR=/opt

此示例意味着,对象安装后将位于 /opt/tests/generic 目录中。


注 –

/opt 目录是不属于基本 Solaris 软件的软件可以交付到的唯一目录。


只要可能,请尽量使用可共同重定位的对象。一般来说,可以使用指定了绝对路径的几个文件(例如 /etc/var 中的文件)来重定位一个软件包的主要部分。但是,如果一个软件包包含许多不同的重定位对象,请考虑将该软件包分成在 pkginfo 文件中具有明显不同 BASEDIR 值的多个软件包。

可单独重定位的对象

可单独重定位的对象不限于定位到可共同重定位的对象所在的目录位置。要定义一个可单独重定位的对象,需要在 prototype 文件的 path 字段中指定一个安装变量。指定安装变量之后,创建一个 request 脚本来提示安装人员输入可重定位基目录,或者创建一个 checkinstall 脚本基于文件系统数据确定路径名。有关 request 脚本的更多信息,请参见编写 request 脚本;有关 checkinstall 脚本的信息,请参见如何收集文件系统数据


注意 – 注意 –

可单独重定位的对象很难管理。使用可单独重定位的对象可能导致软件包组件的位置四处分散,这样在安装软件包的多个版本或体系结构时很难分离这些组件。只要可能,请尽量使用可共同重定位的对象。


参数化路径名

参数化路径名是包含变量规范的路径名。例如,/opt/$PKGINST/filename 是一个参数化路径名,因为含有 $PKGINST 变量规范。必须pkginfo 文件中为该变量规范定义一个缺省值。然后可以通过 request 脚本或 checkinstall 脚本更改该值。

路径中的变量规范必须位于路径名的开头或结尾,或者由斜线 (/) 分隔。有效的参数化路径名采用以下形式:


$PARAM/tests
tests/$PARAM/generic
/tests/$PARAM

一旦定义了变量规范,可能会导致将路径计算为绝对或可重定位路径。在下面的示例中,prototype 文件包含以下条目:


f none $DIRLOC/tests/generic

pkginfo 文件包含以下条目:


DIRLOC=/myopt

路径名 $DIRLOC/tests/generic 计算为绝对路径名 /myopt/tests/generic(无论是否在 pkginfo 文件中设置了 BASEDIR 参数)。

在此示例中,prototype 文件与前面的示例中完全相同,而 pkginfo 文件包含以下条目:


DIRLOC=firstcut
BASEDIR=/opt

路径名 $DIRLOC/tests/generic 将计算为可重定位的路径名 /opt/firstcut/tests/generic

有关参数化路径名的更多信息,请参见使用参数化基目录

关于对象的源位置和目标位置的简要说明

prototype 文件中的 path 字段定义对象在目标系统上的位置。如果软件包对象的目录结构不模仿目标系统上的预期结构,请在 prototype 文件中指定其当前位置。有关设置软件包对象结构的更多信息,请参见组织软件包的内容

如果您开发区域没有将软件包设置为所需的结构,可在 path 字段中使用 path1=path2 格式。在此格式中,path1 是对象应该在目标系统上所处的位置,而 path2 是对象在您系统中的位置。

还可以在 path1=path2 路径名格式中以 path1 表示可重定位对象的名称,而 path2 表示该对象在您系统上的完整路径名。


注 –

path1 不能包含未定义的生成变量,但是可以包含未定义的安装变量。path2 不能包含任何未定义的变量,虽然可以使用生成变量和安装变量。有关安装变量与生成变量之间区别的信息,请参见软件包环境变量


因为链接是通过 pkgadd 命令创建的,因此它们必须使用 path1= path2 格式。通常,链接的 path2 决不应是绝对的,而是应该相对于 path1 的目录部分。

使用 path1=path2 格式的一个替代方法是使用 !search 命令。有关更多信息,请参见pkgmk 命令提供搜索路径