通常 Linux 上的软件安装主要有四种方式:

  • 在线安装
  • 从二进制软件包安装
  • 从源代码编译安装

这几种安装方式各有优劣,而大多数软件包会采用多种方式发布软件,所以我们常常需要全部掌握这几种软件安装方式,以便适应各种环境。下面将在线安装的方式,其他两种将不做介绍。



1、RPM、SRPM与yum

在学习这种安装方式之前有一点需要说明的是,在不同的linux发行版上面在线安装方式会有一些差异包括使用的命令及它们的包管理工具,包括有:

  • Rad Hat系统(包括Fedora/CentOS)发展的RPM软件管理机制与yum在线更新模式
  • Debian、Ubuntu使用的dpkg软件管理机制与APT在线更新模式等等

这里介绍RPM和yum,不涉及dpkg和APT。



1.1、 RPM与SRPM

RPM 全名是『RedHat Package Manager 』,简称则为 RPM 。RPM 是以一种数据库记录的方式来将你所需要的软件安装到你的 Linux 系统的一套管理机制。
RPM的工作机制:

  • 将你要安装的软件先编译过, 并且打包成为 RPM 机制的包装文件
  • 透过包装好的软件里头默认的数据库记录, 记录这个软件要安装的时候必须具备的相依属性软件
  • 当安装在你的 Linux 主机时, RPM 会先依照软件里头的数据查询 Linux 主机的相依属性软件是否满足, 若满足则予以安装,若不满足则不予安装。

这样一来的优点是:

  • 由于已经编译完成并且打包完毕,所以软件传输与安装上很方便 (不需要再重新编译);
  • 由于软件的信息都已经记录在 Linux 主机的数据库上,很方便查询、升级与卸载

但是注意,这样一来,通常不同的 distribution 所释出的 RPM 文件,并不能用在其他的 distributions 上。这个机制的问题是:

  • 软件文件安装的环境必须与打包时的环境需求一致或相当
  • 需要满足软件的相依属性需求;
  • 反安装时需要特别小心,最底层的软件不可先移除,否则可能造成整个系统的问题!

所以一般在发行软件时,会同时发出RPM版本和SRPM版本。SRPM 是什么呢?顾名思义,他是 Source RPM 的意思,也就是这个 RPM 文件里面含有原始码。这样我们就可以通过修改原始码,安装不同的distribution释放的软件。

RPM和SRPM文件的格式分别为:

xxxxxx.rpm
xxxxxx.src.rpm

直接从RPM或SRPM文件进行安装过于麻烦,这里不做介绍。



1.2、yum

前面提到直接下载RPM文件进行安装,会有环境不符的问题产生,而使用SRPM文件又有需要自己手动进行修改编译的麻烦,yum正是为了解决这些问题产生的。

yum的工作机制:

  • CentOS 先将释出的软件放置到 YUM 服务器内
  • 然后分析这些软件的相依属性问题,将软件内的记录信息写下来 (header)。
  • 然后再将这些信息分析后记录成软件相关性的列表列表。这些列表数据与软件所在的本机或网络位置可以称呼为容器或软件仓库或软件库 (repository)。
  • 当客户端有软件安装的需求时,客户端主机会主动的向网络上面的 yum 服务器的软件库网址下载清单列表, 然后透过列表列表的数据与本机 RPM 数据库已存在的软件数据相比较,就能够一口气安装所有需要的具有相依属性的软件了。

当客户端有升级、安装的需求时, yum 会向软件库要求清单的更新,等到清单更新到本机的
/var/cache/yum 里面后, 等一下更新时就会用这个本机清单与本机的 RPM 数据库进行比较,这样
就知道该下载什么软件。



1.2.1、利用 yum 进行查询、安装、升级与移除功能



1.2.1.1、查询功能

yum的查询功能的基本格式为:

yum [option] [查询工作项目] [相关参数]

选项与参数:

[option]:主要的选项,包括有:

  • -y : 当 yum 要等待用户输入时, 这个选项可以自动提供 yes 的响应;
  • --installroot=/some/path : 将该软件安装在 /some/path 而不使用默认路径

[查询工作项目] [相关参数]: 这方面的参数有:

  • search :搜寻某个软件名称或者是描述 (description) 的重要关键字;
  • list :列出目前 yum 所管理的所有的软件名称与版本,有点类似 rpm -qa;
  • info :同上,不过有点类似 rpm -qai 的执行结果;
  • provides: 从文件去搜寻软件! 类似 rpm -qf 的功能!

例如:

  • 搜寻磁盘阵列 (raid) 相关的软件有哪些
[root@izwz9gtdx1ch4f9gn56b32z ~]# yum search raid
  • 查看mdadm这个软件的功能
[root@izwz9gtdx1ch4f9gn56b32z ~]# yum info mdadm
  • 找出yum服务器上提供的所有软件的名称
[root@izwz9gtdx1ch4f9gn56b32z ~]# yum list
  • 列出目前服务器上已经安装的软件有哪些
[root@izwz9gtdx1ch4f9gn56b32z ~]# yum list installed
  • 列出目前服务器上可供本机进行升级的软件有哪些
[root@izwz9gtdx1ch4f9gn56b32z ~]# yum list updates
  • 列出提供passwd这个文件的软件有哪些
[root@izwz9gtdx1ch4f9gn56b32z ~]# yum provides passwd
  • 列出以python开头的软件名
[root@izwz9gtdx1ch4f9gn56b32z ~]# yum list python*



1.2.1.2、安装/升级功能

yum安装/升级功能的基本格式为:

  • yum [option] [安装与升级的工作项目] [相关参数]

选项与参数:

  • install:后面接要安装的软件!
  • update:后面接要升级的软件,若要整个系统都升级,就直接 update 即可

示例:在CentOS7中安装jdk

  • 查找jdk
[pierre_cai@izwz9gtdx1ch4f9gn56b32z ~]$ yum search java | grep jdk
  • 选择版本进行安装
[pierre_cai@izwz9gtdx1ch4f9gn56b32z ~]$ sudo yum install java-1.8.0-openjdk



1.2.1.3、卸载删除功能

使用yum的uninstall命令可以快速卸载软件,例如:

[pierre_cai@izwz9gtdx1ch4f9gn56b32z ~]$ sudo yum remove java-1.8.0-openjdk