Linux源码包和rpm包的安装管理
概要
软件安装对于操作系统来说是常用的操作,那如何在Linux中使用命令进行软件安装呢?本文就带你来了解Linux中的软件如何进行安装、卸载、升级等管理。课程内容包括rpm命令管理、yum在线管理、源码包的安装管理等。
一、Linux软件包分类
Linux中的软件安装包通常分为两类:源码包和RPM包。
1. 源码包
顾名思义,源码包即为开源代码的安装包,通常为.tar.gz后缀的压缩文件,压缩包中的文件未经编译,在安装时需耗费较多的时间进行编译。
源码包的优点
1)开源,如果有足够的能力,可以修改源代码。
2)可以自由选择所需的功能。
3)软件是编译安装,所以更加适合自己的系统,更加稳定也更加高效。
4)卸载方便
源码包的缺点
1)安装过程步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建Linux+Apache+Mysql+PHP),容易出现错误。
2. 二进制包(RPM包、系统默认包)
类似Windows系统中常见的.exe安装包,都是编译好的二进制安装包。在Linux中通常以.rpm后缀名标识。
RPM包的优点
1)包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载。
2)安装速度比源码包安装快的多。
RPM包的缺点
1)经过编译,不再可以看到源码。
2)功能选择不如源码包灵活。
3)包之间的依赖性(后文详细讲解)导致安装过程体验极差。
3.脚本安装包
所谓脚本安装包,就是把复杂的软件包安装过程写成了程序脚本,初学者可以执行程序脚本实现一键安装。但实际安装的还是源码包和二进制包。
脚本安装包的优缺点
优点:安装简单、快捷
缺点:完全丧失了自定义性
二、rpm命令管理
1.RPM包命名规则
2.安装命令
3.升级与卸载
4.RPM包查询
5.RPM包校验
三、yum在线管理
四、源码包管理
1. 源码包与RPM包的区别
安装前的区别
RPM包是经过编译的安装包,而源码包未经过编译,内容为源代码(一般是C语言编写)
安装后的区别:安装位置和启动方式
1)安装位置不同:
RPM包的默认安装路径一般为:
/etc/ 配置文件
/usr/bin/ 可执行命令
/usr/lib/ 函数库
/usr/share/doc/ 软件使用手册
/usr/share/man/ 帮助文件
源码包的安装路径可以自己指定,一般指定为/usr/local/软件名。
2)启动方式不同:
对于RPM包,例如使用yum -y install httpd命令安装好的apache服务,在启动服务时要使用以下命令
[root@VM_0_17_centos ~]# /etc/rc.d/init.d/httpd start
Starting httpd: httpd: apr_sockaddr_info_get() failed for VM_0_17_centos
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[ OK ]
[root@VM_0_17_centos ~]#
当然也可以使用service命令:
[root@VM_0_17_centos ~]# service httpd start
Starting httpd: httpd: apr_sockaddr_info_get() failed for VM_0_17_centos
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[ OK ]
[root@VM_0_17_centos ~]#
两者是完全一样的作用,因为service命令默认检索的目录就是/etc/rc.d/init.d/。因此,一般情况下,不建议修改RPM包的安装路径,这样可能会导致系统无法找到相关路径,像service这种命令可能会不能正常使用。
而对于使用源码包安装的apache服务,假如我们将其安装在了/usr/local/apache2/目录下,则它的启动方式为:
[root@VM_0_17_centos ~]# /usr/local/apache2/bin/apachectl start
httpd: apr_sockaddr_info_get() failed for VM_0_17_centos
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[root@VM_0_17_centos ~]#
很明显,RPM包和源码包,由于安装位置不同,所以他们的启动方式也不尽相同。
2. 源码包安装过程
首先要说明,为了文章需要,我在同一台服务器上既安装了RPM包的apache服务,也安装了源码包的apache服务,这种操作是可以的。但是在实际生产中,一般不会这么操作,因为当一个服务起来后,80端口被占用,另一个服务就无法启动了。
1)准备工作:首先,因为源码包一般使用C语言进行编写,为了能够正常编译,需要确保系统中已正确安装gcc(C语言编译器),查看命令如下:
[root@VM_0_17_centos ~]# rpm -qa | grep gcc
gcc-4.4.7-23.el6.x86_64
libgcc-4.4.7-23.el6.x86_64
[root@VM_0_17_centos ~]#
当有上面两个结果同时存在时,说明gcc没有问题。若还未安装,使用命令yum -y install gcc进行安装。
然后下载.tar.gz格式的源码包,我这里使用的是httpd-2.2.9.tar.gz。
2)安装注意事项
一般情况下,我们将源码包放在:/usr/local/src目录下;而软件的安装位置一般选择为:/usr/local/软件名。
3)安装过程
将源码包放到/usr/local/src下并解压缩,然后进入文件目录:
[root@VM_0_17_centos src]# mv /root/httpd-2.2.9.tar.gz /usr/local/src/
[root@VM_0_17_centos src]# ll
total 6260
-rw-r--r-- 1 root root 6396996 Feb 21 16:10 httpd-2.2.9.tar.gz
[root@VM_0_17_centos src]# tar -zxf httpd-2.2.9.tar.gz
[root@VM_0_17_centos src]# ll
total 6264
drwxr-xr-x 11 user1 games 4096 Jun 11 2008 httpd-2.2.9
-rw-r--r-- 1 root root 6396996 Feb 21 16:10 httpd-2.2.9.tar.gz
[root@VM_0_17_centos src]# cd httpd-2.2.9
[root@VM_0_17_centos httpd-2.2.9]#
软件配置和检查,同时指定安装目录:
[root@VM_0_17_centos httpd-2.2.9]# ./configure --prefix=/usr/local/apache2
……
……
config.status: creating build/rules.mk
config.status: creating build/pkg/pkginfo
config.status: creating build/config_vars.sh
config.status: creating include/ap_config_auto.h
config.status: executing default commands
等待命令执行完毕,只需检查最后几行打印中是否有error,warning等字样,若没有,代表成功。该步骤会将检测信息写入Makefile文件,用于后续步骤使用。
编译命令:
[root@VM_0_17_centos httpd-2.2.9]# make
……
……
这一步是源码包安装最耗时的一步,打印结果较多,这里不进行罗列。若编译过程出错,可使用make clean命令清除缓存和不完整的编译文件,待检查无误后重新编译。
最后是安装命令:
[root@VM_0_17_centos httpd-2.2.9]# make install
……
mkdir /usr/local/apache2/manual
make[1]: Leaving directory `/usr/local/src/httpd-2.2.9'
安装命令执行完,/usr/local/apache2目录才会创建,安装过程也宣告结束。接下来启动服务试试。
注意在启动服务前,先查看之前安装RPM包的apache服务是否是启动状态,如果是,则需要先将其关闭再启动我们刚安装完的源码包的apache服务,不然会因为80端口被占用而启动失败:
[root@VM_0_17_centos httpd-2.2.9]# !ps
ps -ef | grep httpd
root 24166 1 0 18:56 ? 00:00:00 /usr/sbin/httpd
apache 24168 24166 0 18:56 ? 00:00:00 /usr/sbin/httpd
apache 24169 24166 0 18:56 ? 00:00:00 /usr/sbin/httpd
apache 24170 24166 0 18:56 ? 00:00:00 /usr/sbin/httpd
apache 24171 24166 0 18:56 ? 00:00:00 /usr/sbin/httpd
apache 24172 24166 0 18:56 ? 00:00:00 /usr/sbin/httpd
apache 24173 24166 0 18:56 ? 00:00:00 /usr/sbin/httpd
apache 24174 24166 0 18:56 ? 00:00:00 /usr/sbin/httpd
apache 24175 24166 0 18:56 ? 00:00:00 /usr/sbin/httpd
root 24193 27860 0 18:56 pts/0 00:00:00 grep httpd
[root@VM_0_17_centos httpd-2.2.9]# /etc/rc.d/init.d/httpd stop
Stopping httpd: [ OK ]
[root@VM_0_17_centos httpd-2.2.9]# /usr/local/apache2/bin/apachectl start
httpd: apr_sockaddr_info_get() failed for VM_0_17_centos
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[root@VM_0_17_centos httpd-2.2.9]#
启动完毕,浏览器输入服务器ip访问,出现apache导航页,或者显示It works!代表服务启动成功!