Linux中软件包的安装方式有多种。在Centos中,我们不仅可以通过源码编译安装,还可以通过软件包管理器来安装。在此,通过源码安装、rpm、yum、dnf四种安装方式,来对比各种安装方式之间的优缺点。本次实验环境在VMvare下,用到的操作系统为Centos7.

1.编译安装

源码编译安装具有定制化的设置,我们可以在安装前自己指定参数。


例:安装httpd

下载源码包 httpd-2.4.25.tar.bz2

centos全包安装 centos怎么安装软件包_apache

解压源码包

tar -xvf httpd-2.4.25.tar.bz2 

进入到解压后的目录

centos全包安装 centos怎么安装软件包_安装包_02

可以看到有 README INSTALL 这些帮助文档,内容分别为:

centos全包安装 centos怎么安装软件包_apache_03

centos全包安装 centos怎么安装软件包_安装包_04

这些文档可以帮助我们了解和安装这个软件。

同样我们可以使用 ./configure --help 来获取帮助信息

centos全包安装 centos怎么安装软件包_安装包_05

了解这些信息后,我们就可以开始编译安装了。

第一步,配置 ./configure      此步骤是为了:

(1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成Makefile


(2) 检查依赖到的外部环境,如依赖的软件包。

./configure --prefix=/test/apache24 --sysconfdir=/etc/apache2


我们在这里指定了两个参数,分别设定了软件安装目录和配置文件目录

回车后,发现报错

centos全包安装 centos怎么安装软件包_安装包_06

这是因为我们没有安装 apr-devel ,安装 apr-devel

yum install apr-devel

安装后继续,又出现错误信息

centos全包安装 centos怎么安装软件包_安装包_07

这个错误信息提示我们需要安装 apr-util-devel 

yum install apr-util-devel



安装后继续,错误信息再次出来了

centos全包安装 centos怎么安装软件包_centos全包安装_08

这里我们要解决gcc这个依赖关系,因为安装gcc同样要解决很多依赖性关系,所以我们直接安装包组

"Development tools" 

yum groupinstall "Development Tools"


继续

centos全包安装 centos怎么安装软件包_包名_09

这个错误信息表示我们要安装 pcre-devel

yum install pcre-devel


终于,所有的依赖关系解决了。

centos全包安装 centos怎么安装软件包_apache_10


第二步  make    


此步骤会根据Makefile文件,构建应用程序,并将编译的文件临时放在此目录下

centos全包安装 centos怎么安装软件包_包名_11

centos全包安装 centos怎么安装软件包_apache_12

第三步 make install

此步骤会将构建好的程序文件复制到系统相应的路径下,完成最终的安装。

centos全包安装 centos怎么安装软件包_安装包_13

测试:

将执行命令和帮助文档的路径写入PATH

vim /etc/profile.d/env.sh

添加一段话  export PATH=/test/apache24/bin/:$PATH

centos全包安装 centos怎么安装软件包_apache_14

使其生效   source /etc/profile.d/env.sh

将帮助文档写入 PATH  

vim /etc/man_db.conf

添加一段话     MANDATORY_MANPATH                       /app/apache24/man

centos全包安装 centos怎么安装软件包_apache_15

开启http服务,关闭防火墙

apachectl start
iptables -F

centos全包安装 centos怎么安装软件包_apache_16

在浏览器中输入IP地址测试

centos全包安装 centos怎么安装软件包_centos全包安装_17

至此整个编译安装结束

可以看到,源码安装最麻烦的就是第一步,我们需要解决许多依赖性关系。当然如果我们事先知道这些依赖关系,就可以提前装入这些依赖包。

2.RPM包管理

RPM全名“RedHat Package Manager"。RPM文件已经事先编译完成,并且被打包完毕,这就很方便我们的安装和文件传输。但是RPM依然不能解决依赖性关系,这就导致一旦安装的软件的依赖性关系没有被解决,我们的软件就不会被安装。而且RPM文件是经过编译过的,所以我们要安装软件的现在的主机环境,必须和编译打包这个软件时的主机环境一样。举个例子来说,我们要在Centos 7 中安装某个软件时,就不能用Centos 6中的RPM包。

例:安装 tree

挂载光盘(光盘中有我们系统版本的大多数软件包)

mount /dev/sr0  /media/

centos全包安装 centos怎么安装软件包_apache_18

安装 tree

rpm -ivh /media/Packages/tree-1.6.0-10.el7.x86_64.rpm 

centos全包安装 centos怎么安装软件包_安装包_19

卸载 tree

rpm -e tree

centos全包安装 centos怎么安装软件包_centos全包安装_20

rpm 命令详解


 rpm {-i|--install} [install-options] PACKAGE_FILE -i 安装 --test 仅测试,不安装 --nodeps 忽略依赖性 --replacepkgs 重复安装已安装过的包,文件覆盖 --replacefiles 将要安装包的部分文件与其他已安装的包文件冲突,可继续安装 --noscripts:不执行程序包脚本 %pre: 安装前脚本; --nopre %post: 安装后脚本; --nopost %preun: 卸载前脚本; --nopreun %postun: 卸载后脚本; --nopostun --oldpackage 已装新的,再装旧的 --force 等同于--replacepkgs --replacefiles --oldpackage -U 更新 如果装的有旧的,则升级,如果未装旧的,则安装新的。 -F 更新 如果装的有旧的,则升级,如果未装旧的,不安装新的。   -v 详细信息 -vv 更详细信息 * -h 显示进度 -ivh 安装并详细显示进度 *** -q 查询 -qa 查询安装的所有包 *** rpm -qa scr* rpm -qa |grep ^scr -qf 查询指定的文件由哪一个rpm包提供(文件用路径表示) *** -qp 指定未安装的rpm包 -q --provides 软件包名 查看指定的软件包提供了哪些能力 可以使用-a 显示当前系统中由已安装过的包提供的所有能力 -q --whatprovides webserver 查看指定的能力由哪一个软件包提供 -q --whatrequires CAPABILITY 查询指定的CAPABILITY被哪个包所依赖 -qR 软件包名 查看指定的软件包依赖哪些能力 -qc 软件包名 查看配置文件 -qd 软件包名 查看帮助文档 -ql 软件包名 查看该软件包所提供的所有文件 *** -qi 软件包名 查看软件包的信息 -q --scripts 软件包名 查看软件包的安装脚本 -V 查看指定包所提供的文件是否发生过改变 *** S file Size differs M Mode differs (includes permissions and file type) 5 digest (formerly MD5 sum) differs D Device major/minor number mismatch L readLink(2) path mismatch U User ownership differs G Group ownership differs T mTime differs P capabilities differ   -K|checksig rpmfile 检查包的完整性和签名 --nosignature: 不检查来源合法性 --nodigest:不检查包完整性

3.YUM包管理

YUM是RPM的前端程序,它能够很好的解决软件包的依赖关系。因为Centos中会将发布的软件事先放在yum服务器中,所以当我们使用yum安装软件时,需要先找到这些yum服务器。而这些服务器可以是: http:// 、https:// 、ftp:// 、file:// 。我们可以通过修改配置文件,来选择的我们的yum源。

配置本地源:

需要修改/etc/yum.repos.d/ 下的 .repo文件

我们删除该目录下的所有文件,并创建一个自己的  .repo文件

cd /etc/yum.repos.d/

rm -rf *

touch test.repo

centos全包安装 centos怎么安装软件包_centos全包安装_21

配置 test.repo 文件

vim test.repo

centos全包安装 centos怎么安装软件包_centos全包安装_22

配置完成后,清空下yum缓存,并查看当前的yum源有哪些

yum clean all

yum repolist

centos全包安装 centos怎么安装软件包_apache_23

测试安装tree

yum install tree

centos全包安装 centos怎么安装软件包_centos全包安装_24

centos全包安装 centos怎么安装软件包_centos全包安装_25

配置阿里云的yum源:

配置过程和本地yum仓库类似

centos全包安装 centos怎么安装软件包_centos全包安装_26

centos全包安装 centos怎么安装软件包_apache_27

可以看到,现在有两个yum仓库。当我们安装软件时,哪个源的软件版本较新,yum就会使用哪个进行安装。

yum命令详解:


yum repolist [all | enabled | disabled] 列出仓库列表 clean all 清空缓存 makecache 构建缓存 list {available|installed|updates} 显示程序包 available 只显示未安装的包 installed 只显示已安装的,@anaconda表示安装操作系统时安装的包 installed表示手工通过rpm、yum安装的包 updates 只显示可更新的包 install package1 [package2] [...] 安装软件包 reinstall package1 [package2] [...] 重新安装 update [package1] [package2] [...] 升级安装包 downgrade package1 [package2] [...] 降级 check-update 检查可用升级 remove package1 [package2] [...] 卸载安装包 info 查看程序包信息 provides [whatprovides] 查看文件来自于哪个rpm包 search packagename 以指定的关键字搜索程序包名及summary信息 deplist packagename 查询指定的包依赖哪些能力及所提供的包 history 参看yum历史事务记录 undo n 卸载第n条记录所对应的安装包 redo n 重装第n条记录所对应的安装包 groupinstall group1 [group2] [...] 安装包组 groupupdate group1 [group2] [...] 更新包组 groupremove group1 [group2] [...] 卸载包组 groupinfo group1 [...] 查看包组信息  

4.DNF包管理


DNF用Python3编写,相比较与YUM,它的处理速度更快。最新的Centos7并没有默认安装。DNF在使用上和YUM的命令是一样的,而且它的配置文件也是直接使用YUM的。


安装所需软件包(centos7),最新的epel提供

dnf-0.6.4-2.sdl7.noarch.rpm
dnf-conf-0.6.4-2.sdl7.noarch.rpm
libcomps-0.1.8-3.el7.x86_64.rpm
python-dnf-0.6.4-2.sdl7.noarch.rpm

python2-libcomps-0.1.8-3.el7.x86_64.rpm

DNF的命令选项跟YUM一样,大家可以参考YUM来使用DNF。在Fedora 22 中,YUM已经被DNF取代。