从CentOS安装R中看yum、rpm、repo到底有什么关系

在图形界面下习惯了双击.exe(或者.dmg)安装软件,到了Linux服务端可能会有很大的不适。此前,我都是直接Google,然后不管三七二十一地直接把安装命令丢到bash里,期待顺利安装……

但今天当我要重装R语言的时候,由于以前是手工编译安装的,现在需要用yum来安装却总是出错(yum安装处理了一些依赖关系才能使得rstudio-server顺利运行)。再也不想忍受这种听天由命的感觉了,于是理解了一下yum、rpm、repo之间到底有什么关系:

软件包管理系统

首先yum、rpm、repo这三个词都是属于软件包管理系统下的。我今天遇到的重装R语言的问题就是血与泪的教训:不到万不得不以不要自己编译安装软件,否则时间久了管理起来会一团糟,大多数软件都能通过Linux的软件包管理系统进行统一安装与管理。Linux 发行版主要有两大包管理技术阵营: Debian 的.deb,和红帽的.rpm:

包管理系统 发行版 (部分列表)
Debian Style (.deb) Debian, Ubuntu, Xandros, Linspire
Red Hat Style (.rpm) Fedora, CentOS, Red Hat Enterprise Linux, OpenSUSE, Mandriva, PCLinuxOS

更直白一点说,就是Ubuntu的.deb 相当于 CentOS的.rpm 相当于 Windows的.exe 相当于 OSX的.dmg。

上层和底层软件包工具

软件包管理系统通常由两种工具类型组成:底层工具用来安装和删除软件包文件(rpm);上层工具完成元数据搜索和依赖解析(yum)。

我们用yum与rpm都可以安装软件:

yum install package_name
rpm -i package_file

但是yum会从一个资源库(repository)中下载软件包,并经过完全依赖解析来安装它,这也是为什么每次运行yum install的时候会看到安装一堆相关软件;而rpm则需要先下载好一个rpm文件然后进行安装,并且如果rpm程序发现缺少了一个依赖,就会报错并退出。

资源库(repository)

刚才我们提到yum会从一个资源库(repository)中下载并安装软件包,而标题中的repo指的就是资源库,它的路径在/etc/yum.repos.d/下,我们可以看看这个目录里有些什么:

[root@n1 logos]# ls /etc/yum.repos.d/
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-fasttrack.repo  CentOS-Media.repo  CentOS-Vault.repo  devtools-2.repo

所以如果你发现:yum install R报错说找不到相应的包,那就是因为你的资源库不够强大,没有包含R这个软件。

R语言官网介绍如何在Red Hat上安装R的文档中有这么一句话:“The Fedora RPMs for R have been ported to RHEL by the project Extra Packages for Enterprise Linux (EPEL).”

Google一下”EPEL”,可以在EPEL的中国官网上看到介绍:“企业版 Linux 附加软件包(以下简称 EPEL)是一个由特别兴趣小组创建、维护并管理的,针对 红帽企业版 Linux(RHEL)及其衍生发行版(比如 CentOS、Scientific Linux、Oracle Enterprise Linux)的一个高质量附加软件包项目。”

也就是说EPEL是一个汇集了各种附加软件包的项目,而R语言就包含在这个项目,我们可以通过如下命令安装并启用 EPEL 源:

yum install epel-release

此时我们会发现资源库的目录/etc/yum.repos.d/下多出了两个.repo文件epel.repo与epel-testing.repo,现在再来运行yum install R就可以顺利安装了!

本文参考了The Linux Command Line中文版,并结合了自己在实际项目中遇到的问题。当然,yum还有查找、更新、删除等操作,这个相信大家都会用man自己去了解,希望对大家有帮助。

《从CentOS安装R中看yum、rpm、repo到底有什么关系》上有8条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注