你的位置:首页 > 操作系统

[操作系统]从CentOS安装R中看yum、rpm、repo到底有什么关系


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

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

 

这将是一个Elasticsearch相关的系列文章欢迎大家关注我的个人博客:http://logos.name/

 

软件包管理系统

首先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_namerpm -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自己去了解,希望对大家有帮助。