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

1.编译安装

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


例:安装httpd

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

Centos 软件安装

解压源码包

tar -xvf httpd-2.4.25.tar.bz2 

进入到解压后的目录

Centos 软件安装

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

Centos 软件安装

Centos 软件安装

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

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

Centos 软件安装

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

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

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

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

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

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

回车后,发现报错

Centos 软件安装

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

yum install apr-devel

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

Centos 软件安装

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

yum install apr-util-devel


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

Centos 软件安装

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

"Development tools" 

yum groupinstall "Development Tools"


继续

Centos 软件安装

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

yum install pcre-devel


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

Centos 软件安装


第二步  make    

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

Centos 软件安装

Centos 软件安装

第三步 make install

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


Centos 软件安装

测试:

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

vim /etc/profile.d/env.sh

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

Centos 软件安装

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

将帮助文档写入 PATH  

vim /etc/man_db.conf

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

Centos 软件安装

开启http服务,关闭防火墙

apachectl start
iptables -F

Centos 软件安装

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

Centos 软件安装

至此整个编译安装结束

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

2.RPM包管理

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

例:安装 tree

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

mount /dev/sr0  /media/

Centos 软件安装

安装 tree

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

Centos 软件安装

卸载 tree

rpm -e tree

Centos 软件安装

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 软件安装

配置 test.repo 文件

vim test.repo

Centos 软件安装

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

yum clean all

yum repolist

Centos 软件安装

测试安装tree

yum install tree

Centos 软件安装

Centos 软件安装

配置阿里云的yum源:

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

Centos 软件安装

Centos 软件安装

可以看到,现在有两个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取代。

相关文章: