2021-05-12 14:32:11
從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自己去了解,希望對大家有幫助。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2015-12/126457.htm
相關文章