2023年12月14日发(作者:)

3.4.2 软件包的安装与管理

软件包的常见管理命令如表3-3所示。

表3-3 软件包管理的常见命令

pkgtrans

source

destination

pkg1 [pkg2…]

pkginfo <-d

pkgname > <-l

specific-software>

pkgadd <-d

pkgname > <-s

spool-path>

specific-software

pkgchk [-l ] <-v

pkgname > | <-p

filename>

pkgrm <-s

spool-path>

对软件包进行格式转换

查看软件包和软件的说明

添加软件包

检查包或文件的安装状态

删除已安装的软件包

1.软件安装包的格式转换

(1)把标准的文件系统格式的软件安装包转换成数据流格式。

把Solaris安装介质放入光驱中。然后按以下示例操作,生成一个包含SUNWadmap、SUNWadmc、SUNWadmr这三个软件包的数据流格式的大包:

# cd /cdrom/cdrom0/Solaris*

# pkgtrans ./Product /tmp/ SUNWadmap SUNWadmc

SUNWadmr

# file /tmp/

/tmp/: 软件包数据流

# head /tmp/

# PaCkAgE DaTaStReAm

SUNWadmap 1 618

SUNWadmc 1 928

SUNWadmr 1 68

# end of header

BASEDIR=/

CATEGORY=system

DESC=Software used to perform system administration tasks

EMAIL=

HOTLINE=Please contact your local service provider

(2)把数据流格式的软件安装包转换成标准的文件系统格式。

仅提取SUNWadmap软件包,并保存在/var/spool/pkg目录

# pkgtrans /tmp/ /var/spool/pkg SUNWadmap 提取所有的软件包,并保存在/tmp目录

# pkgtrans /tmp/ /tmp all

如果pkgtrans命令的最后不指定具体的软件包的话,则命令运行后会显示所有可转换的包的列表并提示进行选择。

2.查看软件包的描述信息

pkginfo命令可以显示所有安装在本地系统磁盘的的软件包信息。在/var/sadm/pkg/目录中保留了一个所有已安装包的记录,可用以下两条命令查看安装的包总数。

# ls /var/sadm/pkg | wc -l.

# pkginfo | wc –l 仅查看完整安装的软件包数量,等同于pkginfo

–i | wc –l

其他常见用法:

# pkginfo | more 查看系统安装了哪些包

# pkginfo –l | more

# pkginfo –l SUNWxxx 特定包的具体信息,SUNW代表SUN系统的软件

# pkginfo –d ./top-3.6-sol10-x86-local 查看安装包中包含的软件包信息

application SMCtop top #软件包为SMCtop,SMC说明是第三方软件

# pkginfo –d ./top-3.6-sol10-x86-local –l SMCtop 查看SMCtop的信息

3.添加软件包

(1)在默认情况下,pkgadd命令会查看/var/spool/pkg目录中是否有标准格式的软件包并列出所有可安装的软件包,是否安装进行安装(关于/var/spool/pkg目录的使用详见下文“使用spool目录”):

# pkgadd

pkgadd: ERROR: 在中没有发现包

(2)如果标准软件包在其他目录(非/var/spool/pkg)中,可用-d选项,示例如下。

# pkgadd -d /tmp/soft ---------自动寻找/tmp/soft目录中可安装的软件包

# pkgadd -d . SMCtop ---------仅安装SMCtop软件包

(3)如果要直接安装数据流格式的软件包,可用以下命令:

# pkginfo -d $HOME/top-3.6-sol10-x86-local -------查看包含哪些软件包

application SMCtop top

# pkgadd -d ./top-3.6-sol10-x86-local [all] -------“[ ]”中为可选项

(4)可以把数据流格式的软件包都导到/var/spool/pkg目录并以标准格式存放:

# pkgadd -d $HOME/top-3.6-sol10-x86-local -s

/var/spool/pkg SMCtop

Transferring package instance

或者使用pkgtrans命令把软件包从数据流格式转换成标准文件系统格式:

#

pkgtrans $HOME/top-3.6-sol10-x86-local /var/spool/pkg [SMCtop]

Transferring package instance

然后用pkgadd命令进行安装。

4.检查已安装的软件包

(1)检查自系统安装以来,所有有变动的文件:

# pkgchk

ERROR: /etc/default/login

modtime <01/22/05 07:28:36 AM> expected <04/16/07 02:26:23

PM> actual

file size <2258> expected <2259> actual

file cksum <57347> expected <57382> actual

<……>

(2)检查特定软件包的变动情况:

# pkgchk SUNWbash (3)查看软件包中包括哪些文件:

# pkgchk -v SUNWcarx

(4)检查特定文件自安装以来的变化修改时间、文件大小、checksum等:

# pkgchk -p /etc/shadow

(5)查看特定文件的信息,特别是属于哪个软件包,必须全路径:

# pkgchk -l -p /usr/bin/showrev

pkgchk的其他参数选项说明:

-a:只审核文件属性。

-c:只审核文件内容,默认是都审核。

-f:尝试进行纠正。

5.删除软件包

# pkgrm SUNWapchr

The following package is currently installed:

SUNWapchr Apache Web Server (root)

(sparc) 11.9.0,REV=2002.01.18.00.45

Do you want to remove this package? [y,n,?,q] y

## Removing installed package instance

## Verifying package dependencies.

WARNING:

The package depends on the package currently

being removed.

WARNING:

The package depends on the package currently

being removed.

Dependency checking failed.

Do you want to continue with the removal of this package

[y,n,?,q] y

……

/var 说明此文件不止被一个包使用,不能删除

……

## Updating system information. Removal of was successful.

如果在删除软件包时遇到以下错误信息:

## 在类别中删除路径名

svc:/network/http:apache2 remains enabled; aborting

pkgrm: ERROR: 类别活动正文没有成功地完成

删除失败

这些信息表明,要删除的软件包正在作为系统服务之一受SMF管理,需要先删除对应的服务实例,根据上面的信息显示服务实例为“svc:/network/http:apache2”,用以下命令删除这个服务实例后再执行软件包的删除操作。

# svccfg delete /network/http:apache2

关于服务实例以及SMF的详细信息,将在后述章节《预测性自愈》中讲解。

6.查看帮助手册

许多第三方软件都自带有帮助手册,如果想用man查看第三方软件包的帮助手册,你需要设置环境变量。假设第三方软件包安装后的帮助手册页都放置在/usr/local/man目录下:

# MANPATH=/usr/share/man:/usr/local/man

# export MANPATH

# man top

或者直接使用man的-M选项:

# man –M /usr/local/man top

把帮助手册页导成文本文件:

# man –M /usr/local/man top | col -b >