本章介绍如何使用 Oracle Solaris 软件包命令添加、检验和删除软件包。
有关与执行这些任务相关的过程的信息,请参见以下任务图:
以下任务图说明了可使用已签名的软件包命令执行的软件管理任务。
使用 pkgadd 命令添加和删除已签名的软件包的过程包括使用 keytool 实用程序获取并应用可信证书。本章未详细描述在此 Oracle Solaris 发行版中使用 keytool 实用程序的相关过程。有关使用 keytool 实用程序导入和导出可信证书的完整说明,请转至 http://download.oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/tooldocs/solaris/keytool.html。
任务 |
说明 |
参考 |
---|---|---|
显示一个或多个证书的详细信息。 |
可以使用 pkgadm listcert 命令显示证书的详细信息。 | |
删除证书。 |
可以使用 pkgadm removecert 命令删除证书。 | |
设置代理服务器。 |
此过程用于在具有代理的防火墙之后设置的系统。 | |
添加已签名的软件包。 |
在导入根证书之后,可以使用 pkgadd 命令添加已签名的软件包。 |
以下过程介绍如何使用 pkgadd 命令添加和删除已签名的软件包。
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见 《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
显示软件包密钥库的内容。
# pkgadm listcert -p passarg |
以下示例说明如何显示存储在本地的证书的详细信息。
# pkgadm listcert -P pass:test123 Keystore Alias: /C=US/O=VeriSign, Inc./OU=Class 2 Public Primary Certification Authority - G2/O Common Name: /C=US/O=VeriSign, Inc./OU=Class 2 Public Primary Certification Authority - G2/O Certificate Type: Trusted Certificate Issuer Common Name: /C=US/O=VeriSign, Inc./OU=Class 2 Public Primary Certification Authority - G2/O Validity Dates: <May 18 00:00:00 1998 GMT> - <Aug 1 23:59:59 2028 GMT> MD5 Fingerprint: 2D:BB:E5:25:D3:D1:65:82:3A:B7:0E:FA:E6:EB:E2:E1 SHA1 Fingerprint: B3:EA:C4:47:76:C9:C8:1C:EA:F2:9D:95:B6:CC:A0:08:1B:67:EC:9D |
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见 《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
从软件包密钥库中删除受信任证书。
# pkgadm removecert -n "certfile " |
removecert -n “certfile” 选项指定用户证书/密钥对的别名或受信任证书的别名。
可使用 pkgadm listcert 命令查看证书的别名。
以下示例说明如何删除证书。
# pkgadm listcert Keystore Alias: /C=US/O=VeriSign, Inc./OU=Class 2 Public Primary Certification Authority - G2/O Common Name: /C=US/O=VeriSign, Inc./OU=Class 2 Public Primary Certification Authority - G2/O Certificate Type: Trusted Certificate Issuer Common Name: /C=US/O=VeriSign, Inc./OU=Class 2 Public Primary Certification Authority - G2/O Validity Dates: <May 18 00:00:00 1998 GMT> - <Aug 1 23:59:59 2028 GMT> MD5 Fingerprint: 2D:BB:E5:25:D3:D1:65:82:3A:B7:0E:FA:E6:EB:E2:E1 SHA1 Fingerprint: B3:EA:C4:47:76:C9:C8:1C:EA:F2:9D:95:B6:CC:A0:08:1B:67:EC:9D # pkgadm removecert -n "/C=US/O=VeriSign, Inc./OU=Class 2 Public Primary Certification Authority - G2/O" Enter Keystore Password: storepass Successfully removed Certificate(s) with alias \ </C=US/O=VeriSign, Inc./OU=Class 2 Public Primary Certification Authority - G2/O> |
如果系统位于具有代理的防火墙之后,则需要首先设置代理服务器,然后才能使用 pkgadd 命令从 HTTP 服务器添加软件包。
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见 《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
选择下列方法之一指定代理服务器:
使用 http_proxy、HTTPPROXY 或 HTTPPROXYPORT 环境变量指定代理服务器。
例如:
# setenv http_proxy http://mycache.domain:8080 |
或者指定以下内容之一:
# setenv HTTPPROXY mycache.domain # setenv HTTPPROXYPORT 8080 |
在 pkgadd 命令行上指定代理服务器。
例如:
# pkgadd -x mycache.domain:8080 -d http://myserver.com/pkg SUNWpkg |
创建包括代理服务器信息的管理文件。
例如:
# cat /tmp/admin mail= instance=unique partial=ask runlevel=ask idepend=ask rdepend=ask space=ask setuid=ask conflict=ask action=ask networktimeout=60 networkretries=3 authentication=quit keystore=/var/sadm/security basedir=default proxy=mycache.domain:8080 |
然后,使用 pkgadd -a 命令标识管理文件。例如:
# pkgadd -a /tmp/admin -d http://myserver.com/pkg SUNwpkg |
以下过程假设您已经导入了 Oracle 的根 CA 证书。有关更多信息,请转至 http://download.oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/tooldocs/solaris/keytool.html。
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见 《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
添加已签名的软件包。
# pkgadd -d /pathname/device-name |
-d device-name 选项指定从中安装软件包的设备。该设备可以是目录、磁带、软盘或可移除磁盘。该设备还可以是由 pkgtrans 命令创建的数据流。
以下示例说明如何添加存储在系统上的已签名软件包。
# # pkgadd -d /tmp/signed_pppd The following packages are available: 1 SUNWpppd Solaris PPP Device Drivers (sparc) 11.10.0,REV=2003.05.08.12.24 Select package(s) you wish to process (or 'all' to process all packages). (default: all) [?,??,q]: all Enter keystore password: ## Verifying signature for signer <User Cert 0> . . . |
以下示例说明如何使用 HTTP URL 作为设备名称安装已签名的软件包。该 URL 必须指向流格式的软件包。
# pkgadd -d http://install/signed-video.pkg ## Downloading... ..............25%..............50%..............75%..............100% ## Download Complete . . . |
以下任务图说明了可以使用已签名和未签名的软件包命令执行的软件管理任务。
任务 |
说明 |
参考 |
---|---|---|
向本地系统中添加软件包。 |
可以使用 pkgadd 命令向本地系统中添加软件包。 | |
将软件包添加到假脱机目录中。 |
可以将软件包添加到假脱机目录中,而不必实际安装软件。 | |
列出有关所有已安装软件包的信息。 |
可以使用 pkginfo 命令列出有关已安装软件包的信息。 | |
检查已安装软件包的完整性。 |
可以使用 pkgchk 命令检验已安装软件包的完整性。 | |
检查已安装对象的完整性。 |
可以使用带有 -p 和 -P 选项的 pkchk 命令检验已安装对象的完整性。-p 选项指定全路径名。新的 -P 选项指定部分路径名。 | |
删除软件包。 |
可以使用 pkgrm 命令删除不需要的软件包。 |
下列过程介绍如何使用软件包命令管理软件包。
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见 《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
删除与要添加的软件包同名的已安装软件包。
该步骤可确保系统对于已添加和删除的软件保留正确的记录。有时,您可能希望在系统上维护同一应用程序的多个版本。有关维护多个软件副本的策略,请参见删除软件包的原则 (pkgrm)。有关任务的信息,请参见如何删除软件包 (pkgrm)。
向系统中添加软件包。
# pkgadd -a admin-file -d device-name pkgid ... |
(可选)指定在安装期间应当由 pkgadd 命令检查的管理文件。有关使用管理文件的详细信息,请参见使用管理文件。
指定软件包的绝对路径。device-name 可以是设备、目录或假脱机目录的路径。如果未指定软件包所在的路径, pkgadd 命令将检查缺省的假脱机目录 (/var/spool/pkg )。如果软件包不在缺省的假脱机目录中,软件包的安装将失败。
(可选)一个或多个要安装的软件包的名称,用空格分隔。如果省略,pkgadd 命令会从指定的设备、目录或假脱机目录安装所有可用的软件包。
如果 pkgadd 命令在软件包安装期间遇到问题,则会在该提示符后面显示一则与该问题有关的消息:
Do you want to continue with this installation? |
可以回答 yes、no 或 quit。如果指定了多个软件包,请键入 no 停止安装正在安装的软件包。pkgadd 命令会继续安装其他软件包。键入 quit 可停止安装。
检验软件包是否已成功安装。
# pkgchk -v pkgid |
如果未出现错误,则会返回已安装文件的列表。否则,pkgchk 命令将报告错误。
以下示例说明如何从已挂载的 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 . . . |
如果要安装的软件包位于远程系统上,则可以(以软件包格式)手动挂载包含该软件包的目录,并在本地系统上安装软件包。
以下示例说明如何从远程系统安装软件包。在本示例中,假设名为 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. |
以下示例与上面的示例相似,区别在于本示例使用 -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. |
以下示例说明如何使用 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 目录中。请注意,将软件包复制到假脱机目录中不同于在系统上安装软件包。
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见 《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
删除与要添加的软件包同名的任何已假脱机的软件包。
有关删除假脱机软件包的信息,请参见 示例 22–19。
将软件包添加到假脱机目录中。
# pkgadd -d device-name -s spooldir pkgid ... |
指定软件包的绝对路径。device-name 可以是设备、目录或假脱机目录的路径。
指定该软件包进行假脱机的假脱机目录名称。必须指定 spooldir。
(可选)要添加到假脱机目录中的一个或多个软件包的名称,用空格分隔。如果省略,pkgadd 命令将复制所有可用的软件包。
检验软件包是否已成功复制到假脱机目录中。
$ pkginfo -d spooldir | grep pkgid |
如果 pkgid 已正确复制,pkginfo 命令将返回一行与 pkgid 相关的信息。否则,pkginfo 命令将返回系统提示符。
以下示例说明如何将 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 |
如果要复制的软件包位于远程系统上,则可以(以软件包格式)手动挂载包含该软件包的目录,并将它们复制到本地的假脱机目录中。
以下示例说明了此方案中使用的命令。在本示例中,假设名为 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 |
以下示例说明如何从缺省的假脱机目录安装 SUNWpl5p 软件包。如果不使用任何选项,pkgadd 命令将在 /var/spool/pkg 目录中搜索已命名的软件包。
# pkgadd SUNWpl5p . . . Installation of <SUNWpl5p> was successful. |
以下示例说明如何列出本地系统上安装的所有软件包,无论本地系统是独立系统还是服务器。输出中显示了主类别、软件包名称和软件包的说明。
$ pkginfo system SUNWaccr System Accounting, (Root) system SUNWaccu System Accounting, (Usr) system SUNWadmap System administration applications system SUNWadmc System administration core libraries . . . |
以下示例说明如何通过指定长格式列出系统上已安装的所有软件包,长格式中包括有关指定软件包的所有可用信息。
$ 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) |
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见 《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
检查已安装软件包的状态。
要检查文件的属性和内容,请键入以下命令:
# pkgchk -a| -c -v pkid ... |
要指定假脱机目录的绝对路径,请键入以下命令:
# pkgchk -d spooldir pkgid ... |
指定仅审计文件属性(权限),而不是像缺省情况下那样既审计文件属性又审计文件内容。
指定仅审计文件内容,而不是像缺省情况下那样既审计文件内容又审计文件属性。
指定详细模式,该模式会显示正在处理的文件的名称。
指定假脱机目录的绝对路径。
(可选)一个或多个软件包的名称,用空格分隔。如果未指定 pkgid,则会检查系统上已安装的所有软件包。
以下示例说明如何检查软件包的内容。
# pkgchk -c SUNWbash |
如果未出现错误,将返回系统提示符。否则,pkgck 命令将报告错误。
# pkgchk -a SUNWbash |
如果未出现错误,将返回系统提示符。否则,pkgck 命令将报告错误。
以下示例说明如何检查已复制到假脱机目录 (/export/install/packages) 中的软件包。
# pkgchk -d /export/install/packages ## checking spooled package <SUNWadmap> ## checking spooled package <SUNWadmfw> ## checking spooled package <SUNWadmc> ## checking spooled package <SUNWsadml> |
对于假脱机软件包的检查有一定的限制,因为并非所有的信息都可以在未安装软件包的情况下进行审计。
以下过程介绍如何使用 pkgchk 命令检查已安装对象的完整性。使用新的 -P 选项,可以指定部分路径。添加此选项有助于将文件映射到软件包。将该选项与 -l 选项一起使用,可以列出包含部分路径的所有文件的信息。使用 -p 选项,可以通过指定全路径来检查已安装对象的完整性。有关更多信息,请参见 pkgchk(1M) 手册页。
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见 《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
检查已安装对象的完整性。
要通过指定一个或多个全路径名来检验已安装对象的完整性,请键入以下命令:
# pkgchk -lp path-name |
要使用部分路径名(可以是一个或多个)来检验已安装对象的完整性,请键入以下命令:
# pkgchk -lP partial-path-name |
仅检查所列出的一个或多个路径名是否正确。路径可以是一个或多个用逗号分隔的路径名。指定仅审计文件属性(权限),而不是像缺省情况下那样既审计文件属性又审计文件内容。
仅检查所列出的一个或多个部分路径名是否正确。部分路径可以是一个或多个用逗号分隔的部分路径名。它可匹配任何包含特定字符串(即部分路径中所包含的字符串)的路径名。指定仅审计文件内容,而不是像缺省情况下那样既审计文件内容又审计文件属性。
列出有关构成软件包的选定文件的信息。此选项与 -a、-c、-f、-g 和 -v 选项不兼容。指定详细模式,该模式会显示正在处理的文件的名称。
以下示例说明如何使用 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 |
以下示例说明如何使用 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 命令删除软件包。否则将导致用来跟踪系统上所有已安装软件包的数据库不准确。
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见 《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
删除已安装的软件包。
# pkgrm pkgid ... |
pkgid 标识一个或多个要删除的软件包的名称,用空格分隔。如果省略,pkgrm 命令将删除所有可用的软件包。
以下示例说明如何删除软件包。
# 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> . . . |
以下示例说明如何删除假脱机软件包。
# 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> |