首頁 > 軟體

從CentOS安裝R中看yum、rpm、repo到底有什麼關係

2020-06-16 17:48:30

在圖形介面下習慣了雙擊.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


IT145.com E-mail:sddin#qq.com