在圖形界面下習慣了雙擊.exe(或者.dmg)安裝軟件,到了Linux服務端可能會有很大的不適。此前,我都是直接Google,然後不管三七二十一地直接把安裝命令丟到bash裡,期待順利安裝……
但今天當我要重裝R語言的時候,由於以前是手工編譯安裝的,現在需要用yum來安裝卻總是出錯(yum安裝處理了一些依賴關系才能使得rstudio-server順利運行)。再也不想忍受這種聽天由命的感覺了,於是理解了一下yum、rpm、repo之間到底有什麼關系:
首先yum、rpm、repo這三個詞都是屬於軟件包管理系統下的。我今天遇到的重裝R語言的問題就是血與淚的教訓:不到萬不得不以不要自己編譯安裝軟件,否則時間久了管理起來會一團糟,大多數軟件都能通過Linux的軟件包管理系統進行統一安裝與管理。Linux 發行版主要有兩大包管理技術陣營: Debian 的.deb,和紅帽的.rpm:
更直白一點說,就是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程序發現缺少了一個依賴,就會報錯並退出。
剛才我們提到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相關信息見CentOS 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=14