应用程序包开发者指南

prototype 文件的格式

以下是 prototype 文件中每一行的格式:


partftypeclasspathmajorminormodeownergroup

part

可选的数字字段,可用于将软件包对象分组为各部分。缺省值为 part 1(第 1 部分)。 

ftype

单字符字段,用于指定对象类型。请参见ftype 字段

class

表示对象所属的安装类。请参见class 字段

path

绝对或相对路径名,指示软件包对象在目标系统上的驻留位置。请参见path 字段

major

块特殊设备或字符特殊设备的主设备编号。 

minor

块特殊设备或字符特殊设备的次要设备编号。 

mode

对象的八进制模式(例如,0644)。请参见mode 字段

owner

对象的所有者(例如,binroot)。请参见owner 字段

group

对象所属的组(例如 binsys)。请参见group 字段

通常,只会定义 ftypeclasspathmodeownergroup 字段。以下各节将介绍这些字段。有关这些字段的附加信息,请参见 prototype(4) 手册页。

ftype 字段

ftype(文件类型)字段是一个单字符字段,用于指定软件包对象的文件类型。下表中介绍了有效的文件类型。

表 2–3 prototype 文件中的有效文件类型

文件类型字段值 

文件类型说明 

f

标准可执行文件或数据文件 

e

在安装或删除时将编辑的文件(可由几个软件包共享) 

v

可变文件(其内容预计会更改,例如日志文件) 

d

目录 

x

只能由该软件包访问的专用目录(可能包含未注册的日志或数据库信息) 

l

链接文件 

p

命名管道 

c

字符特殊设备 

b

块特殊设备 

i

信息文件或安装脚本 

s

符号链接 

class 字段

class 字段用于指定对象所属的类。使用类是一种可选的软件包设计功能。将会在编写类操作脚本中详细讨论此功能。

如果您不使用类,则对象属于 none 类。当执行 pkgmk 命令生成软件包时,该命令会在 pkginfo 文件中插入 CLASSES=none 参数。文件类型为 i 的文件必须有一个空的 class 字段。

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 命令提供搜索路径

mode 字段

mode 字段可以包含八进制数、问号 (?) 或变量规范。八进制数指定对象安装在目标系统上时的模式。? 表示在安装对象时模式不会更改,暗指在目标系统中已经存在同名对象。

$mode 形式的变量规范(其中变量的首字母必须是小写字母)意味着将会在生成软件包时设置此字段。请注意,此变量必须在生成时在 prototype 文件中或作为 pkgmk 命令的一个选项定义。有关安装变量与生成变量之间区别的信息,请参见软件包环境变量

文件类型为 i(信息文件)、l(硬链接)和 s(符号链接)的文件应将该字段留空。

owner 字段

owner 字段可以包含用户名、问号 (?) 或变量规范。用户名最多可包含 14 个字符,并且应该是目标系统中已经存在的名称(例如 binroot)。? 表示在安装对象时所有者不会更改,暗指在目标系统中已经存在同名对象。

变量规范的形式可以是 $Owner$owner,其中变量的首字母是大写字母或小写字母。如果变量首字母为一个小写字母,则必须在生成软件包时在 prototype 文件中或作为 pkgmk 命令的一个选项定义该变量。如果变量首字母为大写字母,系统会将变量规范插入 pkginfo 文件中作为缺省值,并且可以在安装时通过 request 脚本重新定义。有关安装变量与生成变量之间区别的信息,请参见软件包环境变量

文件类型为 i(信息文件)和 l(硬链接)的文件应将该字段留空。

group 字段

group 字段可以包含组名、问号 (?) 或变量规范。组名最多可包含 14 个字符,并且应该是目标系统中已经存在的名称(例如 binsys)。? 表示在安装对象时组不会更改,暗指在目标系统中已经存在同名对象。

变量规范的形式可以是 $Group$group,其中变量的首字母是大写字母或小写字母。如果变量首字母为一个小写字母,则必须在生成软件包时在 prototype 文件中或作为 pkgmk 命令的一个选项定义该变量。如果变量首字母为大写字母,系统会将变量规范插入 pkginfo 文件中作为缺省值,并且可以在安装时通过 request 脚本重新定义。有关安装变量与生成变量之间区别的信息,请参见软件包环境变量

文件类型为 i(信息文件)和 l(硬链接)的文件应将该字段留空。