应用程序包开发者指南

第 1 章 设计软件包

在生成软件包之前,您需要了解需要创建哪些文件以及需要执行哪些命令。您还需要考虑您的应用程序软件的要求以及客户的需要。您的客户是将要安装您的软件包的管理员。本章讨论生成软件包之前您应该了解和考虑的文件、命令和准则。

以下是本章中信息的列表。

在何处找到打包任务

使用以下任务图可以找到用于生成和验证软件包的逐步说明。

什么是软件包?

应用程序软件是以被称为软件包的单位交付的。软件包是软件产品所需的文件和目录的集合。软件包通常是在完成应用程序代码开发后由应用程序开发者设计和生成的。软件产品需要生成到一个或多个软件包中,以便可以轻松地将其转换为分发介质。然后,便可以大量生产该软件产品,并由管理员进行安装。

软件包是具有所定义格式的文件和目录的集合。该格式符合应用程序二进制接口 (application binary interface, ABI),ABI 是对系统 V 接口定义的补充。

软件包组件

软件包组件分为两类。

控制文件又分为两类:信息文件安装脚本。有些控制文件是必需的,有些控制文件是可选的。

要打包您的应用程序,必须首先创建组成软件包所必需的组件以及任何可选组件。然后,您可以使用 pkgmk 命令来生成软件包。

要生成软件包,您必须提供以下各项:

下图描述了软件包的内容。

图 1–1 软件包的内容

前面的上下文和下面的上下文对图形进行了介绍。

必需的软件包组件

在生成软件包之前,必须创建以下组件:

可选软件包组件

软件包信息文件

您可以在软件包中包含四个可选软件包信息文件:

每个软件包信息文件都应在 prototype 文件中有一个对应条目。关于创建这些文件的更多信息,请参见创建信息文件

软件包安装脚本

安装脚本并不是必需的。但是,您可以提供可在安装软件包期间执行自定义操作的脚本。安装脚本具有以下特征:

四种脚本类型如下:

有关安装脚本的更多信息,请参见创建安装脚本

生成软件包之前的注意事项

生成软件包之前,您需要确定您的产品将由一个还是多个软件包组成。请注意,许多小软件包会比一个大软件包需要更长的安装时间。虽然创建单个软件包是一个不错的主意,但不一定总能实现。如果您决定生成多个软件包,则需要确定如何对应用程序代码分段。本节提供了计划生成软件包时使用的准则列表。

许多打包准则在彼此之间都存在着一定的折衷。均衡地满足所有要求通常很困难。这些准则是按重要性顺序呈现的。不过,需要根据具体环境将此顺序用作灵活的指导。虽然每个准则都很重要,但终究取决于您来优化这些要求,以生成一组优质的软件包。

有关更多设计理念,请参见第 6 章

使软件包可远程安装

所有软件包必须可远程安装。可远程安装是指要安装软件包的管理员可以尝试将其安装在客户机系统上,而不一定安装到执行 pkgadd 命令的根 (/) 文件系统。

针对客户机/服务器配置进行优化

布置软件包时,请考虑不同类型的系统软件配置(例如,独立系统和服务器)。良好的打包设计会分离受影响的文件,以优化每个配置类型的安装。例如,应该将根 (/) 和 /usr 文件系统的内容进行分段,以便可以轻松地支持服务器配置。

根据功能边界打包

软件包应该是一个独立的整体,并且可通过一组功能清楚地标识。例如,一个包含 UFS 的软件包应包含所有 UFS 实用程序,并只限于采用 UFS 二进制代码。

应该根据客户的视角将软件包组织成功能单元。

根据版税边界打包

将因有合同而需要支付版税的代码放到专用软件包或软件包组中。请勿将代码分散放到并非必需的多个软件包中。

根据系统相关性打包

将系统相关的二进制代码保存在专用软件包中。例如,应该将内核代码放在专用软件包中,使每个实现体系结构都由不同的软件包实例组成。本规则也适用于不同体系结构的二进制代码。例如,SPARC 系统的二进制代码应放在一个软件包中,而 x86 系统的二进制代码应放在另一个软件包中。

消除软件包中的重叠

构建软件包时,请尽一切可能消除重复的文件。不必要的文件重复会导致支持和版本方面的困难。如果您的产品有多个软件包,请反复比较这些软件包的内容以查看是否存在重复的文件。

根据本地化边界打包

本地化特定的项目应放在其自己的软件包中。理想的软件包模型应根据每种语言环境将产品的本地化项目作为一个软件包交付。遗憾的是,在某些情况下组织边界与功能和产品边界准则相冲突。

国际缺省设置也可以在一个软件包中交付。此设计可以将需要本地化更改的文件隔离开来,并对本地化软件包的交付格式进行标准化。

映像包管理系统 (Image Packaging System, IPS) 软件包

本文档讨论 SVR4 软件包。如果要交付到 OpenSolaris OS,请考虑使用映像包管理系统 (Image Packaging System, IPS) 软件包。OpenSolaris OS 既支持 SVR4,又支持 IPS 软件包。IPS 软件可与网络系统信息库进行交互,并使用 ZFS 文件系统。在 OpenSolaris OS 中,可以使用 pkgsend(1) 命令将现有的 SVR4 软件包发布到 IPS 系统信息库。

下表对 SVR4 包管理系统和 IPS 包管理系统所使用的命令进行了比较。有关 IPS 的详细信息,请参见 Getting Started With the Image Packaging System(映像包管理系统入门)。

表 1–1 打包任务:IPS 和 SVR4

任务 

IPS 命令 

SVR4 命令 

安装新软件包 

pkg install

pkgadd -a

显示有关软件包状态的信息 

pkg list

pkginfo

验证软件包安装是否正确 

pkg verify

pkgchk -v

显示有关软件包的信息 

pkg info

pkginfo -l

列出软件包的内容 

pkg contents

pkgchk -l

卸载软件包 

pkg uninstall

pkgrm

打包命令、文件和脚本

本节介绍在处理软件包时可能会用到的命令、文件和脚本。手册页中会对这些内容进行介绍,本书也将对这些内容进行详细介绍,以及其执行的特定任务。

下表显示的命令可帮助您生成、验证、安装软件包并获取有关软件包的信息。

表 1–2 打包命令

任务 

命令/手册页 

说明 

更多信息 

创建软件包 

pkgproto(1)

生成 prototype 文件以作为 pkgmk 命令的输入

示例-使用 pkgproto 命令创建 prototype 文件

 

pkgmk(1)

创建可安装的软件包 

生成软件包

 

安装、删除和转换软件包 

pkgadd(1M)

将软件包安装到系统中 

安装软件包

 

pkgask(1M)

将答复存储到 request 脚本

request 脚本的设计规则

 

 

pkgtrans(1)

将软件包复制到分发介质 

将软件包转换为分发介质

 

 

pkgrm(1M)

从系统中删除软件包 

删除软件包

 

获取有关软件包的信息 

pkgchk(1M)

验证软件包的完整性 

验证软件包的完整性

 

pkginfo(1)

显示软件包信息 

pkginfo 命令

 

 

pkgparam(1)

显示软件包参数值 

pkgparam 命令

 

修改已安装的软件包 

installf(1M)

将新软件包对象并入到已安装的软件包中 

过程脚本的设计规则第 5 章

 

removef(1M)

从已安装的软件包中删除软件包对象 

过程脚本的设计规则

 

下表显示的信息文件可帮助您生成软件包。

表 1–3 软件包信息文件

文件 

说明 

更多信息 

admin(4)

软件包安装缺省文件 

缺省管理文件

compver(4)

软件包兼容性文件 

定义软件包相关性

copyright(4)

软件包版权信息文件 

编写版权信息

depend(4)

软件包相关性文件 

定义软件包相关性

pkginfo(4)

软件包特征文件 

创建 pkginfo 文件

pkgmap(4)

软件包内容说明文件 

pkgmap 文件

prototype(4)

软件包信息文件 

创建 prototype 文件

space(4)

软件包磁盘空间要求文件 

在目标系统上保留额外空间

下表介绍了一些可选安装脚本,您可以编写这样的脚本以影响是否以及如何安装软件包。

表 1–4 软件包安装脚本

脚本 

说明 

更多信息 

request

请求来自安装人员的信息 

编写 request 脚本

checkinstall

收集文件系统数据 

使用 checkinstall 脚本收集文件系统数据

preinstall

在安装类之前执行任何自定义安装要求 

编写过程脚本

postinstall

在安装所有卷之后执行任何自定义安装要求 

编写过程脚本

preremove

在删除类之前执行任何自定义删除要求 

编写过程脚本

postremove

在删除所有类之后执行任何自定义删除要求 

编写过程脚本

类操作 

对特定对象组执行一系列操作。 

编写类操作脚本