天天看點

CentOS上最佳的第三方倉庫

從 software collections、epel 和 remi 獲得可靠的 centos 新版軟體。

在 red hat 企業 linux(rhel) 上,提供那些早已老掉牙的軟體已經是企業級軟體廠商的傳統了。這倒不是因為他們懶,而确實是使用者需要。很多公司像看待家具一樣看待軟體:我買一張桌子,能用一輩子,軟體不應該也這樣嗎?

centos 作為 rhel 的複制品有着同樣的遭遇。雖然 red hat 還在為這些被廠商抛棄的過時軟體提供支援、修補安全漏洞等,但如果你的應用依賴新版軟體,你就得想辦法了。 我在這個問題上不止一次碰壁。 lamp 組合裡任一個元件都需要其它所有元件能與其相容,這有時就顯得很麻煩。 比如說去年我就被 rhel/centos 折騰得夠嗆。rehl/centos 第 6 版最高支援 php 5.3 ,第 7 版支援到 php 5.4 。而 php 5.3 早在 2014 年 8 月就到達 eol(end of life) ,不再被廠商支援了, php 5.4 的 eol 在 2015 年 9 月, 5.5 則是 2016 年 7 月。 有太多古老的軟體版本,包括 mysql、python 等,它們應該像木乃伊一樣被展示在博物館裡,但它們卻活在你的系統上。

那麼,可憐的管理者們該怎麼辦呢?如果你跑着 rhel/centos ,那應該先試試 software collections,因為這是 red hat 唯一支援的新軟體包源。 software collections 為 centos 設立了專門的倉庫,安裝和管理都和其它第三方倉庫一樣。但如果你用的是 rhel 的,情況就有點不同了,具體請參考 rhel 的解決方法。software collections 同樣支援 fedora 和 scientific linux 。

安裝 software collections

在 centos 6/7 上安裝 software collections 的指令如下:

$ sudo yum install centos-release-scl 

centos-release-scl-rh 可能作為依賴包被同時安裝。

然後就可以像平常一樣搜尋、安裝軟體包了:

$ yum search php7 

 [...] 

 rh-php70.x86_64 : package that installs php 7.0 

$ sudo yum install rh-php70  

最後一件事就是啟用你的新軟體包:

$ scl enable rh-php70 bash 

$ php -v 

php 7.0.10 

此指令會開啟一個新的 bash 并配置好環境變量以便運作新軟體包。 如果需要的話,你還得安裝對應的擴充包,比如對于 python 、php、mysql 等軟體包,有些配置檔案也需要修改以指向新版軟體(比如 apache )。

這些 scl 軟體包在重新開機後不會激活。scl 的設計初衷就是在不影響原有配置的前提下,讓新舊軟體能一起運作。不過你可以通過 ~/.bashrc 加載 scl 提供的 enable 腳本來實作自動啟用。 scl 的所有軟體包都安裝在 /opt 下, 以我們的 php 7 為例,在 ~/.bashrc 裡加入一行:

source /opt/rh/rh-php70/enable 

以後相應的軟體包就能在重新開機後自動啟用了。有新軟體保駕護航,你終于可以專注于自己的業務了。

列出可用軟體包

那麼,到底 software collections 裡都是些什麼呢? centos-release-scl 裡有一些由社群維護的額外的軟體包。除了在 centos wiki 檢視軟體包清單外,你還可以使用 yum 。我們先來看看安裝了哪些倉庫:

$ yum repolist 

[...] 

repo id                  repo name 

base/7/x86_64            centos-7 - base 

centos-sclo-rh/x86_64    centos-7 - sclo rh 

centos-sclo-sclo/x86_64  centos-7 - sclo sclo 

extras/7/x86_64          centos-7 - extras 

updates/7/x86_64         centos-7 - updates 

yum 沒有專門用來列印某一個倉庫中所有軟體包的指令,是以你得這樣來: (lctt 譯注:實際上有,yum repo-pkgs repo list,需要 root 權限,dnf 同)

$ yum --disablerepo "*" --enablerepo centos-sclo-rh \ 

 list available | less 

--disablerepo 與 --enablerepo 選項的用法沒有詳細的文檔,這裡簡單說下。 實際上在這個指令裡你并沒有禁用或啟用什麼東西,而隻是将你的搜尋範圍限制在某一個倉庫内。 此指令會列印出一個很長的清單,是以我們用管道傳遞給 less 輸出。

epel

強大的 fedora 社群為 feora 及所有 rhel 系的發行版維護着 epel:extra packages for enterprise linux 。 裡面包含一些最新軟體包以及一些未被發行版收納的軟體包。安裝 epel 裡的軟體就不用麻煩 enable 腳本了,直接像平常一樣用。你還可以用 --disablerepo 和 --enablerepo 選項指定從 epel 裡安裝軟體包:

$ sudo yum --disablerepo "*" --enablerepo epel install [package] 

remi collet

remi collet 在 remi 的 rpm 倉庫 裡維護着大量更新的和額外的軟體包。需要先安裝 epel ,因為 remi 倉庫依賴它。

centos wiki 上有較完整的倉庫清單:更多的第三方倉庫 ,用哪些,不用哪些,裡面都有建議。

作者:carla schroder

來源:51cto