在图形界面下习惯了双击.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自己去了解,希望对大家有帮助。