• 细说Linux下软件包的安装与管理


    一 源码安装方式
          由于linux操作系统开放源代码,因而在其上安装的软件大部分也都是开源软件,例如apache、tomcat、php等软件。开源软件基本都提供源码下载,源码安装的方式;源码安装的好处是用户可以自己定制软件功能,安装需要的模块,不需要的功能可以不用安装,此外,用户还可以自己选择安装路径,方便管理,卸载软件也很方便,只需删除对应的安装目录即可。没有windows所谓的注册表之说。
    源码安装软件一般有以下几个步骤组成:下载解压源码、分析安装平台环境(ifconfigure)、编译安装软件(make,make install)。下面我们分别介绍。
     

    1.1 下载解压源码
          linux下软件的源码一般都是C或者C++语言编写的,并且都会在软件的官方网站上提供源码包下载,例如apache开源项目的官方网站为http://www.apache.org,此外在网上的很多开源社区一般也提供一些常用软件的源码下载,源码都打包成压缩文件,常见的源码打包压缩格式有“.tar.gz”、“.tar.baz2”等。我们可以从网站上首先下载源码文件,然后在传到所在的linux系统下,如果你的linux系统处于联网状态下,也可以直接在系统内通过wget之类的下载命令将源码包直接下载到linux系统下。
    下载完成,把相应的软件解包即可,针对下载软件包的不同,使用不同的方法进行解压,解压完毕后进入解压生成的目录中,在这个目录下,一般都存在一个REDAME文件,这个文本文件非常重要,它详细的介绍了这个软件所能完成的功能、授权许可、安装需求、安装注意事项、安装方式等等,由于linux各个版本的差异,以及安装环境的不同,软件的安装方式也不尽相同,所以在安装软件前,一定要事先阅读这个README文件,确保安装的正确性。


    1.2 分析安装平台环境
          在软件包解压完毕之后,我们进入源码目录,一般都会存在configure和README这么两个文件,README就是上面我们讲到的,是对软件的介绍和安装说明;linux下软件的安装受到操作系统安装环境的影响,比如某些软件在安装或者运行过程中需要调用操作系统本身的库文件,或者需要运行系统的某个工具等等,但是系统中不存在这个库文件或者这个工具没有安装,那么安装或者运行软件就会失败。
    为了避免这个问题的出现,在安装软件的时候就需要分析操作系统环境,检测当前系统是否拥有安装软件所需的所有文件和工具,如果系统缺少某个文件,就给出提示,直到满足软件的所有需求为止。这个就是configure文件的功能,configure文件一般是个可执行文件,可以在当前目录下直接输入“./configure”进行软件安装的环境测试,如果提示缺少某些安装包,就需要进行安装,直到测试通过。通常的,源码安装都需要GCC或者CC编译器,这些编译器一般在安装系统时定制安装包中的开发工具选项下,其实这也是我们在第二章安装linux系统中要求选择开发工具包的原因所在。
          此外,在执行configure分析软件需求时,还可以在“./configure”后面加上软件的安装路径以及安装所需的模块等等一些选项,来定制用户需要的软件功能。


    1.3 编译安装软件
          在验证软件安装环境后,正式进入软件的编译步骤,在进行编译前,首先了解下关于编译的一些基础知识。
          在linux系统下,make是我们经常用到的编译命令,无论是安装软件还是项目开发,都会经常用到编译安装命令,也就是make和make install,对于一个包含很多源文件的应用程序,使用make和makefile工具可以简单快速的解决各个源文件之间复杂的依赖关系,同时,make工具还可以自动完成所有源码文件的编译工作,并且可以只对上次编译后修改过的文件进行增量编译,因此,熟练掌握了make和makefile工具之后,源码安装软件就变的像windows下安装软件一样简单。
    Makefile文件
          make工具最主要的功能就是通过makefile文件来实现的,makefile文件是按照某种语法来进行编写的,文件中定义了各个源文件之间的依赖关系,并说明了如何编译源文件并生成可执行文件,它通过描述各个源程序之间的关系让make工具自动完成编译工作。
          在linux系统下,习惯用Makefile替代makefile文件,我们在执行configure通过后,就会在当前目录下生成这个文件,一般情况下在命令行输入make时,make命令会默认去寻找当前目录下的Makefile文件,如果我们用其它文件作为makefile,就要在make命令选项后指定makefile文件,例如我们设定编译规则文件为make_file,就需要使用以下命令指定:
    [root@WEBServer ~]#make -f make_file
    下面我们通过举例了解下Makefile的编写原则和内容。
          例如有一个test程序,有三个源文件file1.c、file2.c、file3.c以及库文件LS编译生成,这三个源文件还分别包含了自己的头文件1.h、2.h、3.h。通常,C编译器将会输出三个目标文件file1.o、file2.o、file3.o。假定file1.c和file3.c都要声明用到一个apcs的文件,但是file2.c不用,也就是在file1.c和file3.c文件中都有类似“#include “apcs””的声明。
    下面这段代码就是对test程序的描述:
      1:#It is a example for describing makefile
      2:test: file1.o file2.o file3.o
      3:cc file1.o file2.o file3.o -LS -o test
      4:file1.o: file1.c 1.h apcs
      5:gcc -c file1.c
      6:file3.o: file3.c 3.h apcs
      7:gcc -c file3.c
      8:file2.o: file2.c c.h
      9:gcc -c file2.c
    这个描述文档其实就是一个makefile文件,第一行为注释行,第二行指定test程序有file1.o、file2.o、file3.o链接生成,第三行描述了如何从test所依赖的文件建立可执行文件,接下来的第四、六、八行定义了三个目标文件和它们依赖的“.c”、“.h”和“apcs”文件。剩下的第五、七、九行定义了如何从目标依赖的文件生成可执行文件。
    在了解Makefile文件结构后,我们就可以控制编译的选项,定制自己所需的软件功能。
    接下来,我们只需在命令行输入make命令,即可进入编译阶段,根据软件源程序的大小和系统的硬件配置,编译时间不定,编译完毕,会在当前目录以及子目录下生成相应的可执行文件,接下来就进入最后的安装软件阶段,在命令行输入make install命令,开始安装软件,安装进程会首先创建安装目录,如果我们没有指定安装的目录,安装程序默认会安装在系统的/usr/local目录下创建安装目录,然后将相应的文件和可执行程序从源码目录拷贝到安装目录下,这样安装就完毕了。

    1.4 源码安装Apache Http server
          下面我们通过源码安装apache,实例讲解linux下源码的安装方式。
    1. 下载解压apache源码
    [root@WEBServer~]#mkdir /apache  #在根目录下创建一个apache目录
    [root@WEBServer~]#cd /apache  #切换到apache目录
    [root@WEBServer apache]#wget  #下载apache源码
    >http://apache.mirror.phpchina.com/httpd/httpd-2.2.9.tar.bz2
    [root@WEBServer apache]#tar -jxvf httpd-2.2.9.tar.bz2 #解压apache源码
    [root@WEBServer apache]#ls  #显示解压结果
    httpd-2.2.9   httpd-2.2.9.tar.bz2
    2. 测试安装环境
    [root@WEBServer apache]#cd httpd-2.2.9 #切换到httpd-2.2.9目录下
    [root@WEBServer httpd-2.2.9]#./configure  --prefix=/opt/apache2.2.9
    >--enable-so
    >--enable-mods-shared=most
    >--enable-proxy-balancer=shared
    >--enable-proxy-http=shared
    >--enable-proxy-ajp
    >--enable-rewrite
    注意:上面我们指定apache的安装目录为/opt/apache2.2.9,同时指定需要编译的apache模块。
    下面分别介绍这些模块代表的含义,更详细的请参看apache文档。
     --enable-so选项:表示让 Apache 可以支持DSO模式,这里采用的是 Apache2.0以后的语法。如果你的Apache 是1.3版本,应改为“--enable-module=so”。
     --enable-mods-shared=most选项:表示动态编译大部分常用的模块,当然,也可以有选择的加载一些模块,most意思是只包含通常用的模块,并且以动态加载模式加载。如果用的是 Apache1.3, 改为“--enable-shared=max”即可。
     --enable-proxy-balancer=shared选项:表示让apache支持负载均衡功能,即动态的编译apache的负载均衡模块。
     --enable-proxy-http=shared选项:表示动态编译apache的http代理模块。
     --enable-proxy-ajp选项:表示动态编译apache的proxy-ajp模块。
     --enable-rewrite选项:让apache支持地址重写功能,即动态编译apache的rewrite模块。
    3.编译安装软件
    [root@WEBServer httpd-2.2.9]#make
    [root@WEBServer httpd-2.2.9]#make install
    安装完毕,apache被安装到/opt/apache2.2.9下,接下来我们就可以使用apache软件了。

    二 RPM包方式安装
    2.1 RPM包管理工具介绍
          RPM是Red Hat Package Manager的缩写,本意就是Redhat软件包管理,是最先由Redhat公司开发出来的linux下软件包管理工具,由于这种软件管理方式非常方便,逐渐被其它linux发行商所借用,现在已经成为linux平台下通用的软件包管理方式,例如Fedora 、Redhat、suse、Mandrake等主流linux发行版本都默认采用了这种软件包管理方式。
          RPM包管理类似于windows下的“添加/删除程序”但是功能却比“添加/删除程序”强大很多。在Linux的系统安装光盘中,有很多以“.rpm”结尾的软件包,这些包文件就是我们所说的RPM文件。每个RPM文件中包含了已经编译好的二进制可执行文件,其实就是将软件源码文件进行编译安装,然后进行封装,就成了RPM文件,类似与windows安装包中的“.exe”文件。此外RPM文件中还包含了运行可执行文件所需的其它文件,这点也和windows下的软件包类似,windows程序的安装包中,除了“exe”可执行文件,还有其它依赖运行的文件。
          RPM包管理方式的优点是:安装简单方便,因为软件已经编译完成打包完毕,安装只是个验证环境和解压的过程。此外通过RPM方式安装的软件,RPM工具都会记录软件的安装信息,这样方便了软件日后的查询,升级和卸载。
    RPM包管理方式的缺点是对操作系统环境的依赖很大,它要求RPM包的安装环境必须与RPM包封装时的环境相一致或相当。还需要满足安装时与系统某些软件包的依赖关系,例如需要安装A软件,但是A软件需要系统有B和C软件的支持,那么就必须先安装B和C软件,然后才能安装A软件。这也是我们在用RPM包方式安装软件需要特别注意的地方。


    2.2 RPM包种类和命令
          RPM包的封装格式一般有两种,分别是RPM和SRPM,SRPM包也是一种RPM,但是它包含了编译时的源码文件和一些编译指定的参数文件,因而在使用的时候需要重新进行编译,通常SRPM对应的RPM文件类似与“xxxxxxxx.src.rpm”格式。
    下面我们讲述一下两种RPM包对应的文件名含义:
    例如一个rpm文件:nxserver-2.1.0-22.i386.rpm
    其中“nxserver”表示软件的名称,“2.1.0”表示软件的版本号,“22”表示软件更新发行的次数,“i386”表示适合硬件的平台,最后的“.rpm”是rpm软件包的标识。
          一般的RPM封装包的命名格式都有这五个部分组成,由于SRPM包是需要编译才能使用的,因此没有上面显示项中对应的平台选项,其它与RPM包命令格式完全一样。
          对于RPM包的五个组成部分,我们下面介绍一些它们更详细的含义和异同:
    软件名称:是对软件包的标识;
    软件的版本号:每个软件都有自己的版本号,版本号可以说明软件从开始到现在发行了多少了,软件是否是新的等等。
    软件更新发行次数:由于一个版本的软件在发行后可能出现bug或者漏洞,那么就需要修复和重新封装,每修复封装一次,软件的名称就要更新一次。
    适合的硬件平台:由于RPM包要在各种不同的linux硬件平台上使用,但是由于每个不同的硬件平台RPM打包封装的参数也各不相同,这样就出现了针对i386、i686、x86_64、noarch等的平台名称标识。
    i386指这个软件包适用于intel 80386以后的x86架构的计算机。
    i686指这个软件包适用于intel 80686以后(奔腾pro以上)的x86架构的计算机。
    x86_64指这个软件包适用于x86架构64为处理器的计算机。
    noarch表示这个软件包与硬件构架无关,可以通用。
          需要注意的是:i386软件包可以在任意x86平台下使用,无论是i686或是x86_64的机器,相反,i686的软件包不一定能在i386硬件上面使用,由于i686软件包一般都是对cpu进行了优化,所有具有向后兼容性,但是不具有先前兼容的特性。
    RPM软件包标识:RPM软件包标识用于指明此文件是rpm格式的文件,一般有两种后缀标识,分别是以“.rpm”结尾和以“.src.rpm”结尾。


    2.3 RPM工具的使用
          RPM工具的使用分为安装、查询、验证、更新、删除等操作,下面我们分别介绍。
    1. 安装软件包
    命令格式:rpm -i [辅助选项] file1.rpm file2.rpm…..fileN.rpm 
    主选项说明:
    -i:install的意思,就是安装软件。也可以使用“--install”。
    参数说明:file1.rpm file2.rpm…..filen.rpm是指定将要安装RPM包的文件名,可以多个文件一起安装。
    辅助选项说明:这里的选项很多,我们只列出常用选项,详细解释如下:
     -v:显示附加信息。
     -h:安装时输出标记“#”。
     --test:只对安装进行测试,并不实际安装。
     --nodeps:不检查软件之间的依赖关系。加入此选项可能会导致软件不可用。
     --force:忽略软件包以及软件冲突。
     --replacepkgs:强制重新安装已经安装的软件包。
     --prefix:将软件包安装到由 指定的路径下。
     --percent:以百分比的形式输出安装的进度。
     --excludedocs:不安装软件包中的说明文件
     --includedocs:安装软件包,包含说明文件。
    举例:
    (1)我们安装ipvsadm-1.24-6.i386.rpm,使用下面命令:
    [root@localhost ~]# rpm -ivh ipvsadm-1.24-6.i386.rpm
    执行结果如下:
    warning:ipvsadm-1.24-6.i386.rpm:V3 DSA signature: NOKEY, key ID 44e181
    Preparing...    ############################ [100%]
       1:ipvsadm  ############################[100%]
    (2)下面操作显示了安装gcc-3.4.4-2.i386.rpm包过程,在安装过程中,出现了安装包依赖问题,我们的处理过程是这样的:
    [root@server ~]# rpm -ivh gcc-3.4.4-2.i386.rpm
    执行结果如下:
    warning: gcc-3.4.4-2.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
    error: Failed dependencies:
            glibc-devel >= 2.2.90-12 is needed by gcc-3.4.4-2.i386
        Suggested resolutions:
            glibc-devel-2.3.4-2.13.i386.rpm
    这里显示在安装gcc编译器之前需要安装glibc-devel包的支持,这个包详细的版本是glibc-devel-2.3.4-2.13.i386.rpm,因此,我们需要先安装这个软件包。
    [root@server ~]# rpm -ivh glibc-devel-2.3.4-2.13.i386.rpm
    执行结果如下:
    warning: glibc-devel-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
    error: Failed dependencies:
            glibc-headers is needed by glibc-devel-2.3.4-2.13.i386
            glibc-headers = 2.3.4-2.13 is needed by glibc-devel-2.3.4-2.13.i386
        Suggested resolutions:
            glibc-headers-2.3.4-2.13.i386.rpm
    这里又出现依赖关系,上面的错误提示是说安装glibc-devel包需要先安装glibc-headers软件包,并且给出了安装建议版本,于是我们就先安装glibc-headers包。
    [root@server ~]# rpm -ivh glibc-headers-2.3.4-2.13.i386.rpm
    执行结果如下:
    warning: glibc-headers-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
    error: Failed dependencies:
            kernel-headers is needed by glibc-headers-2.3.4-2.13.i386
            kernel-headers >= 2.2.1 is needed by glibc-headers-2.3.4-2.13.i386
        Suggested resolutions:
            glibc-kernheaders-2.4-9.1.98.EL.i386.rpm
    依然报错,信息与上面相同,意思是说在安装kernel-headers包之前,需要glibc-kernheaders包的支持,并且给出了建议版本,我们先安装glibc-kernheaders包。
    [root@server ~]# rpm -ivh glibc-kernheaders-2.4-9.1.98.EL.i386.rpm
    执行结果如下: 
    warning: glibc-kernheaders-2.4-9.1.98.EL.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
    Preparing... ########################### [100%]
       1:glibc-kernheaders ###################### [100%]
    这次依赖终于解除了,按照相反的顺序开始安装,下面显示安装步骤。
    [root@server ~]# rpm -ivh glibc-headers-2.3.4-2.13.i386.rpm      
    warning: glibc-headers-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
    Preparing...  ########################### [100%]
       1:glibc-headers  ######################## [100%]
    [root@server ~]# rpm -ivh glibc-devel-2.3.4-2.13.i386.rpm
    warning: glibc-devel-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
    Preparing... ########################### [100%]
       1:glibc-devel  ######################## [100%]
    [root@server ~]# rpm -ivh gcc-3.4.4-2.i386.rpm
    warning: gcc-3.4.4-2.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
    Preparing...  ############################## [100%]
       1:gcc      ########################### [100%]
    (3) 在上例中,如果我们在安装gcc第一步加入“--nodeps”参数,gcc由于不检查依赖关系,即可安装成功:
    [root@server ~]# rpm -ivh gcc-3.4.4-2.i386.rpm –nodeps
    执行结果如下:
    warning: gcc-3.4.4-2.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
    Preparing...  ############################## [100%]
       1:gcc      ########################### [100%]
    这里加入了忽略依赖关系的参数,虽然可以安装成功,但是我们不建议这么做,因为这样安装的软件很有可能是不可用的,或者使用过程中出现问题,除非我们知道忽略依赖关系对软件本身没有影响的话,才可使用此参数。
    (4)安装xxxxxx.src.rpm的方法,这里我们以my-package.src.rpm名称为例,在redhat linux i386平台下进行介绍,常用的有两种方法,操作步骤如下:
    方法一:
    1)执行rpm -i my-package.src.rpm
    2) cd /usr/src/redhat/SPECS
    3) rpmbuild -bp my-package.specs 一个和软件包同名的specs文件。
    4) cd /usr/src/redhat/BUILD/my-package/ 一个软件包同名的目录
    5) ./configure 这一步和编译普通的源码软件一样,可以加上参数
    6) make
    7) make install
    方法二:
    1)执行rpm -i my-package.src.rpm
    2)cd /usr/src/redhat/SPECS
    前两步和方法一相同
    3)rpmbuild -bb my-package.specs 一个和软件包同名的specs文件。
    此时,在/usr/src/redhat/RPM/i386/ (这里的路径根据具体包的不同,也可能是i686、noarch等等)
    在这个目录下,有一个或者两个新的rpm包,这个是编译好的二进制文件。
    4)执行rpm -i new-package.rpm,安装完成。
    例如:利用xxxx.src.rpm格式的包安装rsh软件,操作方法如下:
    [root@localhost ~]# rpm -i rsh-0.17-25.3.src.rpm
    [root@localhost ~]#cd /usr/src/redhat/SPECS/
    rsh.spec
    [root@localhost SPECS]#rpmbuild  -bb rsh.spec
    [root@localhost SPECS]# cd /usr/src/redhat/RPMS/i386/
    rsh-0.17-25.3.i386.rpm 
    rsh-debuginfo-0.17-25.3.i386.rpm 
    rsh-server-0.17-25.3.i386.rpm
    [root@localhost i386]#rpm -ivh rsh-*
    Preparing...  ############################ [100%]
       1:rsh-server  ########################## [ 33%]
       2:rsh   ############################## [ 67%]
       3:rsh-debuginfo  ######################## [100%]
    [root@localhost i386]#


    2. 查询软件包
    命令格式:rpm -q [辅助选项] package1……packageN
    主选项说明:
    -q:query的意思,也可以使用“--query”。
    参数说明:package1……packageN为已经安装的软件包名称。
    辅助选项说明:
     -f:查询操作系统中某个文件属于哪个对应的rpm软件包。
    例如:
    [root@localhost ~]# rpm -qf /bin/bash
    bash-3.0-19.2
     -p:查询以“.rpm”为后缀的软件包安装后对应的包名称。
    例如:
    [root@server ~]# rpm -qp gcc-3.4.4-2.i386.rpm
    gcc-3.4.4-2
    从这里的查询可以得知,“gcc-3.4.4-2.i386.rpm”安装到系统以后,对应的包名为gcc-3.4.4-2。
     -l:显示软件包中的所有文件列表。此选项后面跟软件包安装后对应的包名,切记不是以“.rpm”为后缀的rpm包。
    例如:
    [root@server ~]# rpm –ql gcc-3.4.4-2
    /usr/bin/c89
    /usr/bin/c99
    /usr/bin/cc
    /usr/bin/gcc
    /usr/bin/gcov
    ………(以下省略)………
     -i:显示软件包的概要信息,例如软件名称、版本、适应平台、大小等等。此选项后面跟完整的包名,切忌不是以“.rpm”为后缀的rpm包。
    例如:在得到一个软件,安装之前一般都需要看下软件包有什么内容,可以使用以下命令:
    [root@server ~]# rpm -qi gcc-3.4.4-2.i386
    或者使用
    [root@server ~]# rpm -qpi gcc-3.4.4-2.i386.rpm
    这里由于用到了“-p”选项,首先显示出了安装后的软件包名,所以“-i”选项后可跟“.rpm”结尾的软件包。
     -g:查询系统有哪些软件包属于指定的类别,RPM工具根据软件功能的不同,将软件分了很多种类,分别如下,括弧内为注释说明:
    Amusements/Games (娱乐/游戏)
      Amusements/Graphics(娱乐/图形)
      Applications/Archiving (应用/档案)
      Applications/Communications (应用/通讯)
      Applications/Databases (应用/数据库)
      Applications/Editors (应用/编辑器)
      Applications/Emulators (应用/仿真器)
      Applications/Engineering (应用/工程)
      Applications/File (应用/文件)
      Applications/Internet (应用/因特网)
      Applications/Multimedia (应用/多媒体)
      Applications/Productivity (应用/产品)
      Applications/Publishing (应用/印刷)
      Applications/System (应用/系统)
      Applications/Text (应用/文本)
      Development/Debuggers (开发/调试器)
      Development/Languages (开发/语言)
      Development/Libraries (开发/函数库)
      Development/System (开发/系统)
      Development/Tools (开发/工具)
      Documentation (说明文档)
      System Environment/Base (系统环境/基础)
      System Environment/Daemons (系统环境/守护)
      System Environment/Kernel (系统环境/内核)
      System Environment/Libraries (系统环境/函数库)
      System Environment/Shells (系统环境/接口)
      User Interface/Desktops (用户界面/桌面)
      User Interface/X (用户界面/X窗口)
      User Interface/X Hardware Support (用户界面/X硬件支持)
    例如:查看当前系统属于“开发/调试器”类别的包有多少,使用以下命令:
    [root@server ~]# rpm -qg "Development/Debuggers"    
    lsof-4.72-1.1
    crash-4.0-2
    sysreport-1.3.15-5
    ltrace-0.3.36-2.EL4
    strace-4.5.13-0.EL4.1
    valgrind-2.2.0-5.EL4
    valgrind-callgrind-0.9.9-1
    gdb-6.3.0.0-1.63
    pstack-1.2-6
     -d:显示软件包中的说明文件列表,RPM将软件包中的文件分为三类,一类是配置文件,一类是说明文件,一类是可执行文件。后面跟完整的包名,切忌不是以“.rpm”为后缀的rpm包。
    例如:查看file软件包中的说明文件,使用以下命令:
    [root@server108 cicro]# rpm -qd  file-4.10-2
    /usr/share/doc/file-4.10/LEGAL.NOTICE
    /usr/share/doc/file-4.10/README
    /usr/share/man/man1/file.1.gz
    /usr/share/man/man3/libmagic.3.gz
    /usr/share/man/man5/magic.5.gz
     -s:与“-l“选项类似,除了显示软件包中的所有文件列表信息,而且还显示每个文件的状态。RPM已安装的软件包中各个文件拥有四种状态,分别是normal(正常状态,表示文件没有被其它软件包修改过)、not installed(未安装状态,表示文件没有安装)、replaced(已替换状态,表明此文件已经被其它软件包修改替换过了)、net shared(网络共享状态,表示此文件处于网络共享状态)。
    例如:查看ipvsadm-1.24-6包中每个文件的状态,使用以下命令:
    [root@localhost ~]# rpm -i --excludedocs ipvsadm-1.24-6.i386.rpm
    [root@localhost ~]# rpm -qs ipvsadm-1.24-6                        
    normal        /etc/rc.d/init.d/ipvsadm
    normal        /sbin/ipvsadm
    normal        /sbin/ipvsadm-restore
    normal        /sbin/ipvsadm-save
    not installed /usr/share/doc/ipvsadm-1.24
    not installed /usr/share/doc/ipvsadm-1.24/README
    not installed /usr/share/man/man8/ipvsadm-restore.8.gz
    not installed /usr/share/man/man8/ipvsadm-save.8.gz
    not installed /usr/share/man/man8/ipvsadm.8.gz
          从上面可以看到,我们在安装ipvsadm-1.24-6.i386.rpm的时候指定不安装说明文档,然后通过“-s”命令查看文件状态时,软件包的说明文档状态均为“not installed”。
     -R (或--requires):显示软件包所需的功能,所谓功能,可以是软件包标识,也可以是共享动态库文件等等,软件包的依赖关系就是依靠功能来实现的,如果所需的功能不存在,则依赖关系一定得不到满足,软件安装就会失败。
     --provides:显示软件包提供的功能,这个功能可以是动态库文件,也可以是虚拟软件的包名等等。
    例如:查看nxclient-2.1.0-17.i386.rpm提供的功能,使用以下命令:
    [root@localhost ~]# rpm -qp --provides nxclient-2.1.0-17.i386.rpm                  
    nxclient = 2.1.0-17
    可以看到这个软件提供了nxclient的功能。
    3. 验证软件包
          验证已经安装的软件包
          校验软件包比较的是某软件包安装的文件和原始软件包中的同一文件的信息是否一致。它校验每个文件的大小、权限、MD5 值、类型、所有者、以及组群。
    命令格式:rpm -V [辅助选项] package1……packageN
    主选项说明:
    -V:verify的意思,也可以用“--verify”代替。此参数主要校验已经安装的软件包内的文件和最初安装时是否一致。
    参数说明:package1……packageN 表示需要校验的且已经安装的软件包名。
    辅助选项说明:
     -p:验证软件包文件
    例如:下面是验证rsh包的安装状态,操作过程如下:
    [root@localhost ~]# rpm -V rsh-0.17-25.3
    package rsh-0.17-25.3 is not installed
    [root@localhost ~]# rpm -Vp rsh-0.17-25.3.i386.rpm
    warning: rsh-0.17-25.3.i386.rpm: V3 DSA signature: NOKEY, key ID db2a6e
    missing     /usr/bin/rcp
    missing     /usr/bin/rexec
    missing     /usr/bin/rlogin
    missing     /usr/bin/rsh
    missing   d /usr/share/man/man1/rcp.1.gz
    missing   d /usr/share/man/man1/rexec.1.gz
    missing   d /usr/share/man/man1/rlogin.1.gz
    missing   d /usr/share/man/man1/rsh.1.gz
    [root@localhost ~]# rpm -ivh rsh-0.17-25.3.i386.rpm   
    warning: rsh-0.17-25.3.i386.rpm: V3 DSA signature: NOKEY, key ID db2a6e
    Preparing...   ########################### [100%]
       1:rsh     ######################## [100%]
    [root@localhost ~]# rpm -Vp rsh-0.17-25.3.i386.rpm 
    warning: rsh-0.17-25.3.i386.rpm:V3 DSA signature: NOKEY, key ID db2a6e
    [root@localhost ~]# rpm -V rsh-0.17-25.3
    #上面操作中,我们首先验证rsh,可以知道rsh没有在系统中安装,接着我们安装了rsh软件包,再次查看rsh包状态时,没有任何输出了,表示软件包文件全部正常。
     -f:校验文件在所属的软件包的状态,此选项后面跟相应的文件名。
    例如:检查mysqlclient包中各个文件的状态,我们的操作如下:
    [root@localhost ~]# rpm -ql mysqlclient10-3.23.58-4.RHEL4.1
    /etc/ld.so.conf.d/mysqlclient10-i386.conf
    /usr/lib/mysql/libmysqlclient.so.10
    /usr/lib/mysql/libmysqlclient.so.10.0.0
    /usr/lib/mysql/libmysqlclient_r.so.10
    /usr/lib/mysql/libmysqlclient_r.so.10.0.0
    [root@localhost ~]# mv
    >/usr/lib/mysql/libmysqlclient.so.10  /usr/lib/mysql/libmysqlclient.so.10.d
    [root@localhost ~]# rpm –V mysqlclient10-3.23.58-4.RHEL4.1
    missing     /usr/lib/mysql/libmysqlclient_r.so.10
    [root@localhost ~]# rpm -Vf  /usr/lib/mysql/libmysqlclient_r.so.10
    missing     /usr/lib/mysql/libmysqlclient_r.so.10
    #这里我们首先检查了mysqlclient包中包含的所有文件,然后模拟删除mysqlclient包中一个文件,然后查看这个文件的状态,可以看到显示为“missing”,如果我们通过“-Vf”选项检查某个文件,没有任何输出时,表示这个文件状态正常。
     -a:检验所有的软件包。
     -g:检验所有属于组的软件包。
    验证未安装的软件包文件
    发行的RPM格式的软件包是否值得信任,是否损坏,我们可以通过RPM提供的选项进行验证。RPM软件包一般使用 Gnu 隐私卫士(或称 GPG)来签名,从而帮助使用者肯定下载软件包的可信任性。
    命令格式:rpm -K file1.rpm……fileN.rpm
    主选项说明:
    -K: checksig的意思,也可以用“--checksig”代替。这个选项用来检查 RPM 软件包文件的md5校验和GPG签名。
    参数说明:file1.rpm……fileN.rpm表示需要校验软件包名。
    例子:如果想要校验某个软件包是否被篡改或者是否损坏,可以使用如下命令检查:
     [root@localhost ~]# rpm -K nxserver-2.1.0-22.i386.rpm
    nxserver-2.1.0-22.i386.rpm: md5 OK
    这里的“md5 OK”表示文件在下载中没有被损坏或者没有被篡改。即这个文件是安全的。
    [root@localhost ~]# rpm -K ipvsadm-1.24-6.i386.rpm
    ipvsadm-1.24-6.i386.rpm: (SHA1) DSA sha1 md5 (GPG) NOT OK (MISSING KEYS: GPG#443e1821)
    上面的输出表示这个软件没有被授权签名,在安装未被linux发行商授权的软件包时,请务必谨慎,因为这些软件包内可能包含有害的代码。
    4. 更新软件包
    命令格式:rpm -U [辅助选项] file1.rpm……fileN.rpm
    主选项说明:
    -U:upgrade的意思,可以使用“--upgrade”代替。
    参数说明:file1.rpm……fileN.rpm表示需要升级的rpm文件包。
    辅助选项说明:
    --oldpackage 表示允许"升级"到一个老版本,即软件版本降级。
    其它选项与安装RPM软件包辅助参数完全相同,这里不再讲述。
    例子:我们将rsh从rsh-0.17-25.3升级到rsh-0.17-37.el5,步骤如下:
    [root@localhost ~]# rpm  -q rsh
    rsh-0.17-25.3
    [root@localhost ~]# rpm  -Uvh rsh-0.17-37.el5.i386.rpm   
    warning: rsh-0.17-37.el5.i386.rpm: V3 DSA signature: NOKEY, key ID 37017186
    Preparing... ######################### [100%]
       1:rsh    ########################### [100%]
    [root@localhost ~]# rpm  -q rsh
    rsh-0.17-37.el5
    5. 删除软件包
    命令格式:rpm -e [辅助选项] package1……packageN
    主选项说明:
    -e:erase的意思,也可以用“--erase”代替。
    参数说明:package1……packageN表示已经安装的软件包名称。
    辅助选项说明:
     --test:只执行删除的测试。
     --nodeps:不检查依赖性。
    举例:
    (1) 删除rsh软件包,使用以下命令:
    [root@localhost ~]# rpm  -q rsh   
    rsh-0.17-37.el5
    [root@localhost ~]# rpm  -e rsh-0.17-37.el5
    [root@localhost ~]# rpm  -q rsh
    package rsh is not installed
    (2)删除gcc软件包,但是存在依赖关系,操作过程如下:
    [root@server ~]# rpm -e gcc                   
    error: Failed dependencies:
    gcc = 3.4.4-2 is needed by (installed) gcc-c++-3.4.4-2.i386
    gcc = 3.4.4-2 is needed by (installed) gcc-g77-3.4.4-2.i386
    gcc = 3.4.4-2 is needed by (installed) gcc-java-3.4.4-2.i386
    gcc = 3.4.3 is needed by (installed) libtool-1.5.6-4.EL4.1.i386
    gcc is needed by (installed) systemtap-0.4-0.EL4.i386
    这里又出现了删除依赖性了,根据上面的提示可知,要删除gcc软件包,必须删除与gcc相互依赖的五个软件包,这个操作要非常慎重,除非知道删除后对系统没有影响,否则一定不要盲目执行删除操作,因为这样可能导致系统的崩溃。
    其实我们也可以加入“--nodeps”参数,忽略依赖关系,但是这样可能会导致相关依赖软件的不可用。

    三 二进制软件安装方式
          Linux下二进制格式的软件是指事先已经在各种平台编译安装好相关软件,然后压缩打包,在安装时只需解压或者执行安装可执行文件即可。这种软件发行格式类似与windows系统,这样做的原因是保护源代码程序不对外泄露,保护知识产权。二进制软件包的优点是安装简单、容易,缺点是缺乏灵活性,相应的软件包执行在对应平台下安装,离开这个环境软件就无法运行。
          二进制软件包提供了很多类型的打包方式,最常见的就是我们上节讲到的RPM格式的包,还有以“*.tar.gz、*.tgz、*.bz2“等形式的二进制软件包,最后还有一个就是提供安装程序进行安装的二进制软件包。下面分别介绍:

    3.1 安装“*.tar.gz、*.bz2”二进制软件包
          这种格式的软件包,安装其实就是简单的解压过程,根据不同的软件打包格式,我们用相应的解压命令解压即可。
          对于*.tar.gz软件格式解压:tar –zxvf xxxxxx.tar.gz
          对于*.bz2软件格式解压:  tar  -jxvf xxxxxx.tar.gz
          这类软件的卸载,对于解压后只有单一目录的软件,可以直接删除对应软件目录即可,如果解压后文件分散在几个目录中,需要一一手动删除目录。
    例如:我们常用的应用服务器容器tomcat软件就是基于这种打包压缩格式发行的。我们只需下载后解压即可完成安装,如果需要卸载,直接删除对应的tomcat目录即可。


    3.2 提供安装程序的软件包
          这种软件包都提供了安装脚本或者安装向导程序,只需在下载此类软件包后解压,然后进入安装目录,找到类似的setup、install、install.sh之类的可执行文件运行即可,然后根据提示(比如安装路径,参数设置等等)进行相应的设置,接着安装就自动完成。
          这类软件的卸载也提供了相应的卸载脚本或者卸载向导,根据提示即可完成软件卸载。
          例如:经常使用的sun jdk就是这种安装方式,从网络下载下来的jdk是个二进制可执行文件,首先设置文件的可执行权限(例如chmod 755  jdk1.6.0_07.bin,权限操作本书后面会有详细讲述) ,然后运行软件(也即是./ jdk1.6.0_07.bin)即可完成安装。安装完成会在当前目录产生一个对应的jdk程序目录。
    Linux下一些大型的软件安装,比如weblogic、oracle等软件都提供了安装向导程序,用户可以根据安装提示,顺利完成此类软件的安装。

  • 相关阅读:
    121. 122. 123. 188. Best Time to Buy and Sell Stock *HARD* 309. Best Time to Buy and Sell Stock with Cooldown -- 买卖股票
    from __future__ import absolute_import
    sql之left join、right join、inner join的区别
    Eclipse workspace 被占用问题
    JavaScript SetInterval与setTimeout使用方法详解
    提示框3秒钟后自动消失
    页面加载及取消加载
    分层总结
    java中的注释
    canvas画图
  • 原文地址:https://www.cnblogs.com/zhangkaimin/p/4903590.html
Copyright © 2020-2023  润新知