应用程序包开发者指南

第 4 章 验证和转换软件包

本章介绍如何验证软件包的完整性以及将其转换为分发介质(例如软盘或 CD-ROM)。

以下是本章中概述信息的列表:

验证和转换软件包(任务图)

下表介绍了为了验证软件包的完整性以及将其转换为分发介质所应遵循的步骤。

表 4–1 验证和转换软件包(任务图)

任务 

说明 

参考 

1. 生成软件包 

在磁盘上生成软件包。 

第 2 章

2. 安装软件包 

通过安装软件包并确保没有安装错误来测试软件包。 

如何在独立系统或服务器上安装软件包

3. 验证软件包的完整性 

使用 pkgchk 命令验证软件包的完整性。 

如何验证软件包的完整性

4. 获取其他软件包信息 

可选。使用 pkginfo pkgparam 命令执行特定于软件包的验证。

显示有关已安装的软件包的附加信息

5. 删除已安装的软件包 

使用 pkgrm 命令从系统中删除已安装的软件包。

如何删除软件包

6. 将软件包转换为分发介质 

使用 pkgtrans 命令将软件包(以软件包格式)转换为分发介质。

如何将软件包转换为分发介质

安装软件包

软件包使用 pkgadd 命令进行安装。此命令从分发介质或目录转换软件包的内容并将其安装到系统上。

本节提供有关安装软件包以便验证安装正确的基本安装说明。

安装软件数据库

系统中安装的所有软件包的信息都保存在安装软件数据库中。对于软件包中的每个对象都有一个条目,其中包含组件名、组件的驻留位置及其类型等信息。这类条目包含以下信息:组件所属软件包的记录;可能引用该组件的其他软件包;以及路径名、组件的驻留位置和组件类型等信息。条目由 pkgadd pkgrm 命令自动添加和删除。您可以使用 pkgchkpkginfo 命令来查看数据库中的信息。

与每个软件包组件相关联的信息有两种。属性信息描述了组件本身。例如,组件的访问权限、所有者 ID 和组 ID 是属性信息。内容信息描述组件的内容,例如文件大小和上次修改时间。

安装软件数据库可跟踪软件包的状态。软件包或者是完全安装(它已经成功完成安装过程),或者是部分安装(它没有成功完成安装过程)。

当软件包部分安装时,在安装终止之前可能已安装软件包的某些部分;因此,部分软件包被安装并记录在数据库中,而部分软件包则没有安装。当您重新安装软件包时,系统将提示您从上次安装停止的位置开始安装,因为 pkgadd 命令可以访问数据库并检测哪些部分已经安装。您还可以使用 pkgrm 命令,根据安装软件数据库中的信息删除已经安装的部分。

pkgadd 命令交互

如果 pkgadd 命令遇到问题,它会首先检查安装管理文件中的说明。(有关更多信息,请参见 admin(4)。)如果不存在任何说明,或者如果管理文件中的相关参数被设置为 askpkgadd 将显示一条消息,描述该问题并提示用户进行答复。该提示通常是 Do you want to continue with this installation?您应该回答 yesnoquit

如果您已指定多个软件包,回答 no 将停止正在进行的软件包安装,但 pkgadd 会继续安装其他软件包。quit 指示 pkgadd 应该停止所有软件包的安装。

在同构环境中的独立系统或服务器上安装软件包

本节介绍如何在同构环境中的独立系统或服务器系统上安装软件包。

Procedure如何在独立系统或服务器上安装软件包

  1. 生成软件包。

    如果需要,请参见生成软件包

  2. 以超级用户身份登录系统。

  3. 向系统中添加软件包。


    # pkgadd -d device-name [pkg-abbrev...]

    -d device-name

    指定软件包的位置。请注意,device-name 可以是完整的目录路径名或者磁带、软盘或可移除磁盘的标识符。

    pkg-abbrev

    要添加的一个或多个软件包的名称(以空格分隔)。如果省略, pkgadd 将安装所有可用的软件包。


示例 4–1 在独立系统和服务器上安装软件包

要从名为 /dev/rmt/0 的磁带设备安装名为 pkgA 的软件包,您需要输入以下命令:


# pkgadd -d /dev/rmt/0 pkgA

您还可以同时安装多个软件包(只要您使用空格分隔软件包名称),如下所示:


# pkgadd -d /dev/rmt/0 pkgA pkgB pkgC

如果您不指定软件包所驻留的设备,该命令将检查缺省的假脱机目录 (/var/spool/pkg)。如果软件包不在缺省的假脱机目录中,安装将失败。


另请参见

如果您已准备好执行下一个任务,请参见如何验证软件包的完整性

验证软件包的完整性

使用 pkgchk 命令可以检查软件包的完整性、它们是已经安装在系统上还是处于软件包格式(准备使用 pkgadd 命令安装)。它确认软件包结构或已安装的文件和目录,或者显示有关软件包对象的信息。pkgchk 命令可以列出或检查以下内容:

有关此命令的更多信息,请参阅 pkgchk(1M)

pkgchk 命令执行两种检查。它检查文件属性(文件的权限和拥有权以及块或字符特殊设备的主/从设备号)和文件内容(大小、校验和及修改日期)。缺省情况下,该命令同时检查文件属性和文件内容。

pkgchk 命令还将已安装的软件包的文件属性和内容与安装软件数据库进行比较。与软件包有关的条目自安装以来可能已经更改;例如,另一个软件包可能更改了软件包组件。数据库会反映该更改。

Procedure如何验证软件包的完整性

  1. 安装软件包。

    如果需要,请参见如何在独立系统或服务器上安装软件包

  2. 验证软件包的完整性。


    # pkgchk  [-v] [-R root-path] [pkg-abbrev...]

    -v

    在处理文件的过程中列出文件。 

    -R root-path

    指定客户机系统的根文件系统的位置。 

    pkg-abbrev

    要检查的一个或多个软件包的名称(以空格分隔)。如果省略,pkgchk 将检查所有可用的软件包。


示例 4–2 验证软件包的完整性

本示例演示应该用于验证已安装软件包的完整性的命令。


$ pkgchk pkg-abbrev
$

如果有错误,pkgchk 命令将列出这些错误。否则,它不会列出任何内容并且返回退出代码 0。如果您不提供软件包缩写,它将检查系统中的所有软件包。

此外,您还可以使用 -v 选项,该选项将在没有发生错误时列出软件包中文件的列表。例如:


$ pkgchk -v SUNWcadap
/opt/SUNWcadap
/opt/SUNWcadap/demo
/opt/SUNWcadap/demo/file1
/opt/SUNWcadap/lib
/opt/SUNWcadap/lib/file2
/opt/SUNWcadap/man
/opt/SUNWcadap/man/man1
/opt/SUNWcadap/man/man1/file3.1
/opt/SUNWcadap/man/man1/file4.1
/opt/SUNWcadap/man/windex
/opt/SUNWcadap/srcfiles
/opt/SUNWcadap/srcfiles/file5
/opt/SUNWcadap/srcfiles/file6
$

如果您需要验证客户机系统的根文件系统上安装的软件包,请使用以下命令:


$ pkgchk -v -R root-path pkg-abbrev

另请参见

如果您已准备好执行下一个任务,请参见如何使用 pkginfo 命令获取信息

显示有关已安装的软件包的附加信息

可以使用其他两个命令来显示有关已安装的软件包的信息:

pkgparam 命令

pkgparam 命令可以显示与您在命令行上指定的参数相关联的值。这些值是从特定软件包的 pkginfo 文件或者从您指定的文件中获取的。每行显示一个参数值。您可以仅显示这些值,也可以同时显示参数及其值。

Procedure如何使用 pkgparam 命令获取信息

  1. 安装软件包。

    如果需要,请参见如何在独立系统或服务器上安装软件包

  2. 显示有关软件包的附加信息。


    # pkgparam [-v] pkg-abbrev [param...]

    -v

    显示参数的名称及值。 

    pkg-abbrev

    特定软件包的名称。 

    param

    指定要显示其值的一个或多个参数。 


示例 4–3 使用 pkgparam 命令获取信息

例如,要仅显示值,请使用以下命令。


$ pkgparam SUNWcadap
none
/opt
US/Mountain
/sbin:/usr/sbin:/usr/bin:/usr/sadm/install/bin
/usr/sadm/sysadm
SUNWcadap
Chip designers need CAD application software to design abc
chips.  Runs only on xyz hardware and is installed in the usr
partition.
system
release 1.0
SPARC
venus990706083849
SUNWcadap
/var/sadm/pkg/SUNWcadap/save
Jul 7 1999 09:58
$

要显示参数及其值,请使用以下命令。


$ pkgparam -v SUNWcadap
pkgparam -v SUNWcadap
CLASSES='none'
BASEDIR='/opt'
TZ='US/Mountain'
PATH='/sbin:/usr/sbin:/usr/bin:/usr/sadm/install/bin'
OAMBASE='/usr/sadm/sysadm'
PKG='SUNWcadap'
NAME='Chip designers need CAD application software to design abc chips.  
Runs only on xyz hardware and is installed in the usr partition.'
CATEGORY='system'
VERSION='release 1.0'
ARCH='SPARC'
PSTAMP='venus990706083849'
PKGINST='SUNWcadap'
PKGSAV='/var/sadm/pkg/SUNWcadap/save'
INSTDATE='Jul 7 1999 09:58'
$

或者,如果您想要显示特定参数的值,请使用以下格式:


$ pkgparam SUNWcadap BASEDIR
/opt
$

有关更多信息,请参阅 pkgparam(1)


另请参见

如果您已准备好执行下一个任务,请参见如何删除软件包

pkginfo 命令

您可以使用 pkginfo 命令显示有关已安装的软件包的信息。此命令具有多个选项,这些选项使您能够定制显示的格式和内容。

您可以请求有关任意数量的软件包实例的信息。

缺省 pkginfo 显示

在不带任何选项的情况下执行 pkginfo 命令时,该命令将显示已经完整安装到系统中的所有软件包的类别、软件包实例和软件包名称。显示按照类别组织,如以下示例所示。


$ pkginfo
.
.
.
system      SUNWinst       Install Software
system      SUNWipc        Interprocess Communications
system      SUNWisolc      XSH4 conversion for ISO Latin character sets
application SUNWkcspf      KCMS Optional Profiles
application SUNWkcspg      KCMS Programmers Environment
application SUNWkcsrt      KCMS Runtime Environment
.
.
.
$

定制 pkginfo 显示的格式

您可以按以下三种格式之一获得 pkginfo 显示: 短格式、简明格式和长格式。

短格式是缺省格式。如缺省 pkginfo 显示所示,该格式仅显示类别、软件包缩写和软件包全名。

简明格式显示软件包缩写、软件包名称、软件包体系结构(如果有)和软件包版本(如果有)。使用 -x 选项可以请求简明格式,如下一个示例所示。


$ pkginfo -x
.
.
.
SUNWipc         Interprocess Communications
                (sparc) 11.8.0,REV=1999.08.20.12.37
SUNWisolc       XSH4 conversion for ISO Latin character sets
                (sparc) 1.0,REV=1999.07.10.10.10
SUNWkcspf       KCMS Optional Profiles
                (sparc) 1.1.2,REV=1.5
SUNWkcspg       KCMS Programmers Environment
                (sparc) 1.1.2,REV=1.5
.
.
.
$

使用 -l 选项可生成长格式显示,其中包括有关软件包的所有可用信息,如下面的示例所示。


$ pkginfo -l SUNWcadap
   PKGINST:  SUNWcadap
      NAME:  Chip designers need CAD application software to
design abc chips.  Runs only on xyz hardware and is installed
in the usr partition.
  CATEGORY:  system
      ARCH:  SPARC
   VERSION:  release 1.0
   BASEDIR:  /opt
    PSTAMP:  system980706083849
  INSTDATE:  Jul 7 1999 09:58
    STATUS:  completely installed
     FILES:     13 installed pathnames
                 6 directories
                 3 executables
              3121 blocks used (approx)
$

pkginfo 长格式的参数说明

下表介绍了可以为每个软件包显示的软件包参数。只有为参数赋值之后,才会显示参数及其值。

表 4–2 软件包参数

参数 

说明 

ARCH

此软件包支持的体系结构。 

BASEDIR

软件包所驻留的基目录(如果该软件包是可重定位的则显示)。 

CATEGORY

此软件包所属的一个或多个软件类别(例如,systemapplication)。

CLASSES

为软件包定义的类的列表。该列表的顺序确定类的安装顺序。首先列出的类将首先安装(逐个介质进行安装)。此参数可能由 request 脚本修改。  

DESC

描述软件包的文本。 

EMAIL

用户查询所使用的电子邮件地址。 

HOTLINE

有关如何获得关于此软件包的热线帮助的信息。 

INTONLY

当设置为任何非 NULL 值时,指示仅应该以交互方式安装软件包, 

ISTATES

允许软件包安装具有的运行状态的列表(例如, S s 1)。

MAXINST

一台计算机上同时应该允许存在的软件包实例的最大数目。缺省情况下,仅允许存在一个软件包实例。 

NAME

软件包名称,通常是描述软件包缩写的文本。 

ORDER

一个类列表,定义将这些类放在介质上的顺序。由 pkgmk 命令在创建软件包时使用。此参数中未定义的类将使用标准排序过程放置在介质上。

PKGINST

所安装的软件包的缩写。 

PSTAMP

此软件包的生产标记。 

RSTATES

允许软件包删除操作具有的运行状态的列表(例如,S s 1)。

ULIMIT

如果设置,此参数将作为参数传递给 ulimit 命令,该命令在安装期间设置最大文件大小。这仅适用于过程脚本所创建的文件。

VENDOR

提供软件包的供应商的名称。 

VERSION

此软件包的版本。  

VSTOCK

供应商提供的物料编号。 

有关 pkginfo 命令的详细信息,请参阅 pkginfo(1) 手册页。

Procedure如何使用 pkginfo 命令获取信息

  1. 安装软件包。

    如果需要,请参见如何在独立系统或服务器上安装软件包

  2. 显示有关软件包的附加信息。


    # pkginfo [-x | -l] [pkg-abbrev]

    -x

    以简明格式显示软件包信息。 

    -l

    以长格式显示软件包信息。 

    pkg-abbrev

    特定软件包的名称。如果省略,pkginfo 命令将以缺省格式显示有关所有已安装软件包的信息。

下一步操作

如果您已准备好执行下一个任务,请参见如何删除软件包

删除软件包

由于 pkgrm 命令更新软件产品数据库中的信息,因此在删除软件包时一定要使用 pkgrm 命令,即使您可能倾向于使用 rm 命令。例如,您可能会使用 rm 命令删除二进制可执行文件,但这与使用 pkgrm 删除包括该二进制可执行文件的软件包不同。如果使用 rm 命令来删除软件包的文件,则会破坏软件产品数据库。(如果您确实只想删除一个文件,可以使用 removef 命令,该命令将正确地更新软件产品数据库。)

Procedure如何删除软件包

  1. 以超级用户身份登录系统。

  2. 删除已安装的软件包。


    # pkgrm pkg-abbrev ...

    pkg-abbrev

    一个或多个软件包的名称(以空格分隔)。如果省略, pkgrm 将删除所有可用的软件包。

  3. 使用 pkginfo 命令验证软件包已成功删除。


    $ pkginfo | egrep pkg-abbrev
    

    如果安装了 pkg-abbrevpkginfo 命令将返回有关它的一行信息。否则,pkginfo 返回系统提示符。

将软件包转换为分发介质

pkgtrans 命令移动软件包并且执行软件包格式转换。可以使用 pkgtrans 命令为可安装的软件包执行下列转换:

Procedure如何将软件包转换为分发介质

  1. 生成您的软件包,同时创建一个目录格式软件包(如果您尚未这样做)。

    有关更多信息,请参见如何生成软件包

  2. 安装该软件包以验证其安装正确。

    如果需要,请参见如何在独立系统或服务器上安装软件包

  3. 验证软件包的完整性。

    如果需要,请参见如何验证软件包的完整性如何使用 pkginfo 命令获取信息如何使用 pkgparam 命令获取信息

  4. 从系统中删除已安装的软件包。

    如果需要,请参见如何删除软件包

  5. 将软件包(以软件包格式)转换为分发介质。

    要执行基本转换,请执行以下命令:


    $ pkgtrans device1 device2 [pkg-abbrev...]

    device1

    软件包当前驻留的设备的名称。 

    device2

    要将经过转换的软件包写入到的设备的名称。 

    [pkg-abbrev]

    一个或多个软件包缩写。 

    如果没有指定软件包名称,系统会将驻留在 device1 中的所有软件包转换并写入到 device2


    注 –

    如果有多个软件包实例驻留在 device1 中,您必须对软件包使用实例标识符。有关软件包标识符的说明,请参见定义软件包实例。当要转换的软件包的实例已经存在于 device2 上时,pkgtrans 命令不执行转换。如果实例已经存在,您可以使用 -o 选项告诉 pkgtrans 命令覆写目标设备上现有的所有实例,并可以使用 -n 选项告诉该命令创建一个新实例。请注意,当 device2 支持数据流格式时,此检查不适用。


下一步操作

至此,您已经完成设计、生成、验证和转换软件包所需的步骤。如果您对某些案例研究感兴趣,请参见第 5 章。如果您对先进的软件包设计理念感兴趣,请参见第 6 章