系统管理指南:基本管理

使用软件包命令管理软件包

下列过程介绍如何使用软件包命令管理软件包。

Procedure如何添加软件包 (pkgadd)

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见 《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 删除与要添加的软件包同名的已安装软件包。

    该步骤可确保系统对于已添加和删除的软件保留正确的记录。有时,您可能希望在系统上维护同一应用程序的多个版本。有关维护多个软件副本的策略,请参见删除软件包的原则 (pkgrm)。有关任务的信息,请参见如何删除软件包 (pkgrm)

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


    # pkgadd -a admin-file 
    -d device-name pkgid ...
    -a admin-file

    (可选)指定在安装期间应当由 pkgadd 命令检查的管理文件。有关使用管理文件的详细信息,请参见使用管理文件

    -d device-name

    指定软件包的绝对路径。device-name 可以是设备、目录或假脱机目录的路径。如果未指定软件包所在的路径, pkgadd 命令将检查缺省的假脱机目录 (/var/spool/pkg )。如果软件包不在缺省的假脱机目录中,软件包的安装将失败。

    pkgid

    (可选)一个或多个要安装的软件包的名称,用空格分隔。如果省略,pkgadd 命令会从指定的设备、目录或假脱机目录安装所有可用的软件包。

    如果 pkgadd 命令在软件包安装期间遇到问题,则会在该提示符后面显示一则与该问题有关的消息:


    Do you want to continue with this installation?

    可以回答 yesnoquit。如果指定了多个软件包,请键入 no 停止安装正在安装的软件包。pkgadd 命令会继续安装其他软件包。键入 quit 可停止安装。

  4. 检验软件包是否已成功安装。


    # pkgchk -v pkgid
    

    如果未出现错误,则会返回已安装文件的列表。否则,pkgchk 命令将报告错误。


示例 22–4 从已挂载 CD 添加软件包

以下示例说明如何从已挂载的 Oracle Solaris 10 CD 安装 SUNWpl5u 软件包。还说明如何检验软件包文件是否已正确安装。


# pkgadd -d /cdrom/cdrom0/Solaris_10/Product SUNWpl5u

	.
	.
	.
Installation of <SUNWpl5u> was successful.
# pkgchk -v SUNWpl5u
/usr
/usr/bin
/usr/bin/perl
/usr/perl5
/usr/perl5/5.8.4
.
.
.

此示例说明当运行的是 Solaris 10 10/08 发行版或更高版本时所要使用的路径。


# pkgadd -d /cdrom/cdrom0/s0/Solaris_10/Product SUNWpl5u

	.
	.
	.
Installation of <SUNWpl5u> was successful.
# pkgchk -v SUNWpl5u
/usr
/usr/bin
/usr/bin/perl
/usr/perl5
/usr/perl5/5.8.4
.
.
.


示例 22–5 从远程软件包服务器安装软件包

如果要安装的软件包位于远程系统上,则可以(以软件包格式)手动挂载包含该软件包的目录,并在本地系统上安装软件包。

以下示例说明如何从远程系统安装软件包。在本示例中,假设名为 package-server 的远程系统的 /latest-packages 目录中有软件包。mount 命令用来在 /mnt 上以本地方式挂载软件包。pkgadd 命令用来安装 SUNWpl5u 软件包。


# mount -F nfs -o ro package-server:/latest-packages /mnt
# pkgadd -d /mnt SUNWpl5u
	.
	.
	.
Installation of <SUNWpl5u> was successful.

如果站点上运行的是自动安装程序,则无需手动挂载远程软件包服务器,而会使用自动安装程序路径(在本示例中为 /net/package-server/latest-packages)作为 -d 选项的参数。


# pkgadd -d /net/package-server/latest-packages SUNWpl5u
	.
	.
	.
Installation of <SUNWpl5u> was successful.


示例 22–6 通过指定管理文件从远程软件包服务器安装软件包

以下示例与上面的示例相似,区别在于本示例使用 -a 选项并指定了一个名为 noask-pkgadd 的管理文件,在添加软件包时避免用户交互 (pkgadd)中对此进行了说明。在本示例中,假设 noask-pkgadd 管理文件位于缺省位置 (/var/sadm/install/admin)。


# pkgadd -a noask-pkgadd -d /net/package-server/latest-packages SUNWpl5u

	.
	.
	.
Installation of <SUNWpl5u> was successful.


示例 22–7 从 HTTP URL 安装软件包

以下示例说明如何使用 HTTP URL 作为设备名称来安装软件包。该 URL 必须指向流格式的软件包。


# pkgadd -d http://install/xf86-4.3.0-video.pkg

## Downloading...
..............25%..............50%..............75%..............100%
## Download Complete


The following packages are available:
  1  SUNWxf86r     XFree86 Driver Porting Kit (Root)
                   (i386) 4.3.0,REV=0.2003.02.28
  2  SUNWxf86u     XFree86 Driver Porting Kit (User)
                   (i386) 4.3.0,REV=0.2003.02.28

.
.
.

将软件包添加到假脱机目录中

为方便起见,可以将经常安装的软件包复制到假脱机目录中。如果将软件包复制到缺省的假脱机目录 (/var/spool/pkg) 中,那么,在使用 pkgadd 命令时无需指定软件包的源位置(-d device-name 参数)。缺省情况下,pkgadd 命令会检查在命令行上指定的软件包是否存在于 /var/spool/pkg 目录中。请注意,将软件包复制到假脱机目录中不同于在系统上安装软件包。

Procedure如何将软件包添加到假脱机目录中 (pkgadd)

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见 《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 删除与要添加的软件包同名的任何已假脱机的软件包。

    有关删除假脱机软件包的信息,请参见 示例 22–19

  3. 将软件包添加到假脱机目录中。


    # pkgadd -d device-name 
    -s spooldir pkgid ...
    -d device-name

    指定软件包的绝对路径。device-name 可以是设备、目录或假脱机目录的路径。

    -s spooldir

    指定该软件包进行假脱机的假脱机目录名称。必须指定 spooldir

    pkgid

    (可选)要添加到假脱机目录中的一个或多个软件包的名称,用空格分隔。如果省略,pkgadd 命令将复制所有可用的软件包。

  4. 检验软件包是否已成功复制到假脱机目录中。


    $ pkginfo -d spooldir
    | grep pkgid
    

    如果 pkgid 已正确复制,pkginfo 命令将返回一行与 pkgid 相关的信息。否则,pkginfo 命令将返回系统提示符。


示例 22–8 从已挂载 CD 设置假脱机目录

以下示例说明如何将 SUNWman 软件包从基于 SPARC 的已挂载 Oracle Solaris 10 CD 传送到缺省的假脱机目录 (/var/spool/pkg)。


# pkgadd -d /cdrom/cdrom0/Solaris_10/Product -s /var/spool/pkg SUNWman

Transferring <SUNWman> package instance


示例 22–9 从远程软件包服务器设置假脱机目录

如果要复制的软件包位于远程系统上,则可以(以软件包格式)手动挂载包含该软件包的目录,并将它们复制到本地的假脱机目录中。

以下示例说明了此方案中使用的命令。在本示例中,假设名为 package-server 的远程系统的 /latest-packages 目录中有软件包。mount 命令用来在 /mnt 上以本地方式挂载软件包目录。pkgadd 命令用来将 SUNWpl5p 软件包从 /mnt 复制到缺省的假脱机目录 (/var/spool/pkg)。


# mount -F nfs -o ro package-server:/latest-packages /mnt
# pkgadd -d /mnt -s /var/spool/pkg SUNWpl5p
Transferring <SUNWpl5p> package instance

如果站点上运行的是自动安装程序,则不必手动挂载远程软件包服务器,而会使用自动安装程序路径(在本示例中为 /net/package-server/latest-packages)作为 -d 选项的参数。


# pkgadd -d /net/package-server/latest-packages -s /var/spool/pkg SUNWpl5p

Transferring <SUNWpl5p> package instance


示例 22–10 从缺省的假脱机目录安装软件包

以下示例说明如何从缺省的假脱机目录安装 SUNWpl5p 软件包。如果不使用任何选项,pkgadd 命令将在 /var/spool/pkg 目录中搜索已命名的软件包。


# pkgadd SUNWpl5p
	.
	.
	.
Installation of <SUNWpl5p> was successful.

Procedure如何列出有关所有已安装软件包的信息 (pkginfo)

  1. 可以使用 pkginfo 命令列出有关已安装软件包的信息。


    $ pkginfo
    

示例 22–11 列出已安装的软件包

以下示例说明如何列出本地系统上安装的所有软件包,无论本地系统是独立系统还是服务器。输出中显示了主类别、软件包名称和软件包的说明。


$ pkginfo
system      SUNWaccr       System Accounting, (Root)
system      SUNWaccu       System Accounting, (Usr)
system      SUNWadmap      System administration applications
system      SUNWadmc       System administration core libraries
.
.
.


示例 22–12 显示有关软件包的详细信息

以下示例说明如何通过指定长格式列出系统上已安装的所有软件包,长格式中包括有关指定软件包的所有可用信息。


$ pkginfo -l SUNWcar
   PKGINST:  SUNWcar
      NAME:  Core Architecture, (Root)
  CATEGORY:  system
      ARCH:  sparc.sun4u
   VERSION:  11.9.0,REV=2002.04.06.15.27
   BASEDIR:  /
    VENDOR:  Sun Microsystems, Inc.
      DESC:  core software for a specific hardware platform group
    PSTAMP:  leo20031003183400
  INSTDATE:  Feb 20 2004 16:57
   HOTLINE:  Please contact your local service provider
    STATUS:  completely installed
     FILES:      114 installed pathnames
                  36 shared pathnames
                  40 directories
                  57 executables
               21469 blocks used (approx)

Procedure如何检查已安装软件包的完整性 (pkgchk)

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见 《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 检查已安装软件包的状态。

    • 要检查文件的属性和内容,请键入以下命令:


      # pkgchk -a| -c -v pkid ...
      
    • 要指定假脱机目录的绝对路径,请键入以下命令:


      # pkgchk -d spooldir pkgid ...
    -a

    指定仅审计文件属性(权限),而不是像缺省情况下那样既审计文件属性又审计文件内容。

    -c

    指定仅审计文件内容,而不是像缺省情况下那样既审计文件内容又审计文件属性。

    -v

    指定详细模式,该模式会显示正在处理的文件的名称。

    -d spooldir

    指定假脱机目录的绝对路径。

    pkgid

    (可选)一个或多个软件包的名称,用空格分隔。如果未指定 pkgid,则会检查系统上已安装的所有软件包。


示例 22–13 检查已安装软件包的内容

以下示例说明如何检查软件包的内容。


# pkgchk -c SUNWbash

如果未出现错误,将返回系统提示符。否则,pkgck 命令将报告错误。



示例 22–14 检查已安装软件包的文件属性

以下示例说明如何检查软件包的文件属性。


# pkgchk -a SUNWbash

如果未出现错误,将返回系统提示符。否则,pkgck 命令将报告错误。



示例 22–15 检查已在假脱机目录中安装的软件包

以下示例说明如何检查已复制到假脱机目录 (/export/install/packages) 中的软件包。


# pkgchk -d /export/install/packages
## checking spooled package <SUNWadmap>
## checking spooled package <SUNWadmfw>
## checking spooled package <SUNWadmc>
## checking spooled package <SUNWsadml>

对于假脱机软件包的检查有一定的限制,因为并非所有的信息都可以在未安装软件包的情况下进行审计。


Procedure如何检查已安装对象的完整性 ( pkgchk -p, pkgchk -P)

以下过程介绍如何使用 pkgchk 命令检查已安装对象的完整性。使用新的 -P 选项,可以指定部分路径。添加此选项有助于将文件映射到软件包。将该选项与 -l 选项一起使用,可以列出包含部分路径的所有文件的信息。使用 -p 选项,可以通过指定全路径来检查已安装对象的完整性。有关更多信息,请参见 pkgchk(1M) 手册页。

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见 《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 检查已安装对象的完整性。

    • 要通过指定一个或多个全路径名来检验已安装对象的完整性,请键入以下命令:


      # pkgchk -lp path-name
      
    • 要使用部分路径名(可以是一个或多个)来检验已安装对象的完整性,请键入以下命令:


      # pkgchk -lP  partial-path-name
      
    -p path

    仅检查所列出的一个或多个路径名是否正确。路径可以是一个或多个用逗号分隔的路径名。指定仅审计文件属性(权限),而不是像缺省情况下那样既审计文件属性又审计文件内容。

    -P partial-path

    仅检查所列出的一个或多个部分路径名是否正确。部分路径可以是一个或多个用逗号分隔的部分路径名。它可匹配任何包含特定字符串(即部分路径中所包含的字符串)的路径名。指定仅审计文件内容,而不是像缺省情况下那样既审计文件内容又审计文件属性。

    -l

    列出有关构成软件包的选定文件的信息。此选项与 -a-c-f-g-v 选项不兼容。指定详细模式,该模式会显示正在处理的文件的名称。


示例 22–16 通过指定全路径名检查已安装对象的完整性

以下示例说明如何使用 pkgchk -lp 命令,通过指定全路径名来检查文件系统上对象的内容/属性。-l 选项列出了有关构成软件包的选定文件的信息。


# pkgchk -lp /usr/sbin/pkgadd
Pathname: /usr/sbin/pkgadd
Type: regular file
Expected mode: 0555
Expected owner: root
Expected group: sys
Expected file size (bytes): 867152
Expected sum(1) of contents: 45580
Expected last modification: Jul 02 02:20:34 2004
Referenced by the following packages:
        SUNWpkgcmdsu   
Current status: installed


示例 22–17 通过指定部分路径名检查已安装对象的完整性

以下示例说明如何使用 pkgchk -lP 命令,通过指定部分路径名(如文件名或目录名)来检查文件系统上对象的内容/属性。-l 选项列出了有关构成软件包的选定文件的信息。


# pkgchk -lP /sbin/pkgadd
Pathname: /usr/sbin/pkgadd
Type: regular file
Expected mode: 0555
Expected owner: root
Expected group: sys
Expected file size (bytes): 867152
Expected sum(1) of contents: 45580
Expected last modification: Jul 02 02:20:34 2004
Referenced by the following packages:
        SUNWpkgcmdsu   
Current status: installed

Pathname: /usr/sbin/pkgask
Type: linked file
Source of link: ../../usr/sbin/pkgadd
Referenced by the following packages:
        SUNWpkgcmdsu   
Current status: installed

删除软件包

要删除或卸载软件包,请使用添加或安装软件包时所使用的相关工具。例如,如果软件是使用 Oracle Solaris 安装程序 GUI 安装的,请使用 Oracle Solaris 安装程序 GUI 卸载软件。


注意 – 注意 –

请勿使用 rm 命令删除软件包。否则将导致用来跟踪系统上所有已安装软件包的数据库不准确。


Procedure如何删除软件包 (pkgrm)

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见 《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

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


    # pkgrm pkgid ...

    pkgid 标识一个或多个要删除的软件包的名称,用空格分隔。如果省略,pkgrm 命令将删除所有可用的软件包。


示例 22–18 删除软件包

以下示例说明如何删除软件包。


# pkgrm SUNWctu

The following package is currently installed:
   SUNWctu         Netra ct usr/platform links (64-bit)
                   (sparc.sun4u) 11.9.0,REV=2001.07.24.15.53

Do you want to remove this package? y

## Removing installed package instance <SUNWctu>
## Verifying package dependencies.
## Processing package information.
## Removing pathnames in class <none>
.
.
.


示例 22–19 删除假脱机软件包

以下示例说明如何删除假脱机软件包。


# pkgrm -s /export/pkg SUNWaudh
The following package is currently spooled:
   SUNWaudh        Audio Header Files
                   (sparc) 11.10.0,REV=2003.08.08.00.03
Do you want to remove this package? y
Removing spooled package instance <SUNWaudh>