Red Hat Enterprise Linux 6.4网络操作系统详解
上QQ阅读APP看书,第一时间看更新

3.2 项目实施

3.2.1 任务1 管理Tarball

在我们了解了源码的相关信息之后,接下来就是如何使用具有源码的Tarball来创建一个属于自己的软件了。从前面几个小节的说明当中,我们知道其实Tarball的安装是可以跨平台的,因为C语言的程序代码在各个平台上面是相通的,只是需要的编译器可能并不相同,例如Linux上面用gcc而Windows上面也有相关的C编译器。所以,同样的一组源码,既可以在CentOS Linux上面编译,也可以在SuSE Linux上面编译,当然,也可以在大部分的Unix平台上面编译成功。

如果没有编译成功怎么办?很简单,通过修改小部分的程序代码(通常是很小部分的变动)就可以进行跨平台的移植了。也就是说,刚刚我们在Linux下面写的程序理论上是可以在Windows上面进行编译的,这就是源码的好处。

1.使用源码管理软件所需要的基础软件

要制作一个二进制程序需要很多东西。包括下面这些基础的软件。

1)gcc或cc等C语言编译器(compiler)

没有编译器怎么进行编译的操作?所以C compiler是一定要有的。Linux上面有众多的编译器,其中以GNU的gcc为首选的自由软件编译器。事实上很多在Linux平台上面发展的软件源码,均是以gcc为根据来设计的。

2)make及autoconfig等软件

一般来说,以Tarball方式发布的软件当中,为了简化编译的流程,通常都是配合make这个命令来依据目标文件的相关性而进行编译,而Make需要Makefile这个文件的规则。由于不同的系统里面具有的基础软件环境可能并不相同,所以就需要检测使用者的操作环境,以便自行创建一个Makefile文件。这个自行检测的小程序也必须借由autoconfig这个相关的软件来辅助。

3)Kernel提供的Library以及相关的Include文件

很多的软件在发展的时候是直接取用系统内核提供的函数库与Include文件的,这样才可以与操作系统兼容。尤其是在驱动程序方面的模块,例如网卡、声卡、U盘等驱动程序在安装的时候,常常需要内核提供相关信息。在Red Hat的系统当中(包含Fedora/CentOS等系列),内核相关的功能通常包含在kernel-source或kernel-header这些软件当中,所以需要安装这些软件。

假如已经安装好一台Linux主机,但是使用的是默认值安装的软件,所以没有make、gcc等,该如何解决这个问题?由于目前使用最广泛的CentOS/Fedora或Red Hat是使用RPM(很快会介绍)来安装软件的,所以,只要拿出当初安装Linux时的原版光盘,然后使用RPM安装到Linux主机里面就可以了。使用yum会更加方便地进行安装。

在RedHat当中,如果已经连上了Internet,那么就可以使用yum了。通过yum的软件群组安装功能,可以执行以下操作:

• 如果是要安装gcc等软件开发工具,请使用yum groupinstall“Development Tools”;

• 若待安装的软件需要图形界面支持,一般还需要yum groupinstall“X Software Development”;

• 若安装的软件较旧,可能需要yum groupinstall“Legacy Software Development”。

2.Tarball安装的基本步骤

以Tarball方式发布的软件需要重新编译可执行的二进制程序,而Tarball是以tar这个命令来打包与压缩文件,所以需要先将Tarball解压缩,然后到源码所在的目录下创建Makefile,再以make来进行编译与安装的操作。

整个安装的基本操作步骤如下。

(1)取得原始文件:将Tarball文件在/usr/local/src目录下解压缩。

(2)取得相关安装信息:进入新创建的目录下面,查阅INSTALL或README等相关文件内容(很重要的步骤!)。

(3)相关属性软件安装:根据INSTALL或README的内容查看并安装好一些相关的软件(非必要)。

(4)创建Makefile:以自动检测程序(configure或config)检测操作环境,并创建Makefile这个文件。

(5)编译:使用make这个程序并以该目录下的Makefile作为参数配置档,来进行make(编译或其他)的动作。

(6)安装:使用make程序和Makefile参数配置文件,依据install这个目标(target)指定安装到正确的路径。

安装时需重点注意步骤(2), INSTALL或README通常会记录这个软件的安装要求、软件的工作项目、软件的安装参数配置及技巧等,只要仔细的读完这些文件,基本上能正确安装Tarball的文件,不会出什么大问题。

Makefile在制作出来之后,里面会有很多的目标(target),最常见的就是install与clean。通常“make clean”代表着将目标文件(object file)清除掉,“make”则是将源码进行编译。

注意:编译完成的可执行文件与相关的配置文件还在源码所在的目录当中。因此,最后要进行“make install”来将编译完成的所有文件都安装到正确的路径,这样才可以使用该软件。

大部分Tarball软件的安装的命令执行方式如下。

1)./configure

这个步骤的结果是创建Makefile这个文件。通常程序开发者会写一个脚本(scripts)来检查Linux系统、相关的软件属性等,这个步骤相当重要,因为安装信息是这一步骤完成的。另外,这个步骤的相关信息需要参考该目录下的README或INSTALL相关的文件。

2)make clean

make会读取Makefile中关于clean的工作。这个步骤不一定会有,但是最好运行一下,因为这个步骤可以去除目标文件。在不确定源码里面是否包含上次编译过的目标文件(*.o)存在的情况下,所以清除一下比较妥当。

3)make

make会依据Makefile中的默认工作进行编译。编译的工作主要是使用gcc将源码编译成为可以被执行的目标文件(object files),但是这些object files通常需要函数库链接(link)后,才能产生一个完整的可执行文件。使用make的目的就是要将源码编译成可执行文件,而这个可执行文件会放置在目前所在的目录下,尚未被安装到预定安装的目录中。

4)make install

通常这是最后的安装步骤。make会依据Makefile这个文件里面关于install的项目,将上一个步骤所编译完成的数据安装到预定的目录中,最后完成安装。

以上步骤是逐步进行的,只要其中一个步骤无法成功完成,那么后续的步骤就完全没有办法进行。因此,要确定上一步骤是成功的才可以继续进行下一步骤。

举例来说,在make过程中无法成功,而表示原始文件无法被编译成可执行文件,而make install主要是将编译完成的文件放置到文件系统中,既然没有可用的执行文件,安装就无法进行。

此外,如果安装成功,并且安装在一个独立的目录中,例如,/usr/local/packages目录,那么需要手动将这个软件的man page写入/etc/man.config里面去。

3.Tarball软件安装的建议事项(如何删除与升级)

在默认的情况下,Linux distribution发布安装的软件大都是在/usr里面的,而使用者自行安装的软件则建议放置在/usr/local里面。这是基于管理使用者所安装软件的便利性所考虑的。因此,Tarbau要在/usr/local/src里面进行解压缩。

几乎每个软件都会提供线上说明的服务,即info与man的功能。在默认的情况下,man会去搜寻/usr/local/man里面的说明文件,因此,如果将软件安装在/usr/local下面,那么自然安装完成之后,该软件的说明文件就可以被找到了。

建议大家将安装的软件放置在/usr/local下,源码(Tarball)放置在/usr/local/src(src为source的缩写)下面。

以apache这个软件来说明(apache是WWW服务器软件)Linux distribution默认的安装软件的路径:

•/etc/httpd;

•/usr/lib;

•/usr/bin;

•/usr/share/man。

软件一般放置在etc、lib、bin、man目录中,分别代表配置文件、函数库、执行文件、线上说明文件。但使用Tarball来安装软件时,如果是放在默认的/usr/local里面,由于/usr/local原来就默认以上四个目录,所以数据的安放目录为:

•/usr/local/etc;

•/usr/local/bin;

•/usr/local/lib;

•/usr/local/man。

但是如果每个软件都选择在这个默认的路径下安装,那么所有软件的文件都会放置在这四个目录中,若以后想要升级或删除的时候,就会比较难以查找文件的来源。而如果在安装的时候选择的是单独的目录,例如,将apache安装在/usr/local/apache中,那么文件目录就会变成以下四种:

•/usr/local/apache/etc;

•/usr/local/apache/bin;

•/usr/local/apache/lib;

•/usr/local/apache/man。

单一软件的文件都在同一个目录之下,如果要删除该软件就简单多了,只要将该目录删除即可视为该软件已经被删除。例如,要删除apache只要执行“rm-rf/usr/local/apache”即可。当然,实际安装的时候还要依据该软件的Makefile里面的install信息来确定安装情况。

这个方式虽然有利于软件的9删除,但是在执行某些命令的时候,与该命令是否在PATH环境变量所记录的路径有关。例如,/usr/local/apache/bin肯定是不在PATH里面的,所以执行apache的命令就要利用绝对路径,否则就需要将/usr/local/apache/bin加入PATH里面。同样地,/usr/local/apache/man也需要加入man page搜寻的路径中。

由于Tarball在升级与安装上面具有这些特色,同时Tarball在反安装上面具有比较高的难度,所以为了方便Tarball的管理,建议使用者注意以下几点。

(1)最好将Tarball的原始数据解压缩到/usr/local/src当中。

(2)安装时,最好安装到/usr/local这个默认路径下。

(3)考虑未来的反安装步骤,最好可以将每个软件单独的安装在/usr/local下面。

(4)将安装到单独目录的软件的man page加入man path搜寻。

如果安装的软件路径为/usr/local/software/,那么man page搜寻的配置中,在/etc/man.config内的40~50行处,可用如下命令:

        MANPATH /usr/local/software/man

这样才可以使用man来查询该软件的线上文件。

4.范例

通过安装网络时间协议服务器NTP(network time protocol)来讲解如何利用Tarball进行软件的安装。

请先到http://www.ntp.org/downloads.html这个目录去下载文件(ntp-4.2.6p5. tar.gz),请下载最新版本的文件。

假设软件安装的要求如下:

(1)ntp-4.2.6p5.tar.gz这个文件放置在/root目录下;

(2)源码解压缩在/usr/local/src下面;

(3)NTP服务器需要安装到/usr/local/ntp目录中。

下面是安装步骤。

(1)解压缩下载Tarball,并参阅README/INSTALL文件。

        [root@www ~]    # cd /usr/local/src                  <==切换目录
        [root@www src]  # tar -zxvf /root/ntp-4.2.6p5.tar.gz <==解压缩到此目录
        ntp-4.2.6p5/                                       <==会创建这个目录
        ntp-4.2.6p5/libopts/
        ...(下面省略)...
        [root@www src]  # cd ntp-4.2.6p5/
        [root@www ntp-4.2.6p5] # vim INSTALL                 <==同时README也要参阅
        #特别看一下 28行到 54行之间的安装简介。同时可以了解安装的流程

(2)检查configure支持参数,并实际建立Makefile规则文件。

      [root@www ntp*]# ./configure --help |more  <==查询可用的参数有哪些
        --prefix=PREFIX        install architecture-independent files in PREFIX
        --enable-all-clocks    +include all suitable non-PARSE clocks:
        --enable-parse-clocks  -include all suitable PARSE clocks:
      #上面列出的是比较重要的,或者是可能需要的参数功能
      [root@www ntp*]#./configure --prefix=/usr/local/ntp \  #命令一行写不下,转义
      >--enable-all-clocks --enable-parse-clocks
      #<==开始创建Makefile
      checking for a BSD-compatible install.../usr/bin/install -c
      checking whether build environment is sane...yes
      ...(中间省略)...
      checking for gcc...gcc             <==gcc编译器
      ...(中间省略)...
      config.status: creating Makefile
      config.status: creating config.h
      config.status: executing depfiles commands

一般来说,configure配置参数比较重要的是--prefix=/path, --prefix后面的路径即为软件未来要安装到的目录。如果没有指定--prefix=/path,通常默认参数就是/usr/local。其他的参数意义请参考./configure--help。这个操作完成之后会产生makefile或Makefile文件。当然,检测检查的过程会显示在屏幕上。请特别留意关于gcc的检查,以及成功地创建Makefile。

(3)编译与安装。

      [root@www ntp*]# make clean; make
      [root@www ntp*]# make check
      [root@www ntp*]# make install
      #将数据安装在/usr/local/ntp下

3.2.2 任务2 使用RPM软件管理程序

RPM的使用其实不难,只要使用rpm这个命令即可。

1.RPM默认安装的路径

一般来说,RPM类型的文件在安装的时候,会先去读取文件内记载的配置参数内容,然后将该数据用来比对Linux系统的环境,以找出是否有属性依赖的软件尚未安装的问题。例如Openssh连接软件需要通过Openssl密软件,所以需要安装openssl之后才能安装openssh。

若环境检查合格,RPM文件就可以安装到Linux系统上。安装完毕后,该软件相关的信息就会被写入/var/lib/rpm/目录下的数据库文件中,这个目录内的数据很重要,因为未来有任何软件升级的需求,版本之间的比较就是来自于这个数据库,查询系统已经安装的软件,也是从这个数据库查询的。此外,目前的RPM也提供数字签名信息,这些数字签名也是在这个目录内记录的。所以,这个目录十分重要,不可轻易删除。

那么软件内的文件到底是存放在哪呢?当然与文件系统有关。表3-4是一些重要目录的意义,这里再次地强调。

表3-4 重要目录的含义

2.RPM安装(install)

因为安装软件是root的工作,因此只有root的身份才能够操作rpm命令。用rpm安装软件很简单。假设需要安装一个文件名为rp-pppoe-3.5-32.1.i386.rpm的文件,可用如下命令:

        [root@www ~]# rpm -i rp-pppoe-3.8-32.1.i386.rpm

不过,这样的参数其实无法显示安装的进度,所以,通常会使用如下命令:

        [root@www~]# rpm -ivh package_name

选项与参数:

-i:install。

-v:察看更细部的安装信息画面。

-h:以安装信息列显示安装进度。

【例3-1】 安装rp-pppoe-3.8-32.1.i386.rpm。

        [root@www~]# rpm -ivh rp-pppoe-3.5-32.1.i386.rpm
        Preparing...   ######################################[100%]
          1:rp-pppoe  ######################################[100%]

【例3-2】 安装两个以上的软件时,命令如上。

      [root@www~]# rpm -ivh a.i386.rpm b.i386.rpm *.rpm
      #后面直接接多种软件文件

【例3-3】 直接由网络上面的某个文件安装,以网址来安装。

        [root@www ~]# rpm -ivh http://website.name/path/pkgname.rpm

另外,如果我们在安装的过程当中发现问题,或者已经知道会发生的问题,而还是需要“强行”安装这个软件时,可以使用如下的参数“强制”安装,如表3-5所示。

表3-5 rpm安装时常用的选项与参数说明

参数比较多,建议直接使用-ivh。如果安装的过程中发现问题,一个一个去将问题找出来,尽量不要使用“暴力安装法”,即通过--force去强制安装。因为可能会发生很多不可预期的问题。

【例题】 在没有网络的前提下,如果要安装一个名为pam-devel的软件,但是却只有原版光盘,该如何操作?

答案:可以通过挂载原版光盘来进行数据的查询与安装。请将原版光盘放入光驱,尝试将光盘挂载到/media当中,然后进行软件下载操作。

(1)挂载光盘,使用如下命令:

        mount /dev/cdrom /media

(2)找出文件的实际路径:

      find /media-name 'pam-devel*'

(3)测试此软件是否具有依赖性:

        rpm -ivh pam-devel...--test

(4)直接安装:

        rpm -ivh pam-devel...

(5)卸载光盘:

        umount /dev/cdrom

该实例在RHEL6中的运行如下所示。

        [root@localhost ~]# mount /dev/cdrom /media
        mount: block device /dev/cdrom is write-protected, mounting read-only
        [root@localhost ~]# cd /media/Server
        [root@localhost Server]# find /media -name 'pam-devel*'
        /media/Server/pam-devel-0.99.6.2-6.el5.i386.rpm
        [root@localhost Server]# rpm -ivh pam-devel-0.99.6.2-6.el5.i386.rpm --test
        warning: pam-devel-0.99.6.2-6.el5.i386.rpm: Header V3 DSA signature: NOKEY, key
        ID 897da07a
        Preparing...         ###########################################[100%]
        [root@localhost Server]# rpm -ivh pam-devel-0.99.6.2-6.el5.i386.rpm
        warning: pam-devel-0.99.6.2-6.el5.i386.rpm: Header V3 DSA signature: NOKEY, key
        ID 897da07a
        Preparing...          ###########################################[100%]
          1:pam-devel        ###########################################[100%]

在RHEL6系统中,刚好这个软件没有属性依赖的问题,因此软件可以顺利地进行安装。

3.RPM升级与更新(upgrade/freshen)

使用RPM升级的操作相对简单,以-Uvh或-Fvh来升级即可,而-Uvh与-Fvh可用的选项与参数,跟install是一样的。不过,-U与-F的意义还是有所不同,基本的差别如表3-6所示。

表3-6-Uvh和-Fvh两个参数的含义

由以上说明可知,如果需要大量地升级系统旧版本的软件时,使用-Fvh是比较好的选择,因为没有安装的软件不会被不小心安装进系统中。但是需要注意的是,如果使用的是-Fvh,而系统中没有这个软件,那么该软件不能直接安装在Linux主机上,必须重新以ivh来安装。

在进行整个操作系统的旧版软件修补与升级时,一般进行如下操作:

• 先到各开发商的errata网站或者是国内的FTP映像站下载最新的RPM文件。

• 使用-Fvh来将系统内曾安装过的软件进行修补与升级。

另外,升级也可以利用--nodeps/--force等参数。

4.RPM查询(query)

对于系统中已经安装的软件,RPM实查询的是/var/lib/rpm/这个目录下的数据库文件。另外,RPM也可以查询系统中未安装软件的RPM文件内的信息。RPM查询命令如下。

        [root@www ~]# rpm -qa                            <==已安装软件
        [root@www ~]# rpm -q[licdR]已安装的软件名称        <==已安装软件
        [root@www ~]# rpm -qf存在于系统上面的某个文件名     <==已安装软件
        [root@www ~]# rpm -qp[licdR]未安装的某个文件名称   <==查阅RPM文件

选项与参数的含义如下。

1)查询已安装软件的信息

-q:仅查询后面接的软件名称是否安装。

-qa:列出所有的已经安装在本机Linux系统上面的所有软件名称。

-qi:列出该软件的详细信息(information),包含开发商、版本与说明等。

-ql:列出该软件所有的文件与目录所在完整文件名(list)。

-qc:列出该软件的所有配置文件(找出在/etc/下面的文件名)。

-qd:列出该软件的所有说明文件(找出与man有关的文件)。

-qR:列出与该软件有关的依赖软件所含的文件(Required)。

-qf:由后面接的文件名称找出该文件属于哪一个已安装的软件。

2)查询某个RPM文件内含有的信息

-qp[icdlR]:-qp后面接的所有参数与(1)中说明一致。但用途仅在于找出某个RPM文件内的信息,而非已安装的软件信息。

在查询的部分,所有的参数之前都需要加上-q。查询主要分为两部分,一个是查询已安装到系统上面的软件信息,这部分的信息都是由/var/lib/rpm/所提供。另一个则是查某个rpm文件内容,即在RPM文件内找出一些要写入数据库内的信息,这部分就要使用-qp(p是package的意思)。示例如下所示。

【例3-4】 找出你的Linux是否安装logrotate这个软件。

        [root@www ~]# rpm -q logrotate
        logrotate-3.7.8-9
        [root@www ~]# rpm -q logrotating
        package logrotating is not installed
        #注意到,系统会去找是否安装了后面接的软件名称。注意,没有必要加上版本!通过显示的结果,
        可以判定有没有安装logrotate这个软件

【例3-5】 列出例3-4中属于该软件所提供的所有目录与文件。

        [root@www ~]# rpm -ql logrotate
        /etc/cron.daily/logrotate
        /etc/logrotate.conf
        ...(以下省略)...
        #可以看出该软件到底提供了多少文件与目录,也可以追踪软件的数据

【例3-6】 列出logrotate这个软件的相关说明数据。

        [root@www~]# rpm -qi logrotate
        Name        : logrotate            Relocations: (not relocatable)
        Version    : 3.7.4                     Vendor: CentOS
        Release    : 8             Build Date: Sun 02 Dec 2007 08:38:06 AM CST
        Install Date: Sat 09 May 2009 11:59:05 PM CST    Build Host: builder6
        Group       : System Environment/Base  Source RPM: logrotate-3.7.8-8.src.rpm
        Size        : 53618                    License: GPL
        Signature  : DSA/SHA1, Sun 02 Dec 2007 09:10:01 AM CST, Key ID a8a447dce8562897
        Summary    : Rotates, compresses, removes and mails system log files.
        Description:
        The logrotate utility is designed to simplify the administration of
        log files on a system which generates a lot of log files.  Logrotate
        allows for the automatic rotation compression, removal and mailing of
        log files.  Logrotate can be set to handle a log file daily, weekly,
        monthly or when the log file gets to a certain size.  Normally,
        logrotate runs as a daily cron job.
        Install the logrotate package if you need a utility to deal with the
        log files on your system.
        #列出该软件的information (信息),包括了软件名称、版本、开发商、SRPM文件名称、打包次数、
          简单说明信息、软件打包者、安装日期等。如果想要详细地知道该软件的数据,可以用这个参数来
          了解一下

【例3-7】 分别找出logrotate的配置文件与说明文件。

        [root@www ~]# rpm -qc logrotate
        [root@www ~]# rpm -qd logrotate

【例3-8】 若要成功安装logrotate,还需要以下代码。

        [root@www ~]# rpm -qR logrotate
        /bin/sh
        config(logrotate) =3.7.4-8
        libc.so.6
        ...(以下省略)...
        #由这里看,还需要很多文件的支持!

【例3-9】 由例3-8找出/bin/sh是哪个软件提供的?

        [root@www ~]# rpm -qf /bin/sh
        bash-3.2-24.el5
        #这个参数后面接的是"文件"!不像前面都是接软件!
        #这个功能是查询系统的某个文件属于哪一个软件。在解决依赖关系时用处很大(知道所依赖的模
        块属于哪个软件才能安装这个软件)

【例3-10】 假设下载了一个RPM文件,想要知道该文件的需求文件,该如何操作?

        [root@www~]# rpm -qpR filename.i386.rpm
        # 加上 -qpR,找出该文件需求的数据

常见的查询就是以上这些。需要特别说明的是,在查询本机上面的RPM软件相关信息时,不需要加上版本的名称,只要加上软件名称即可,因为它会到/var/lib/rpm这个数据库里面去查询。但是查询某个RPM文件就不同了,必须要列出整个文件的完整文件名才行。这一点读者朋友们常常会搞错。下面我们就来做几个简单的练习来巩固下所学的知识。

【习题】

(1)想要知道系统当中,以c开头的软件有几个,如何操作?

(2)WWW服务器为Apache, RPM软件文件名为httpd。如果想要知道这个软件的所有配置文件放在何处,可以怎么操作?

(3)承上题,如果查出来的配置文件已经被改过,但是忘记了曾经修改过哪些地方,所以想要直接重新安装一次该软件,该如何操作?

(4)如果误删了某个重要文件,例如,/etc/crontab,却不知道它属于哪一个软件,该怎么办?

分析:

(1)rpm-qa|grep ^c|wc-l。

(2)rpm-qc httpd。

(3)假设该软件在网络上的网址为:http://web.site.name/path/httpd-x.x.xx. i386.rpm

则解决方案为:

        rpm -ivh http://web.site.name/path/httpd-x.x.xx.i386.rpm --replacepkgs

(4)虽然已经没有这个文件了,不过没有关系,因为RPM在/var/lib/rpm数据库当中有记录。所以执行:

        rpm -qf /etc/crontab

就可以知道是哪个软件了,重新安装一次该软件即可。

5.RPM反安装与重建数据库(erase/rebuilddb)

反安装就是将软件卸载。要注意的是,反安装的过程一定要由最上一级往下删除。以rp-pppoe为例,这一软件主要是依据ppp这个软件来安装的,所以当要卸载ppp的时候,就必须要先卸载rp-pppoe才行,否则就会发生结构上的问题。正如要拆除五、六楼,由六楼拆起是一个道理。

移除的选项很简单,通过-e即可移除。不过,通常发生软件属性依赖导致无法移除某些软件的问题。以下面的例子来说明。

【例3-11】 找出与pam有关的软件名称,并尝试移除pam这个软件。

        [root@www ~]# rpm -qa |grep pam
        pam_krb5-2.2.14-10
        pam-0.99.6.2-6.el5
        pam_pkcs11-0.5.3-23
        pam-devel-0.99.6.2-6.el5
        pam_ccreds-3-5
        pam_passwdqc-1.0.2-1.2.2
        pam_smb-1.1.7-7.2.1
        [root@www ~]# rpm -e pam
        error: Failed dependencies:     <==这里提到的是依赖性的问题
              libpam.so.0 is needed by (installed) coreutils-5.97-14.el5.i386
              libpam.so.0 is needed by (installed) libuser-0.54.7-2.el5.5.i386
        ...(以下省略)...

【例3-12】 仅移除例3-11安装上的软件pam-devel。

        [root@www~]# rpm -e pam-devel     <==不会出现任何信息!
        [root@www~]# rpm -q pam-devel
        package pam-devel is not installed

从例3-11知,pam所提供的函数库是很多软件共同使用的,因此不能移除pam,除非将其他依赖软件同时也全部移除。当然也可以使用--nodeps来强制移除,不过,如此一来所有会用到pam函数库的软件,都将成为无法运行的程序,主机也就不能用了!由例3-12可知,由于pam-devel是依赖于pam的开发工具,可以单独安装与单独移除。

由于RPM文件常常会被安装、移除或升级等,某些操作可能会导致RPM数据库(/var/lib/rpm/)内的文件受损。如果是这样,那该如何挽救呢?可以使用--rebuilddb这个选项来重建一下数据库。命令如下:

        [root@www~]# rpm --rebuilddb     <==重建数据库

3.2.3 任务3 使用yum

在项目三开始的地方谈到过yum, yum是通过分析RPM的标题数据后,根据各软件的相关性制作出属性依赖时的解决方案,然后可以自动处理软件的依赖属性问题,以解决软件安装、移除或升级的问题。详细的yum服务器与用户端之间的沟通,可以参见图3-1的说明。

由于distributions必须先发布软件,然后将软件放在yum服务器上面,供用户端进行安装与升级之用。因此想要使用yum的功能,必须要先找到适合的yum server。而每个yum server可能会提供许多不同的软件功能,即之前谈到的“容器”。因此,必须前往yum server查询到相关的容器网址后,再继续处理后续的配置工作。

事实上RHEL发布出软件时已经制作出多部映射站点(mirror site)提供给全世界的用户进行软件升级之用。所以,理论上不需要处理任何配置值,只要能够连上Internet,就可以使用yum。下面作详细介绍。

1.制作本地yum源

其实rhel6系统安装的时候已经有yum了,但如果没有花钱购买软件,也就无法注册,红帽官方的yum源也将不能应用。那么有什么解决方法呢?

第一种方法是把yum的更新地址改成开源的即可。限定yum更新地址的文件在/etc/yum.repos.d/里。具体的内容请参考相关资料。

第二种方法是利用已有的ISO镜像制作本地yum源。

下面以第二种方法为例介绍。

(1)挂载ISO安装镜像。

        //挂载光盘到 /iso下
        [root@rhel6~]# mkdir  /iso
        [root@rhel6~]# mount  /dev/cdrom  /iso

(2)制作用于安装的yum源文件。

        [root@rhel6~]# vim  /etc/yum.repos.d/dvd.repo

dvd.repo文件的内容如下:

        #/etc/yum.repos.d/dvd.repo
        #or for ONLY the media repo, do this:
        #yum --disablerepo=\* --enablerepo=c8-media [command]
        [dvd]
        name=dvd
        baseurl=file:///iso            //特别注意本地源文件的表示,3个“/”。
        gpgcheck=0
        enabled=1

各选项的含义如下所示。

•[base]:代表容器的名字。中括号一定要存在,里面的名称则可以随意取。但是不能有两个相同的容器名称,否则yum会不知道该到哪里去找容器相关软件的清单文件。

• name:只是说明一下这个容器的意义,重要性不高。

• mirrorlist=:列出这个容器可以使用的映射站点,如果不想使用,可以注解这行。

• baseurl=:这个最重要,因为后面接的就是容器的实际网址。mirrorlist是由yum程序自行去搜寻映射站点,baseurl则是指定固定的一个容器网址。上例中使用了本地地址。如果使用网址,格式为baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/

• enable=1:让这个容器启动。如果不想启动可以使用enable=0。

• Xgpgcheck=1:指定是否需要查阅RPM文件内的数字签名。

• gpgkey=:数字签名的公钥文件所在位置,使用默认值即可。

提示:如果没有购买RHEL的服务,请一定配置本地yum源。或者配置开源的yum源。

2.修改容器产生的问题与解决方法

我们首先看一下系统默认的配置文件。

        [root@localhost yum.repos.d]#vim rhel-debuginfo.repo
        [rhel-debuginfo]
        name=Red Hat Enterprise Linux $releasever-$basearch-Debug
        baseurl=ftp://ftp.redhat.com/pub/redhat/linux/enterprise/$releasever/en/os/
        $basearch/Debuginfo/
        enabled=0
        gpgcheck=1
        gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

如果修改系统默认的配置文件,比如修改了网址却没有修改容器名称(中括号内的文字),可能就会造成本机的清单与yum服务器的清单不同步,此时就会出现无法升级的问题了。

那该如何解决?很简单,通过清除掉本机上面的旧数据即可!不需要手动处理,通过yum的clean项目来处理即可。

        [root@www~]#yum clean [packages|headers|all]

选项与参数如下。

packages:将已下载的软件文件删除;

headers:将下载的软件文件头删除;

all:将所有容器数据都删除。

【例3-13】 删除已下载过的所有容器的相关数据(含软件本身与清单):

        [root@www~]#yum clean all

注意:“yum clean all”是经常使用的一个命令。

3.利用yum进行查询、安装、升级与移除功能

1)查询功能

        yum [list|info|search|provides|whatprovides]参数

利用yum来查询原版distribution所提供的软件,或已知某软件的名称,想知道该软件的功能,可以利用yum提供的相关参数。

        [root@www~]#yum [option] [查询工作项目] [相关参数]

其中[option]主要的选项包括以下几种。

•--y:当yum需要等待使用者输入时,这个选项可以自动提供yes的回应。

•--installroot=/some/path:将软件安装在/some/path而不使用默认路径[查询工作项目][相关参数],这方面的参数如下所示。

• search:搜寻某个软件名称或者是描述(description)的重要关键字。

• list:列出目前yum所管理的所有的软件名称与版本,有点类似rpm-qa。

• info:同上,不过有点类似rpm-qai的运行结果。

• provides:从文件去搜寻软件,类似rpm-qf的功能。

【例3-14】 搜寻磁盘阵列(raid)相关的软件有哪些。

        [root@www~]# yum search raid
        ...(前面省略)...
        mdadm.i386 : mdadm controls Linux md devices (software RAID arrays)
        lvm2.i386 : Userland logical volume management tools
        ...(后面省略)...
        #在冒号(:)左边的是软件名称,右边的则是在RPM内的name配置(软件名)

【例3-15】 找出mdadm这个软件的功能。

      [root@www ~〗# yum info mdadm
      Installed Packages     <==这说明该软件是已经安装的
      Name   : mdadm         <==这个软件的名称
      Arch   : i386          <==这个软件的编译架构
      Version: 2.6.4         <==此软件的版本
      Release: 1.el5         <==发布的版本
      Size   : 1.7 M          <==此软件的文件总容量
      Repo   : installed     <==容器回应已安装
      Summary: mdadm controls Linux md devices (software RAID arrays)
      Descript:ion            <==与rpm -qi的作用相同
      mdadm is used to create, manage, and monitor Linux MD(software RAID)devices.As such,
      it provides similar functionality to the raidtools package.   However, mdadm is a
      single program, and it can perform almost all functions without a configuration file,
      though a configuration file can be used to help with some common tasks.

【例3-16】 列出yum服务器上面提供的所有软件名称。

        [root@www ~]#yum list
        Installed Packages <==已安装软件
        Deployment_Guide-en-US.noarch           5.2-9.el5.centos      installed
        Deployment_Guide-zh-CN.noarch           5.2-9.el5.centos      installed
        Deployment_Guide-zh-TW.noarch           5.2-9.el5.centos      installed
        ...(中间省略)...
        Available Packages <==还可以安装的其他软件
        Cluster_Administration-as-IN.noarch      5.2-1.el5.centos      base
        Cluster_Administration-bn-IN.noarch      5.2-1.el5.centos      base
        ...(下面省略)...
        #上面提供的意义为:"软件名称   版本   在哪个容器内 "

【例3-17】 列出目前服务器上可供本机进行升级的软件有哪些。

        [root@www ~]# yum list updates  <==一定要是updates
        Updated Packages
        Deployment_Guide-en-US.noarch           5.2-11.el5.centos      base
        Deployment_Guide-zh-CN.noarch           5.2-11.el5.centos      base
        Deployment_Guide-zh-TW.noarch           5.2-11.el5.centos      base
        ...(下面省略)...
        #上面列出在哪个容器内可以提供升级的软件与版本

【例3-18】 列出提供passwd这个文件的软件有哪些。

        [root@www ~]# yum provides passwd
        passwd.i386 :The passwd utility for setting/changing passwords using PAM
        #就是上面的这个软件提供了passwd这个程序

结合以上示例,通过习题来实际应用一下yum在查询上的功能。

【习题】 利用yum的功能,找出以pam为开头的软件名称有哪些?而其中尚未安装的又有哪些?

分析:可以通过如下的方法来查询。

      [root@www~]# yum list pam*
      Installed Packages
      pam.i386                     0.99.6.2-3.27.el5         installed
      pam_ccreds.i386              3-5                        installed
      pam_krb5.i386                2.2.14-1                   installed
      pam_passwdqc.i386           1.0.2-1.2.2                installed
      pam_pkcs11.i386              0.5.3-23                   installed
      pam_smb.i386                 1.1.7-7.2.1                installed
      Available Packages <==下面则是“可升级”的或“未安装”的
      pam.i386                     0.99.6.2-4.el5             base
      pam-devel.i386              0.99.6.2-4.el5             base
      pam_krb5.i386                2.2.14-10                  base

如上所示,所以可升级的有pam、pam_krb5这两个软件,完全没有安装的则是pam-devel这个软件。

2)安装/升级功能

        yum [install|update]软件

既然可以查询,那么安装与升级呢?很简单,利用install与update参数。

    [root@www~]#yum [option] [查询工作项目] [相关参数]

选项与参数如下。

install:后面接要安装的软件。

update:后面接要升级的软件,若要整个系统都升级,直接update即可。

【例3-19】 将上面习题中找到的未安装的pam-devel安装起来。

    [root@www~]#yum install pam-devel
    Setting up Install Process
    Parsing package install arguments
    Resolving Dependencies  <==先检查软件的属性依赖问题
    -->Running transaction check
    --->Package pam-devel.i386 0:0.99.6.2-4.el5 set to be updated
    -->Processing Dependency:pam=0.99.6.2-4.el5 for package:pam-devel
    -->Running transaction check
    --->Package pam.i386 0:0.99.6.2-4.el5 set to be updated
    filelists.xml.gz        100%|==================|1.6 MB    00:05
    filelists.xml.gz        100%|==================|138 kB    00:00
    ->Finished Dependency Resolution
    Dependencies Resolved
    ===============================================================
    Package      Arch      Version        Repository        Size
    ===============================================================
    Installing:
    pam-devel   i386      0.99.6.2-4.el5   base             186 k
    Updating:
    pam        i386      0.99.6.2-4.el5   base             965 k
    Transaction Summary
    ===============================================================
    Install 1 Package(s)    <==结果发现要安装此软件需要升级另一个依赖软件
    Update  1 Package(s)
    Remove  0 Package(s)
    Total download size: 1.1 M
    Is this ok [y/N]: y     <==确定要安装
    Downloading Packages: <==先下载
    (1/2): pam-0.99.6.2-4.el5100%|================|965 kB    00:05
    (2/2): pam-devel-0.99.6.2100%|================|186 kB    00:01
    Running rpm_check_debug
    Running Transaction Test
    Finished Transaction Test
    Transaction Test Succeeded
    Running Transaction    <==开始安装
      Updating  : pam             #########################[1/3]
      Installing: pam-devel       #########################[2/3]
      Cleanup   : pam             #########################[3/3]
    Installed: pam-devel.i386 0:0.99.6.2-4.el5
        Updated: pam.i386 0:0.99.6.2-4.el5
        Complete!

3)移除功能

        yum [remove]软件

【例3-20】 将例3-19中软件移除,查看会出现什么结果。

        [root@www~]#yum remove pam-devel
        Setting up Remove Process
        Resolving Dependencies  <==同样地,先解决属性依赖的问题
        -->Running transaction check
        --->Package pam-devel.i386 0:0.99.6.2-4.el5 set to be erased
        -->Finished Dependency Resolution
        Dependencies Resolved
        ==============================================================
        Package    Arch      Version        Repository      Size
        ==============================================================
        Removing:
        pam-devel   i386    0.99.6.2-4.el5   installed      495 k
        Transaction Summary
        ==============================================================
        Install   0 Package(s)
        Update    0 Package(s)
        Remove 1 Package(s)<==还好,并没有属性依赖的问题,单纯移除一个软件
        Is this ok [y/N]: y
        Downloading Packages:
        Running rpm_check_debug
        Running Transaction Test
        Finished Transaction Test
        Transaction Test Succeeded
        Running Transaction
          Erasing   : pam-devel      #########################[1/1]
        Removed: pam-devel.i386 0:0.99.6.2-4.el5
        Complete!