Linux软件包安装与管理,linux软件包源码安装与RPM包方式安装

发布时间:2020-07-30编辑:脚本学堂
本文介绍了linux下软件包的安装与管理方法,分为linux软件包源码安装与RPM包方式安装,Linux下如何安装软件的详细教程,需要的朋友参考下。

说到linux软件的安装方法,先来看下linux文件的扩展名。

Linux软件扩展名。

软件后缀为.rpm最初是Red Hat Linux提供的一种包封装格式,现在许多Linux发行版本都使用;
后缀为.deb是Debain Linux提供的一种包封装格式;
后缀为.tar.gz、tar.Z、tar.bz2或.tgz是使用Unix系统打包工具tar打包的;
后缀为.bin的一般是一些商业软件。

通过扩展名可以了解软件格式,进而了解软件安装。

一、源码安装方式

由于linux操作系统开放源代码,因而在其上安装的软件大部分也都是开源软件,例如apachetomcat、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不用,(www.jb200.com)也就是在file1.c和file3.c文件中都有类似“#include “apcs””的声明。

对test程序的描述:

1:#It is a example for describing makefile2:test: file1.o file2.o file3.o3: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指这个软件包适用于inte80386以后的x86架构的计算机

i686指这个软件包适用于inte80686以后(奔腾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 44e181Preparing...    ############################ [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 db42a60eerror: Failed dependencies:
glibc-deve>= 2.2.90-12 is needed by gcc-3.4.4-2.i386Suggested 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 db42a60eerror: Failed dependencies:
glibc-headers is needed by glibc-devel-2.3.4-2.13.i386glibc-headers = 2.3.4-2.13 is needed by glibc-devel-2.3.4-2.13.i386Suggested 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 db42a60eerror: Failed dependencies:
kernel-headers is needed by glibc-headers-2.3.4-2.13.i386kernel-headers >= 2.2.1 is needed by glibc-headers-2.3.4-2.13.i386Suggested 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 db42a60ePreparing... ########################### [100%]
1:glibc-kernheaders ###################### [100%]
这次依赖终于解除了,按照相反的顺序开始安装,下面显示安装步骤。

[root@server ~]# rpm -ivh glibc-headers-2.3.4-2.13.i386.rpmwarning: glibc-headers-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60ePreparing...  ########################### [100%]
1:glibc-headers  ######################## [100%]

[root@server ~]# rpm -ivh glibc-devel-2.3.4-2.13.i386.rpmwarning: glibc-devel-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60ePreparing... ########################### [100%]

1:glibc-deve ######################## [100%]

[root@server ~]# rpm -ivh gcc-3.4.4-2.i386.rpmwarning: gcc-3.4.4-2.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60ePreparing...  ############################## [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 db42a60ePreparing...  ############################## [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) make7) 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.rpmrsh-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]#