Red Hat Enterprise Linux 6从入门到精通
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第4章 软件管理

本章主要介绍Red Hat Enterprise Linux系统的软件管理,讨论怎样利用系统提供的软件维护工具,安装、删除及更新软件包。

4.1 软件管理概述

4.1.1 软件维护工具

Red Hat Enterprise Linux系统提供一系列软件维护工具,包括yum、rpm和PackageKit等。

yum会按照用户的意图,安装或删除指定的软件包及其依赖的软件,或以软件仓库等软件源提供的最新软件为准,更新系统中已安装的软件包及其相关软件。如果同一软件包存在多个可用的更新版本,yum能够自动选用最新的软件版本。

在维护单个RPM软件包方面,rpm命令比较方便和灵活,可以安装或删除单独下载的任何软件包。其缺点是:必须由用户自己检查软件包的相互依赖关系,安装相关的软件包。由于上述原因,通常建议用户尽量使用yum安装或更新指定的软件包,甚至整个Linux系统。

PackageKit提供两个图形界面的软件管理工具:“软件更新(gpk-update-viewer)”和“添加/删除软件(gpk-application)”。其中,gpk-update-viewer主要用于更新系统中已安装的软件包,gpk-application主要用于补充安装尚未安装的软件包。

若想使用图形界面的软件维护工具,可以从GNOME桌面中选择“系统→管理→软件更新”菜单,或在命令行界面中输入gpk-update-viewer命令。也可以从GNOME桌面中选择“系统→管理→添加/删除软件”菜单,或在命令行界面中输入gpk-application命令。

注意,PackageKit与yum软件维护工具能够确保系统总是使用最新版本的软件包,而rpm需要由用户自己控制。为了确保系统的安全性,增强系统的可靠性与可用性,定期地更新系统和软件包是一项必不可少的系统维护任务。

4.1.2 软件管理基本概念

Red Hat Enterprise Linux系统提供的所有软件和文档都是以RPM软件包文件形式提供的,每个软件包都是一个压缩格式的档案文件,其中包含产品信息、程序文件、文档以及相关的安装与启动脚本。软件包管理工具可以利用这些文件,检索、安装、升级或删除软件包。

此外,软件包还包括数字签名,以证实其来源是否真实有效。软件包管理工具利用GPG公钥验证软件包数字签名的合法性。

1.软件仓库

作为软件源,软件仓库是一个网站或存储目录,其中提供一系列RPM格式的软件包与描述软件包的元数据(索引文件)。在Red Hat Enterprise Linux系统中,许多软件包均存在相互依赖关系,安装程序使用元数据确保选定软件包的依赖关系得到满足。软件管理工具能够自动检索与获取正确的软件包。利用软件仓库、网络与yum等工具,能够方便地完成软件包的安装,系统的更新与升级,只需使用单个命令,即可安装、更新选定的软件包,升级整个系统,或查询匹配指定检索准则的软件包。

针对Red Hat Enterprise Linux 6系统,Red Hat通常提供下列软件仓库:

· Red Hat Enterprise Linux 6软件仓库是默认的软件仓库,其中含有Red Hat Enterprise Linux 6的完整软件集合。

· HighAvailability软件仓库含有采用Red Hat服务管理组件实现的高可用故障切换群集支持软件。

· ResilientStorage软件仓库含有采用Red Hat GFS文件系统实现的存储设备群集支持软件。

· LoadBalancer软件仓库提供采用Linux Virtual Server(LVS)技术实现的负载平衡群集支持软件包。

2. 软件包的相互依赖关系

软件包是一个相对独立的功能单元,但许多软件包通常还需要有一定的底层支持,如函数库或网络协议等底层支持,而一个函数库或网络协议可能会同时支持多个软件包。当一个软件包需要某个特定的函数库或网络协议支持时,包含函数库或网络协议支持的软件包就是当前软件包依赖的软件包。为了适当地安装一个软件包,必须首先满足其依赖关系。软件包的依赖关系信息存储在RPM文件中。

yum等软件维护工具利用软件包的依赖关系数据,确保在安装、删除或更新期间能够安装必要的软件包,自动安装系统中不存在的、与新装软件具有依赖关系的附加软件包,满足软件包的依赖关系。如果新软件包的要求与现有软件存在冲突,yum等将会终止安装。

3. 软件包的命名规则

在Red Hat Enterprise Linux 6系统发行的软件包中,每个软件包档案文件通常都有一个较长的名字。其命名规则如下:

        name-version-release.product.arch.rpm

其中,name是软件包的名字,version为主版本号,release为修订版本号,product是产品类型,arch为机器类型,rpm表示软件包的文件格式为RPM。

例如,bash-4.1.2-3.el6.i686.rpm中bash是软件包名,4.1.2是主版本号,3是修订版本号, el6表示Red Hat Enterprise Linux 6,i686表示适用的机器类型为Intel x86系列计算机。

在利用软件维护工具管理软件包时,可以采用下列四种形式之一引用软件包:

· 软件包的名字,如vsftpd。

· 软件包名加主版本号,如vsftpd-2.2.2。

· 软件包名加机器类型,如vsftpd.i686。

· 软件包的完整名字,如vsftpd-2.2.2-6.el6.i686.rpm。

针对不同的Intel CPU型号,某些软件包还做了进一步的优化。i386是所有32位Intel系列计算机的总称,标记为i386的软件包适用于所有的32位Intel系列及其兼容机。一个配有Intel Pentium Pro及其更高CPU的计算机可以使用标记为i686的软件包。

在使用yum命令维护软件包时,应尽量选用简短的名字,其好处是能够由yum自动选择最匹配自己机器类型的软件包。但是,采用复杂命名形式指定软件包时能够强制yum选择特定版本、机器类型或其他特征的软件包。

4.2 使用yum管理软件包

yum是一个功能完善、易于使用的软件维护工具,可用于检索、安装、删除或更新软件包,升级Red Hat Enterprise Linux系统。yum命令的语法格式简写如下:

        yum [options] [function] [packages]

yum命令的选项分为功能选项与普通选项,功能选项是一个具体的处理动作,如install表示安装,update表示升级等。表4-1给出了yum命令支持的部分功能选项及其简单说明。

表4-1 yum命令支持的部分功能选项

表4-2给出了yum命令支持的部分普通选项及其简单说明。

表4-2 yum命令支持的部分普通选项

运行yum命令时,首先需要从表4-1的功能选项中选择一个处理动作,如install、update或remove等,同时指定准备安装、更新或删除的软件包或软件组。对于每一项请求,yum将会从软件仓库中下载最新的软件包信息文件,检索已经下载的数据文件,确定下一步需要采取的处理动作,例如,为了满足软件包的依赖关系,是否需要安装、更新或删除其他软件包等。

4.2.1 安装软件包

当需要安装软件包,如安装mysql-server数据库服务器软件时,可以选用yum的install功能选项。例如:

        # yum install mysql-server
        ……
        ==========================================================================
        Package            Arch        Version             Repository      Size
        ==========================================================================
        Installing:
        mysql-server       i686        5.1.47-4.el6        InstDVD        8.3 M
        Installing for dependencies:
        mysql              i686        5.1.47-4.el6        InstDVD        898 k
        perl-DBD-MySQL     i686        4.013-3.el6         InstDVD        134 k
        Transaction Summary
        ==========================================================================
        Install      3 Package(s)
        Upgrade      0 Package(s)
        Total download size: 9.3 M
        Installed size: 26 M
        Is this ok [y/N]: y

上述信息说明,安装mysql-server时还需要额外安装mysql和perl-DBD-MySQL等相关软件包。如果没有异议,可以输入y,接着按Enter键表示确认,之后即可开始下载并安装软件包。如果不同意,可以输入n或直接按Enter键终止下载,从而终止安装指定的软件包。

有些软件比较庞大,涉及一系列软件包(如Eclipse开发工具拥有上百个软件包等),需要同时安装多个软件包。但究竟需要安装哪些软件包,用户可能不一定很清楚。因此,Red Hat提供若干软件组,以便用户能够完整地安装选定的软件。例如,假定我们想要安装Eclipse开发工具,最好选用yum的groupinstall功能选项,指定Eclipse软件组,以软件组的安装方式安装其中所有的软件包:

        # yum groupinstall "Eclipse"

如果不知道软件仓库中都存在哪些软件组,可以使用下列yum命令,查询Red Hat提供的所有软件组,yum将会分别显示当前系统已经安装及尚有哪些可用的软件组:

        # yum grouplist
        Setting up Group Process
        Installed Groups:
          ……
          Chinese Support
          Console internet tools
          Debugging Tools
          Desktop
          Desktop Debugging and Performance Tools
          Desktop Platform
          ……
        Available Groups:
          ……
          CIFS file server
          ……
          Eclipse
          ……
          FTP server
          ……
          MySQL Database client
          MySQL Database server
          ……
        #

注意,当安装的软件包中包括后台系统进程时,yum通常不会马上启动。若想立即启动新装的系统进程,或在系统引导过程中能够自动启动,可在桌面系统中选择“系统→管理→服务”菜单,从服务窗口中激活相应的系统进程。也可以使用service命令,立即启动新装的系统进程。

4.2.2 更新软件包

若想更新某个软件包,如httpd,可以使用下列yum命令:

        # yum update httpd
        ……
        ==========================================================================
        Package          Arch        Version               Repository      Size
        ==========================================================================
        Updating:
        httpd            i686        2.2.15-5.sl6          Yum-ftp        812 k
        Updating for dependencies:
        httpd-tools      i686        2.2.15-5.sl6          Yum-ftp         67 k
        Transaction Summary
        ==========================================================================
        Install      0 Package(s)
        Upgrade      2 Package(s)
        Total size: 880 k
        Is this ok [y/N]: y
        ……
        #

如果想要更新一个软件组中的所有软件包,如更新整个Eclipse开发工具,可以使用下列yum命令:

        # yum groupupdate "Eclipse"

注意,在更新软件包时,如果相应的软件包当前正在运行,原先的软件将会继续保持当前的运行状态,直至重新启动相应的进程,更新后的软件包才会开始真正生效。

4.2.3 系统更新与升级

使用update功能选项时,如果不指定任何软件包,可以更新或升级整个系统。例如,若想全面更新或升级Red Hat Enterprise Linux系统,可以使用下列yum命令:

        # yum update

        # yum upgrade

4.2.4 删除软件包

在删除软件包时,yum会考察系统中是否存在依赖于指定软件包的软件包。如果存在, yum将会列出需要删除的其他软件包,提示用户确认后可一并删除。例如,若想从系统中删除多余的软件包quota,可以使用下列yum命令:

        # yum remove quota
        ……
        ==========================================================================
        Package       Arch         Version             Repository          Size
        ==========================================================================
        Removing:
        quota         i686         1:3.17-10.el6       @InstDVD            913 k
        Transaction Summary
        ==========================================================================
        Remove       1 Package(s)
        Reinstall    0 Package(s)
        Downgrade    0 Package(s)
        Is this ok [y/N]: y
        ……
        #

若想删除软件组Eclipse开发工具的所有软件包,可以使用下列yum命令:

        # yum groupremove "Eclipse"

4.2.5 检索软件包

在安装或更新Red Hat Enterprise Linux系统时,可以利用yum命令的list功能选项提供的检索功能,从软件仓库中检索可用的软件包,或检索系统中已安装的软件包。通常,yum的检索功能会同时检索已安装的或可用的软件包。其语法格式简写如下:

        yum list [all | pkg-pattern]
        yum list available [pkg-pattern]
        yum list updates [pkg-pattern]
        yum list installed [pkg-pattern]
        ……

其中,除非指定了具体的软件包,关键字all表示检索所有的软件包,available表示当前可用的所有软件包,updates表示可用于更新当前系统的所有软件包,installed表示系统中已经安装的所有软件包。pkg-pattern是软件包的名字或模式。

在指定软件包的名字时,可以指定一个确切的软件包名,也可以采用标准的通配符星号“*”与问号“?”,指定一个软件包名字模式,进行模糊匹配,以便查询匹配检索准则的任何软件包。注意,为了避免Shell提前解释通配符,通配符之前应增加一个转义符号“\”。

软件包的检索结果取决于指定的命令选项与检索模式,如果检索结果为空,即yum命令没有任何输出信息,则意味着不存在匹配检索准则的软件包。

1. 查询所有软件包

利用下列命令,可以查询系统中已安装的以及可用的所有软件包(这将是一个长长的软件包列表):

        # yum list all

如果知道软件包的准确名字,可以按照名字查询具体的软件包。例如,若想查询iptables软件包及其相关信息,可以使用下列yum命令:

        # yum list iptables
        ……
        Installed Packages
        iptables.i686 1.4.7-3.el6  @anaconda-RedHat……-201009221732.i386/6.0
        #

为使查询更准确,可以按照名字与属性检索软件包,即在指定软件包名字时增加其他属性,如软件包的版本或机器类型信息等。例如,若想查询版本是1.4.7的iptables软件包,可以使用下列yum命令:

        # yum list iptables-1.4.7
        ……
        Installed Packages
        iptables.i686 1.4.7-3.el6  @anaconda-RedHat……-201009221732.i386/6.0
        #

2. 查询软件仓库中可用的软件包

利用下列yum命令,可以查询软件仓库中当前提供的可用软件包(这将是一个长长的软件包列表):

        # yum list available

也可以利用通配符,检索符合指定模式的相关的软件包。例如,若想检索以mysql为起始字符串的所有软件包,可以使用下列yum命令,查询软件仓库中匹配指定检索模式“mysql\*”的软件包:

        # yum list available mysql\*
        ……
        Available Packages
        MySQL-python.i686                   1.2.3-0.3.c1.1.el6          InstDVD
        mysql.i686                          5.1.47-4.el6                InstDVD
        mysql-bench.i686                    5.1.47-4.el6                InstDVD
        mysql-connector-java.i686           1:5.1.12-2.el6              InstDVD
        mysql-connector-odbc.i686           5.1.5r1144-7.el6            InstDVD
        mysql-devel.i686                    5.1.47-4.el6                InstDVD
        mysql-server.i686                   5.1.47-4.el6                InstDVD
        mysql-test.i686                     5.1.47-4.el6                InstDVD
        #

在上述输出信息中,第一列是软件包的名字,第二列是软件包的版本号,第三列是软件包所在的软件仓库,如InstDVD(DVD安装介质)。

3.查询软件仓库中可供更新的软件包

利用下列命令,可以查询软件仓库中可供当前系统更新的所有软件包(如果不经常更新,这将是一个长长的软件包列表):

        # yum list updates

同样,利用下列yum命令与指定的通配符,可以查询软件仓库中匹配指定检索准则的更新软件包:

        # yum list updates libvirt\*

4. 查询系统中已安装的软件包

利用下列命令,可以查询系统中已安装的所有软件包(这将是一个长长的软件包列表):

        # yum list installed

利用下列yum命令与指定的通配符,可以查询系统中已安装的相关软件包:

        # yum list installed http\*
        ……
        Installed Packages
        httpd.i686          2.2.15-5.el6 @anaconda-……-201009221732.i386/6.0
        httpd-tools.i686        2.2.15-5.el6 @anaconda-……-201009221732.i386/6.0
        # yum list \*yum
        ……
        Installed Packages
        PackageKit-yum.i686 0.5.8-13.el6  @anaconda-……-201009221732.i386/6.0
        yum.noarch          3.2.27-14.el6 @anaconda-……-201009221732.i386/6.0
        #

注意,在指定软件包时,除非使用通配符,yum会严格按照指定的模式进行检索,给出匹配检索准则的所有软件包。例如,如果指定的软件包名为shadowutils或shadow-util,yum不会发现真正的软件包shadow-utils,但如果使用“shadow-util\?”或“shadow\*”检索就没有问题。

4.2.6 高级检索功能

如果只知道软件包的功能特性或其中的某个关键字,而不知道软件包的确切名字,可以使用yum命令的search或provides功能选项进行模糊检索。与search功能选项相比,provides功能选项需要下载并检索更大的索引文件。

利用search功能选项,可以采用某个关键字作为检索模式,检索具有一定功能特性的软件包。在指定检索模式时,还可以采用标准的通配符星号“*”与问号“?”,实现更为宽泛的模糊匹配检索。yum将会按照软件包的描述、概要说明或RPM软件包名的每个字段,检索匹配查询准则的任何软件包。例如,如果想要检索与防火墙有关的所有软件包,可以使用firewall作为关键字,输入下列yum命令:

        # yum search firewall
        ……
        ============================ Matched: firewall =============================
        system-config-firewall.noarch : A graphical interface for basic firewall setup
        system-config-firewall-base.noarch :system-config-firewall base components and
                                    : command line tool
        system-config-firewall-tui.noarch : A text interface for basic firewall setup
        arptables_jf.i686 : Userspace control program for the arptables network filter
        ebtables.i686 : Ethernet Bridge frame table administration tool
        freeradius.i686 : High-performance and highly configurable free RADIUS server
        iptables.i686 : Tools for managing Linux kernel packet filtering capabilities
        iptables-ipv6.i686 : IPv6 support for iptables
        iptstate.i686 : A top-like display of IP Tables state table entries
        #

利用provides功能选项,yum能够检索包含指定文件名的软件包。在指定文件名检索模式时,可以指供一个确切的名字,也可以使用标准的通配符指定检索准则,实现模糊匹配检索。例如,为了检索其中含有/etc/fstab文件的软件包,可以使用下列yum命令:

        # yum provides /etc/fstab
        setup-2.8.14-10.el6.noarch : A set of system configuration and setup files
        Repo        : InstDVD
        Matched from:
        Filename    : /etc/fstab
        setup-2.8.14-10.el6.noarch : A set of system configuration and setup files
        Repo        : installed
        Matched from:
        Other       : Provides-match: /etc/fstab
        #

上述输出信息表示,软件仓库(InstDVD)与当前系统中各存在一个setup软件包,其中含有/etc/fstab文件。

同样,在使用search与provides功能选项检索指定的软件包、文件或关键字时,除非使用通配符,yum将会严格按照指定的模式进行检索,最终给出匹配检索准则的所有软件包。

4.2.7 安装本地存储介质上的软件包

通常情况下,应尽量使用Red Hat提供的软件仓库和标准的yum命令下载、安装以及更新软件包,利用CD/DVD安装介质安装尚未安装的软件包,除非任何可用的软件仓库或CD/DVD安装介质都不提供需要的软件包。此时,可以利用yum命令的localinstall功能选项安装单独下载的软件包。

例如,假定先前已经下载了ftp软件包,可以使用下列yum命令安装当前目录中缓存的ftp软件包:

        # yum localinstall ftp-0.17-51.1.el6.i686.rpm
        ==========================================================================
        Package   Arch      Version             Repository                  Size
        ==========================================================================
        Installing:
        ftp      i686       0.17-51.1.el6      /ftp-0.17-51.1.el6.i686     91 k
        Transaction Summary
        ==========================================================================
        Install      1 Package(s)
        Upgrade      0 Package(s)
        Total size: 91 k
        Installed size: 91 k
        Is this ok [y/N]: y

注意,在指定软件包名字时,可以使用星号“*”等通配符,只要不致引起混淆即可。此外,如果先前已经安装了同名的软件包,除非指定的软件包版本更新,否则yum命令的localinstall功能选项不会重新安装已安装的软件包。

如果准备安装的软件包依赖的软件包尚未安装,yum将会尝试从软件仓库中检索并下载必要的软件包。当然,这一做法未必奏效,可能还需要自己下载和安装附加的软件包,以满足软件包的相互依赖关系。

4.2.8 设置yum.conf配置文件

yum命令使用/etc/yum.conf等配置文件规范其处理动作。在安装了Red Hat Enterprise Linux系统之后,系统将会创建一个默认的配置文件,使yum能够根据yum.conf配置文件的设置,利用Red Hat提供的软件仓库,执行软件包的更新。

主配置文件(/etc/yum.conf文件的[main]部分)中的设置,包括缓冲目录的设置等,适用于所有的yum操作,而/etc/yum.repos.d目录中的每个配置文件只是针对相应的软件仓库设置,因而仅适用于相应的软件仓库。但是,如果软件仓库配置文件与主配置文件中的同一变量设置不一致,前者的设置将会强制替代后者的设置。

若想增加一个软件仓库,或改变yum的默认处理动作,如保存下载的软件包,通常需要修改/etc/yum.conf配置文件。在修改yum.conf配置文件或软件仓库配置文件时,可以使用任何文本编辑器。

yum.conf配置文件主要由两部分内容组成。第一部分以[main]为起始标识,其中包含全局配置信息,第二部分以[repositoryid]为起始标识,用于定义提供软件包的服务器。注意,第二部分内容既可以在yum.conf文件中定义,也可以作为单独的文件,以file.repo的配置文件形式存储在/etc/yum.repos.d目录中。

例如,下面是在安装Red Hat Enterprise Linux系统之后,系统提供的yum.conf默认配置文件:

        # cat /etc/yum.conf
        [main]
        cachedir=/var/cache/yum/$basearch/$releasever
        keepcache=0
        debuglevel=2
        logfile=/var/log/yum.log
        exactarch=1
        obsoletes=1
        gpgcheck=1
        plugins=1
        installonly_limit=3
        ……
        # PUT YOUR REPOS HERE OR IN separate files named file.repo
        # in /etc/yum.repos.d
        #

表4-3给出了定义[main]部分时需要用到的一些主要配置变量及其解释。

表4-3 定义[main]部分的主要变量

如果Red Hat Enterprise Linux安装介质没有提供用户需要的软件包,如samba维护工具swat,在找到软件源,利用yum下载并安装软件包之前,可能需要自己设置软件仓库配置文件。为了定义一个新的软件仓库,可以在/etc/yum.repos.d目录中创建一个软件仓库配置文件。注意,软件仓库配置文件必须加“.repo”扩展名。

每个软件仓库的配置文件都应包括一个指定公钥文件位置的gpgkey配置变量。公钥用于验证软件仓库提供的软件包,如果配置文件中没有指定公钥(文件位置),在安装或更新软件包时,yum会要求用户手工输入公钥。

在配置软件仓库时,必须为每个软件仓库分配一个唯一的标识。然后再定义软件仓库的网站地址及其存储目录,其语法格式如下:

        [repositoryid]
        name=Some name for this repository
        baseurl=url://path/to/repository/
        ……

表4-4给出了定义软件仓库时需要用到的部分配置变量及其简单说明。

表4-4 定义软件仓库的部分配置变量

为便于维护配置文件,yum还提供若干自引用的变量,用于定义配置文件中的name与baseurl等变量(这些变量也可用于yum命令选项),如表4-5所示。

表4-5 yum配置文件自引用的变量

例如,如果想从CD/DVD安装介质中安装软件包,可以创建一个本地软件源,其存储位置是mntpoint/Server:

        # cat /etc/yum.repos.d/dvd.repo
        [InstDVD]
        name=Install DVD
        baseurl=file:///media/cdrom/Server
        enabled=1
        gpgcheck=1
        gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
        #

如果系统中存在默认的远程软件源,可以在相应的*.repo配置文件中,把enabled配置变量设置为0,临时禁用远程软件源。运行下列mount命令之后,就可以使用本地的CD/DVD安装介质作为软件源了:

        # mount –o ro /dev/cdrom /media/cdrom
        #

4.2.9 启用缓存功能

通常,在成功地完成软件包的安装或更新之后,yum将会删除已下载的软件包及其相关信息文件。这种处理方式会减少yum占用的磁盘空间容量,但当需要重新安装或更新时则需要重新下载。为了缓存yum安装或更新期间下载的软件包及其信息文件,可以启用yum的缓冲功能,使yum能够在缓存目录中保留下载的软件包及其信息文件。

yum默认的缓存目录为/var/cache/yum/$basearch/$releasever。其中,针对当前使用的每个软件仓库以及安装介质,都会创建一个以软件仓库名字命名的子目录,再下一级的packages子目录用于存储下载的软件包。例如,/var/cache/yum/i386/6Server/name/packages目录中将会存储从name软件仓库中下载的所有软件包。

1. 缓存下载的软件包

在完成安装或更新之后,为了保留而不是删除下载的软件包及其信息文件,以便将来再次安装或更新时能够重用,而不必重新下载,需要把/etc/yum.conf配置文件中的keepcache变量设置为1:

        keepcache=1

一旦启用了yum的缓存功能,每当执行一次yum命令,都有可能从软件仓库中下载并存储一定数量的软件包及其信息文件。此外,运行“yum list”或“yum search”检索命令时也会下载软件包,并把软件包保留在缓存目录中。

2.利用缓存的软件包与信息文件管理软件

在没有联网的情况下,也可以使用“-C”选项运行yum命令,忽略远程软件源,仅用本地缓存的软件包与信息文件,执行软件的查询、安装、更新或重新安装。此时,yum只能使用先前下载期间缓存的软件包。

根据上述说明,若想列出系统中缓存的所有软件包,可以使用下列yum命令:

        # yum -C list available

利用下列yum命令,可以检索系统中已安装及缓存的lvm软件包:

        # yum -C list lvm\*
        Installed Packages
        lvm2.i686       2.02.72-8.el6 @anaconda-……-201009221732.i386/6.0
        lvm2-libs.i686  2.02.72-8.el6 @anaconda-……-201009221732.i386/6.0
        #

利用下列yum命令,可以从缓存目录中安装或重新安装因故删除的软件包:

        # yum -C install libvirt*

3.清除缓存的软件包

如果磁盘的存储空间有限,需要清理软件包的缓存区,可以使用下列yum命令,删除软件包的信息文件:

        # yum clean headers

若想删除/var/cache/yum目录中缓存的所有软件包,可以使用下列yum命令:

        # yum clean packages

清除缓存的软件包及其信息文件之后,一旦需要再次安装,需要重新下载,这将会使整个安装时间加长。

4.3 使用rpm管理软件包

在Red Hat Enterprise Linux系统中,rpm是一个强有力的软件维护工具,可以用于建立、安装、查询、检验和删除软件包。一个软件包通常是由档案文件和元数据组成的,因此,软件包的安装也是档案文件的释放过程。元数据包括helper脚本、文件属性以及软件包的描述信息。rpm命令的语法格式简写如下:

        rpmlt@span i=1> {-ilt@span i=1> |lt@span i=1> --install}lt@span i=1> [install-options] pkglist
        rpm {-F | --freshen} [install-options] pkglist
        rpm {-U | --upgrade} [install-options] pkglist
        rpm {-e | --erase} [--allmatches] [--nodeps] … pkglist
        rpm {-q | --query} [select-options] [query-options]

其中,pkglist为软件包的文件名。在运行rpm命令时,必须选择一个具体的动作:如查询(“-q”选项)、安装(“-i”选项)、升级(“-U”选项)、更新(“-F”选项)、删除(“-e”选项)、验证、检验数字签名以及增加数字签名等。考虑到实用性,这里主要介绍软件包的查询、安装、升级、更新以及删除等功能,表4-6给出了常用的部分功能选项及其简单说明。

表4-6 rpm命令的部分功能选项

在选择安装、升级或更新功能选项时,rpm命令支持的普通选项基本类同,如表4-7所示。

表4-7 rpm命令的部分常用选项

4.3.1 安装软件包

当需要安装软件包时,可以使用下列rpm命令:

        # rpm -ivh dhcp-4.1.1-12.P1.el6.i686.rpm
        Preparing...        ########################################### [100%]
          1:dhcp           ########################################### [100%]
        #

上述输出信息表示软件包已经成功地安装。注意,在指定软件包的名字时,必须给出完整的路径,除非软件包位于当前目录中。

如果同一版本的软件包已经安装,rpm将会拒绝重复安装,并给出下列错误信息:

        # rpm -ivh dhcp-4.1.1-12.P1.el6.i686.rpm
        Preparing...        ########################################### [100%]
            package dhcp-12:4.1.1-12.P1.el6.i686 is already installed
        #

如果因为某种原因确实需要重新安装一个已安装的软件包,如误删了软件包中的某个文件,或恢复原先的配置文件,可以使用rpm命令的“--replacepkgs”选项,这将使rpm忽略重复安装的错误。示例如下:

        # rpm -ivh --replacepkgs dhcp-4.1.1-12.P1.el6.i686.rpm
        Preparing...        ########################################### [100%]
          1:dhcp           ########################################### [100%]
        #

如果软件包依赖的底层支持软件包尚未安装,rpm将会终止安装指定的软件包,同时给出类似于下列的错误信息:

        # rpm -ivh mysql-server-5.1.47-4.el6.i686.rpm
        error: Failed dependencies:
              mysql = 5.1.47-4.el6 is needed by mysql-server-5.1.47-4.el6.i686
        #

上述输出信息表示,尚需下载一个libfwbuilder软件包,然后一起安装,fwbuilder软件包才能正常运行。示例如下:

        # rpm -ivh mysql-server-5.1.47-4.el6.i686.rpm mysql-5.1.47-4.el6.i686.rpm
        Preparing...        ########################################### [100%]
          1:mysql          ########################################### [ 50%]
          2:mysql-server   ########################################### [100%]
        #

若想强制安装一个软件包,而不考虑其依赖关系,可以增加一个“--nodeps”选项。示例如下(一般不建议采用这种安装方式):

        # rpm -ivh —nodeps mysql-server-5.1.47-4.el6.i686.rpm

4.3.2 更新软件包

更新软件包意味着仅对系统中已经安装的软件包进行更新。当使用“-F”选项更新软件包时, rpm会比较命令行中指定软件包与系统中已安装软件包的版本。如果前者较新,rpm会更新同名的软件包。如果两者的版本相同,或者同名的软件包不存在,rpm不会安装指定的软件包。

例如,若想更新一个软件包,可以使用下列rpm命令:

        # rpm -Fvh mysql-5.1.47-4.el6.i686.rpm

在软件更新过程中,如果只想升级系统中已安装的软件包,可以利用“-F”选项的上述特点,由rpm确定究竟需要安装哪些软件包,而不必在命令行中一一列出。例如,如果当前目录中存在多个已下载的软件包,可以使用下列简单的命令更新软件:

        # rpm -Fvh *.rpm

4.3.3 升级软件包

软件包的升级相当于软件包的安装与更新,取决于系统中是否存在指定的软件包,或者安装新的软件包,或者更新现有的软件包。例如,如果想要升级mysql软件包,可以使用下列rpm命令:

        # rpm -Uvh mysql-5.1.47-4.el6.i686.rpm
        Preparing...        ########################################### [100%]
          1:mysql          ########################################### [100%]
        #

采用“-U”选项升级软件包是一种智能升级过程,如果先前尚未安装指定的软件包,rpm将会按照安装新软件包的过程安装指定的软件包。如果先前已经安装了同名但版本较低的软件包,且其中存在配置文件,rpm将会在原有的目录存储位置,以增加.rpmsave文件名后缀的形式保留之前的配置文件。

安装软件包之后,如果需要设置配置文件,用户可以检查老的配置文件是否能够继续使用,比较两个配置文件的差别,根据实际情况,或复制整个文件,或借用原配置文件的部分内容,以设置新的配置文件,确保软件包能够正常运行。

4.3.4 查询软件包

rpm命令的“-q”功能选项主要用于查询软件包的有关信息。例如,利用下列rpm命令可以查询已安装软件包的主版本与修订版本等信息:

        # rpm -q vsftpd
        vsftpd-2.2.2-6.el6.i686
        #

除了查询软件包的基本信息之外,再组合使用其他选项,还可以检索各种信息,从而实现广泛的软件包信息查询。表4-8给出了rpm查询功能的部分常用选项。

表4-8 rpm查询功能的部分常用选项

“-a”选项用于查询当前已经安装的所有软件包,这将是一个很长的软件包列表。

“-f file”选项用于查询指定的文件属于哪一个软件包。注意,当指定一个文件名时,必须给出完整的路径名,除非指定的文件位于当前目录。例如:

        # rpm -qf /bin/bash
        bash-4.1.2-3.el6.i686
        # cd /sbin
        # rpm -qf init
        upstart-0.6.5-6.1.el6.i686
        #

“-p pkg”选项用于查询指定的软件包。注意,这里查询的并非已安装的软件包,而是缓存在系统中的软件包。因此,在指定软件包时必须给出完整的路径名,除非软件包就在当前目录中。例如:

        # rpm -qp openssh-server-5.3p1-20.el6.i686.rpm
        openssh-server-5.3p1-20.el6.i686
        #

“-i”选项用于显示软件包的概要信息,包括名字、简单描述、版本、大小、打包时间、安装时间及提供商等信息。例如:

        # rpm -qi bash
        Name        : bash                   Relocations: (not relocatable)
        Version     : 4.1.2                       Vendor: Red Hat, Inc.
        Release     : 3.el6                   Build Date: Tue Jun 22 08:52:28 2010
        Install Date :Tue Dec 7 20:48:58 2010    Build Host:ls20-bc2-14.build.redhat.com
        Group       : System Environment/Shells Source RPM: bash-4.1.2-3.el6.src.rpm
        Size        : 3107578                    License: GPLv3+
        Signature   : RSA/8, Mon Aug 16 08:30:36 2010, Key ID 199e2f91fd431d51
        Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
        URL         : http://www.gnu.org/software/bash
        Summary     : The GNU Bourne Again shell
        Description :
        The GNU Bourne Again shell (Bash) is a shell or command language
        interpreter that is compatible with the Bourne shell (sh). Bash
        incorporates useful features from the Korn shell (ksh) and the C shell
        (csh). Most sh scripts can be run by bash without modification.
        #

“-l”选项用于显示软件包中的文件列表,例如:

        # rpm -ql mdadm
        /etc/cron.weekly/99-raid-check
        /etc/rc.d/init.d/mdmonitor
        /etc/sysconfig/raid-check
        /lib/udev/rules.d/65-md-incremental.rules
        /sbin/mdadm
        /sbin/mdmon
        ……
        /usr/share/man/man4/md.4.gz
        /usr/share/man/man5/mdadm.conf.5.gz
        /usr/share/man/man8/mdadm.8.gz
        /usr/share/man/man8/mdmon.8.gz
        /var/run/mdadm
        #

“-d”选项用于显示软件包中的文档文件列表,包括参考手册(man)和命令使用说明(info)等文档,例如:

        # rpm -qd mdadm
        /usr/share/doc/mdadm-3.1.3/COPYING
        /usr/share/doc/mdadm-3.1.3/ChangeLog
        /usr/share/doc/mdadm-3.1.3/TODO
        /usr/share/doc/mdadm-3.1.3/mdadm.conf-example
        /usr/share/doc/mdadm-3.1.3/syslog-events
        /usr/share/man/man4/md.4.gz
        /usr/share/man/man5/mdadm.conf.5.gz
        /usr/share/man/man8/mdadm.8.gz
        /usr/share/man/man8/mdmon.8.gz
        #

“-c”选项用于显示配置文件列表。配置文件是安装软件包之后可以根据需要进行修改的文件,如inittab、passwd和yum.conf文件等。示例如下:

        # rpm -qc mdadm
        /etc/sysconfig/raid-check
        #

4.3.5 删除软件包

“-e”选项用于删除指定的软件包。与安装软件包时需要给出完整的路径名不同,在删除软件包时,只需指定最简单的软件包名。因此,当某个软件包不再需要时,可以使用下列rpm命令删除软件包:

        # rpm -e vsftpd
        #

如同安装软件包一样,删除软件包也存在软件包的依赖关系问题。如果某个软件包恰好依赖于准备删除的软件包,就会出现类似于下列的错误信息:

        # rpm -e mysql
        error: Failed dependencies:
            mysql = 5.1.47-4.el6 is needed by (installed) mysql-server-5.1.47-4.el6.i686
        #

如果想要强制删除软件包,而不考虑软件包的依赖关系,可以使用“--nodeps”选项,但一般不建议这样做,例如:

        # rpm -e --nodeps mysql
        #

4.4 软件增删工具

软件增删工具可以根据软件的功能分类,安装或删除选定的软件包,也可用于浏览、检索以及查询软件包的说明信息。

若想查询、安装或删除软件包,可在GNOME桌面中选择“系统→管理→添加/删除软件”菜单,或在命令行中直接运行gpk-application命令,出现如图4-1所示的“添加/删除软件”窗口。

图4-1 “添加/删除软件”窗口

左侧窗格按照软件的类型分别列出了每一个软件组。当选择不同的软件组时,右上角窗格将会给出其中包含的软件包列表。在软件包列表中,第一列的复选框表示软件包的安装状态,如果复选框中有一个对钩“√”,表示相应的软件包已经安装。第三列是应用程序,给出软件包的名字。当单击某个软件包时,右下方的两个窗格将会给出相应软件包的简要说明信息,如软件开发项目的主页,软件组别(如果存在),软件包的许可证,调用软件的GNOME菜单位置(如“应用程序→图形→图像处理程序”),以及软件包的大小等,如图4-2所示。

图4-2 软件查询与选择界面

4.4.1 安装或删除软件包

安装或删除软件包时,可以先从左侧窗格中选择软件的分组类型,然后从右上角的窗格中选择准备安装或删除的软件包。

注意,勾选一个复选框仅仅表示选定相应的软件包,直至单击“应用”按钮后才会真正开始安装。采用这种方式,可以重复检索和选择,最终一次安装多个软件包。清除原先已勾选的复选框,然后单击“应用”按钮,可以删除已安装的软件包。通过勾选和清除勾选相应软件包的方式,可以同时安装与删除选定的软件包。

“添加/删除软件”窗口中的“搜索”框用于检索软件包。如果知道软件包的名字或部分名字,可以采用其中的关键字检索软件包,在“检索”框中输入表示软件包的关键字,如“gimp”,然后单击“查找”按钮。通常,系统从软件仓库的所有软件包中检索,也可以单击“最新的软件包”或“选定的软件包”,分类检索软件包。如果检索不到自己需要的软件包,或需要安装其他软件仓库中的软件包,可以选择不同的软件仓库,以便能够从更多的软件源中选择期望的软件包,如图4-3所示。

图4-3 软件检索与选择界面

在选定所有需要的软件包之后,单击窗口右下部的“应用”按钮,将会出现一个对话框,其中列出了用户选中的所有软件包,包括为满足依赖关系还需要安装的附加软件包,同时提请用户予以确认,如图4-4所示。

图4-4 安装软件包确认对话框

如果列出的软件包是正确的,可单击“安装”按钮。如果是普通用户,将会弹出一个“授权”对话框,提示用户输入超级用户密码,然后即可开始安装或删除选定的软件包及其相关软件包。一旦完成安装,将会弹出“运行新应用程序?”对话框,此时可以单击“运行”按钮立即运行,或单击“关闭”按钮,结束软件包的安装或删除,如图4-5所示。

图4-5 “运行新应用程序?”对话框

4.4.2 配置软件源

PackageKit采用yum软件仓库作为软件源。选择“系统→软件源”菜单,可以查询系统配置的所有软件仓库,如图4-6所示。“软件源”对话框会给出数据仓库的名字,这个名字等同于/etc/yum.conf主配置文件和/etc/yum.repos.d目录中所有数据仓库配置文件中的name变量值。

图4-6 “软件源”对话框

“启用”一栏对应于数据仓库配置文件中的enabled变量,勾选“启用”一栏的复选框表示启用相应的软件仓库,取消勾选表示禁用相应的软件仓库。由于需要修改软件仓库的配置文件,故在选择软件源时会提示用户输入超级用户的密码。取决于enabled变量是否存在,PackageKit实际上将会在相应的配置文件中插入一个“enabled=1”或“enabled=0”配置变量,或修改配置变量的设置。这意味着利用“软件源”对话框修改软件源将会在关闭对话框之后彻底启用或禁用相应的软件仓库。注意,不能使用PackageKit增加或删除数据仓库。

勾选“软件源”对话框底部的“显示调试及开发软件来源”复选框,PackageKit还会显示源RPM、testing和debuginfo等软件仓库。

在启用或禁用选定的yum数据仓库之后,选择“系统→刷新软件包列表”菜单,PackageKit即可从启用的软件源中获取最新的、可用的软件包。

4.4.3 利用过滤器检索软件包

在更新软件源之后,可以采用过滤条件加速查询,尽快获得检索结果。单击“过滤”菜单,其中提供7个过滤条件,可用于快速检索匹配的软件包。PackageKit开始运行时,这些过滤条件通常并未启用。一旦设置,在改变或关闭PackageKit之前,将会一直保持最近一次的设置。

假定我们主要检索系统中尚未安装的、可用的更新软件包,可以单击“过滤”菜单,选择“已安装”,然后选择“仅可用软件包”。

除非需要开发软件,因而需要C语言头文件,否则可以选择过滤条件“开发→仅最终用户文件”,便会过滤掉pkgname-devel之类的软件包。

另外两个过滤条件是“图形界面”和“自由”。“图形界面”主要用于检索提供GUI图形界面的应用程序。“自由”用于检索自由软件。最后3个过滤条件总是处于勾选或取消状态,分述如下:

· 隐藏子软件包 —— 勾选“隐藏子软件包”将会过滤掉依赖于指定软件包的附加软件包。例如,当检索 pkgname 时,将会过滤掉 pkgname-devel、pkgname-libs、pkgname-libs-devel或pkgname-debuginfo等软件包。

· 仅最新软件包 —— 勾选“仅最新软件包”可以过滤掉版本较老的软件包,而这正是我们所期望的。勾选“仅最新软件包”之后,除了最新版的软件包,将会过滤掉所有的软件包。这个过滤条件经常与“仅可用软件包”过滤条件组合使用,检索尚未安装的、可用的最新软件包。

· 仅原生(native)软件包 —— 勾选“仅原生软件”将会过滤可在兼容模式下运行的软件包,选择严格匹配特定机型的软件包(但仍会检索出noarch类型的软件包)。

4.4.4 安装或删除软件组

利用软件增删工具也可以安装或删除软件组。在“添加/删除软件”窗口的左侧窗格中单击“软件包集”,可以检索需要安装或删除的软件组。例如,如果想要安装Eclipse软件开发工具,可在右上方的窗格中勾选“Eclipse”左侧的复选框,然后单击“应用”按钮,如图4-7所示。

图4-7 软件组检索与选择界面

之后将会出现一个对话框,其中列出了用户选中的所有软件包,包括为满足依赖关系还需要安装的附加软件包,同时提请用户予以确认,如图4-8所示。

图4-8 软件组安装确认对话框

同样,通过选择“软件包集”,清除勾选的软件组,然后单击“应用”按钮,也可以删除已安装的整个软件组。

4.5 更新软件包

利用系统提供软件更新工具也可以浏览或更新软件。

4.5.1 更新软件包

当存在可用的更新软件包时,GNOME桌面右上角的信息公告区将会出现一个橘黄色星云状的软件更新图标,提示用户更新已安装的软件包,如图4-9所示。

图4-9 软件更新图标

单击信息公告区中的软件更新图标,从GNOME桌面中选择“系统→管理→软件更新”菜单,或在命令行中运行gpk-update-viewer命令,即可打开“软件更新”窗口。“软件更新”窗口将会列出当前系统中已经安装且存在可供更新的软件包,包括软件包的名字、版本、适用的机型及简单的更新说明。如果不想安装其中的任何软件包,可以单击软件包名字左侧的复选框,清除其中的对钩“√”,如图4-10所示。

图4-10 “软件更新”窗口

注意,在单击“安装更新”按钮之前,“软件更新”窗口不会显示其底层依赖的支撑软件包。单击“安装更新”按钮之后,即可开始更新软件包。如果是普通用户,之前还需要按照提示输入超级用户的密码。

4.5.2 设置更新检查的时间间隔

右击信息公告区的PackageKit软件更新图标,选择“首选项”菜单,弹出“软件更新首选项”对话框。在此对话框中,可以设置软件包更新检查的时间间隔,以及设置是否需要自动安装所有更新或仅安装安全更新软件包等。一般不要勾选“使用移动宽带时检查更新”复选框,以减轻无线网负载及由此产生的费用,如图4-11所示。

图4-11 设置更新检查的时间间隔

4.6 RHN网站

RHN(Red Hat Network)是一种Internet解决方案,用于管理和维护Red Hat Enterprise Linux系统。所有的纠错警报,如安全警报、补丁警报及功能增强警报等,都可以利用“软件更新”对话框,从RHN网站(https://rhn.redhat.com)中直接下载,如图4-12所示。

图4-12 RHN网站

RHN可以节省用户的时间,在发布更新软件包之后,用户就会立即收到电子邮件,无需用户上网查询。通常,RHN也会帮助用户安装软件包,用户无需了解如何使用rpm等软件工具,也无需担心如何解决软件包的依赖关系,这一切都可由RHN代为实现。

RHN具有下列特点:

· 纠错警报 —— 及时了解Red Hat发布的安全警报、纠错警报和增强警报等。

· 电子邮件通知 —— 在发布纠错警报之后,用户会立即收到电子邮件通知。

· 定期纠错更新 —— 定期提供纠错更新。

· 软件包安装 —— 一键式完成软件包的安装。

· 软件更新 —— 利用“软件更新”对话框下载、安装最新的软件包。

· RHN网站 —— 管理多个系统,下载单个软件包,采用安全的浏览器连接实现软件包的纠错与更新。

在访问http://www.redhat.com/apps/activate网站,激活订购的产品,注册到RHN之后,即可收到纠错更新。注册过程将会收集系统安装的软件信息,确保用户能够收到相应的更新信息。第一次引导系统时,“设置软件更新”对话框将会提示、引导用户注册。如果此时没有注册,还可以从GNOME桌面中选择“系统→管理→RHN注册”菜单、“系统→管理→软件更新”菜单,或在命令行中运行“yum update”命令,再次启动注册过程,如图4-13所示。

图4-13 注册到RHN

注册之后,可以采用下列方式之一,接收软件更新信息:

· 从GNOME桌面中选择“系统→管理→软件更新”菜单。

· 在命令行中运行“yum update”命令。

· 访问RHN网站(https://rhn.redhat.com)。

· 当GNOME桌面信息公告区出现软件更新图标时,单击该图标打开“软件更新”对话框。