全部博文(2065)
分类: LINUX
2010-10-02 10:33:26
Rpm与yum包
时间:2010-10-2
1、 Linux界的两大主流:RPM与DPKG
dpkg:
這個機制最早是由 Debian Linux 社群所開發出來的,透過 dpkg 的機制, Debian 提供的軟體就能夠簡單的安裝起來,同時還能提供安裝後的軟體資訊,實在非常不錯。
只要是衍生於 Debian 的其他 Linux distributions 大多使用 dpkg 這個機制來管理軟體的, 包括 B2D, Ubuntu 等等。(ap-get?)
RPM:
這個機制最早是由 Red Hat 這家公司開發出來的,後來實在很好用,因此很多 distributions 就使用這個機制來作為軟體安裝的管理方式。包括
Fedora, CentOS, SuSE 等等知名的開發商都是用這咚咚。
RPM 則依開發商的不同,有 Red Hat 系統的 yum , SuSE 系統的 Yast Online Update (YOU), Mandriva 的 urpmi 軟體等
2、 什么是RPM与SRPM
最大的特點就是將你要安裝的軟體先編譯過, 並且打包成為 RPM 機制的包裝檔案,透過包裝好的軟體裡頭預設的資料庫記錄, 記錄這個軟體要安裝的時候必須具備的相依屬性軟體,當安裝在你的 Linux 主機時, RPM 會先依照軟體裡頭的資料查詢 Linux 主機的相依屬性軟體是否滿足, 若滿足則予以安裝,若不滿足則不予安裝。那麼安裝的時候就將該軟體的資訊整個寫入 RPM 的資料庫中,以便未來的查詢、驗證與反安裝!這樣一來的優點是:
1. 由於已經編譯完成並且打包完畢,所以軟體傳輸與安裝上很方便 (不需要再重新編譯);
2. 由於軟體的資訊都已經記錄在 Linux 主機的資料庫上,很方便查詢、升級與反安裝
相关的不足:
1. 軟體檔案安裝的環境必須與打包時的環境需求一致或相當;(指定明确的发行版本)
2. 需要滿足軟體的相依屬性需求;
3. 反安裝時需要特別小心,最底層的軟體不可先移除,否則可能造成整個系統的問題!
如果我真的想要安裝其他 distributions 提供的好用的 RPM 軟體檔案時? 呵呵!還好,還有 SRPM 這個東西!SRPM 是什麼呢?顧名思義,他是 Source RPM 的意思,也就是這個 RPM 檔案裡面含有原始碼哩!特別注意的是,這個 SRPM 所提供的軟體內容『並沒有經過編譯』, 他提供的是原始碼喔!
通常 SRPM 的副檔名是以 ***.src.rpm 這種格式來命名的。不過,既然 SRPM 提供的是原始碼,那麼為什麼我們不使用 Tarball 直接來安裝就好了?這是因為 SRPM 雖然內容是原始碼, 但是他仍然含有該軟體所需要的相依性軟體說明、以及所有 RPM 檔案所提供的資料。同時,他與 RPM 不同的是,他也提供了參數設定檔 (就是 configure 與 makefile)。所以,如果我們下載的是 SRPM ,那麼要安裝該軟體時,你就必須要:
軟體安裝到我們的系統當中,而不必與原作者打包的 Linux 環境相同了?這就是 SRPM 的用處了!
檔案格式 |
檔名格式 |
直接安裝與否 |
內含程式類型 |
可否修改參數並編譯 |
RPM |
xxx.rpm |
可 |
已編譯 |
不可 |
SRPM |
xxx.src.rpm |
不可 |
未編譯之原始碼 |
可 |
3、 什么是i386,i586,i686,noarch,x86_64
例如 rp-pppoe-3.1-5.i386.rpm 這的檔案的意義為:
rp-pppoe - 3.1 - 5 .i386 .rpm 軟體名稱 軟體的版本資訊 釋出的次數 適合的硬體平台 副檔名 |
軟體名稱:
個軟體的名稱了!上面的範例就是 rp-pppoe 。
版本資訊:
每一次更新版本就需要有一個版本的資訊,否則如何知道這一版是新是舊?這裡通常又分為主版本跟次版本。以上面為例,主版本為 3 ,在主版本的架構下更動部分原始碼內容,而釋出一個新的版本,就是次版本啦!以上面為例,就是 1 囉!
釋出版本次數:
通常就是編譯的次數啦!那麼為何需要重複的編譯呢?這是由於同一版的軟體中,可能由於有某些 bug 或者是安全上的顧慮,所以必須要進行小幅度的 patch 或重設一些編譯參數。 設定完成之後重新編譯並打包成 RPM 檔案!因此就有不同的打包數出現了!
操作硬體平台:
這是個很好玩的地方,由於 RPM 可以適用在不同的操作平台上,但是不同的平台設定的參數還是有所差異性!
並且,我們可以針對比較高階的 CPU 來進行最佳化參數的設定,這樣才能夠使用高階 CPU 所帶來的硬體加速功能。 所以就有所謂的
i386, i586, i686, x86_64 與
noarch 等的檔案名稱出現了!
平台名稱 |
適合平台說明 |
i386 |
幾乎適用於所有的 x86 平台,不論是舊的 pentum 或者是新的 Intel Core 2 與 K8 系列的 CPU 等等,都可以正常的工作!那個 i 指的是 Intel 相容的 CPU 的意思,至於 386 不用說,就是 CPU 的等級啦! |
i586 |
就是針對 586 等級的電腦進行最佳化編譯。那是哪些 CPU 呢?包括 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU (socket 7 插腳) 等等的 CPU 都算是這個等級; |
i686 |
在 pentun II 以後的 Intel 系列 CPU ,及 K7 以後等級的 CPU 都屬於這個 686 等級! 由於目前市面上幾乎僅剩 P-II 以後等級的硬體平台,因此很多 distributions 都直接釋出這種等級的 RPM 檔案。 |
x86_64 |
針對 64 位元的 CPU 進行最佳化編譯設定,包括 Intel 的 Core 2 以上等級 CPU ,以及 AMD 的 Athlon64 以後等級的 CPU ,都屬於這一類型的硬體平台。 |
noarch |
就是沒有任何硬體等級上的限制。一般來說,這種類型的 RPM 檔案,裡面應該沒有 binary program 存在, 較常出現的就是屬於 shell script 方面的軟體。 |
新的 CPU 都能夠執行舊型 CPU 所支援的軟體,也就是說硬體方面都可以向下相容的, 因此最低等級的 i386 軟體可以安裝在所有的 x86 硬體平台上面,不論是 32 位元還是 64 位元。但是反過來說就不行了。舉例來說,目前硬體大多是 64 位元的等級,因此妳可以在該硬體上面安裝 x86_64 或 i386 等級的 RPM 軟體。但在你的舊型主機,例如 P-III/P-4 32 位元機器上面,就不能夠安裝 x86_64 的軟體!(下载那种I386的是没有问题的了。能够直接被安装上去的如果是下载64位元的话就可能安装不了)
4、 解决RPM包之间的依赖性问题-------YUM线上升级
CentOS 先將釋出的軟體放置到 YUM 伺服器內,然後分析這些軟體的相依屬性問題,將軟體內的記錄資訊寫下來 (header)。 然後再將這些資訊分析後記錄成軟體相關性的清單列表。這些列表資料與軟體所在的位置可以稱呼為容器 (repository)。 當用戶端有軟體安裝的需求時,用戶端主機會主動的向網路上面的 yum 伺服器的容器網址下載清單列表, 然後透過清單列表的資料與本機 RPM 資料庫已存在的軟體資料相比較,就能夠一口氣安裝所有需要的具有相依屬性的軟體了。 整個流程可以簡單的如下圖說明:
圖 1.5.1、YUM 使用的流程示意圖
當用戶端有升級、安裝的需求時, yum 會向容器要求清單的更新,等到清單更新到本機的 /var/cache/yum 裡面後, 等一下更新時就會用這個本機清單與本機的 RPM 資料庫進行比較,這樣就知道該下載什麼軟體。接下來 yum 會跑到容器伺服器 (yum server) 下載所需要的軟體,然後再透過 RPM 的機制開始安裝軟體啦!這就是整個流程! 談到最後,還是需要動到 RPM 的啦!
个人理解:依据yum去仓库下载下来到本地然后再用RPM自己来安装
為什麼要做出『容器』呢?由於 yum 伺服器提供的 RPM 檔案內容可能有所差異,舉例來說,原廠釋出的資料有 (1)原版資料; (2)更新資料 (update); (3)特殊資料 (例如第三方協力軟體,或某些特殊功能的軟體)。 這些軟體檔案基本上不會放置到一起,那如何分辨這些軟體功能呢?就用『容器』的概念來處理的啦! 不同的『容器』網址,可以放置不同的軟體功能之意!
5、 RPM软件管理程序:rpm
安裝完畢後,該軟體相關的資訊就會被寫入 /var/lib/rpm/ 目錄下的資料庫檔案中了。 上面這個目錄內的資料很重要喔!因為未來如果我們有任何軟體升級的需求,版本之間的比較就是來自於這個資料庫, 而如果妳想要查詢系統已經安裝的軟體,也是從這裡查詢的!同時,目前的 RPM 也提供數位簽章資訊, 這些數位簽章也是在這個目錄內記錄的呢!所以說,這個目錄得要注意不要被刪除了啊!
PS:当你安装完了RPM包之后就会将其写入到这个目录去
6、 RPM安装(install)
假設我要安裝一個檔名為 rp-pppoe-3.5-32.1.i386.rpm 的檔案,那麼我可以這樣:
[root@www ~]# rpm -i rp-pppoe-3.5-32.1.i386.rpm |
不過,這樣的參數其實無法顯示安裝的進度,所以,通常我們會這樣下達安裝指令:
[root@www ~]# rpm -ivh package_name 選項與參數: -i :install 的意思 -v :察看更細部的安裝資訊畫面 -h :以安裝資訊列顯示安裝進度
範例一:安裝 rp-pppoe-3.5-32.1.i386.rpm [root@www ~]# rpm -ivh rp-pppoe-3.5-32.1.i386.rpm Preparing... ####################################### [100%] 1:rp-pppoe ####################################### [100%]
範例二、一口氣安裝兩個以上的軟體時: [root@www ~]# rpm -ivh a.i386.rpm b.i386.rpm *.rpm # 後面直接接上許多的軟體檔案! # 能够一次性安装多个RPM包 範例三、直接由網路上面的某個檔案安裝,以網址來安裝: [root@www ~]# rpm -ivh |
另外,如果我們在安裝的過程當中發現問題,或者已經知道會發生的問題, 而還是『執意』要安裝這個軟體時,可以使用如下的參數『強制』安裝上去:
rpm 安裝時常用的選項與參數說明 |
|
可下達的選項 |
代表意義 |
--nodeps |
使用時機:當發生軟體屬性相依問題而無法安裝,但你執意安裝時 |
--replacefiles |
使用時機: 如果在安裝的過程當中出現了『某個檔案已經被安裝在你的系統上面』的資訊,又或許出現版本不合的訊息
(confilcting files) 時,可以使用這個參數來直接覆蓋檔案。 |
--replacepkgs |
使用時機: 重新安裝某個已經安裝過的軟體!如果妳要安裝一堆 RPM 軟體檔案時,可以使用 rpm -ivh *.rpm ,但若某些軟體已經安裝過了, 此時系統會出現『某軟體已安裝』的資訊,導致無法繼續安裝。此時可使用這個選項來重複安裝喔! |
--force |
使用時機:這個參數其實就是 --replacefiles 與 --replacepkgs 的綜合體! |
--test |
使用時機: 想要測試一下該軟體是否可以被安裝到使用者的 Linux 環境當中,可找出是否有屬性相依的問題。範例為: |
--justdb |
使用時機: 由於 RPM 資料庫破損或者是某些緣故產生錯誤時,可使用這個選項來更新軟體在資料庫內的相關資訊。 |
--nosignature |
使用時機: 想要略過數位簽章的檢查時,可以使用這個選項。 |
--prefix 新路徑 |
使用時機: 要將軟體安裝到其他非正規目錄時。舉例來說,妳想要將某軟體安裝到 /usr/local 而非正規的 /bin, /etc 等目錄, 就可以使用『 --prefix /usr/local 』來處理了。 |
--noscripts |
使用時機:不想讓該軟體在安裝過程中自行執行某些系統指令。 |
一般來說,rpm 的安裝選項與參數大約就是這些了。通常鳥哥建議直接使用 -ivh 就好了, 如果安裝的過程中發現問題,一個一個去將問題找出來,盡量不要使用『 暴力安裝法 』,就是透過 --force 去強制安裝! 因為可能會發生很多不可預期的問題呢!除非你很清楚的知道使用上面的參數後,安裝的結果是你預期的!(有一个问题是用RPM的方法安装过程中会不会把软件安装到一个其他的目录下呢)
操作案例
例題:
在沒有網路的前提下,妳想要安裝一個名為 pam-devel 的軟體,妳手邊只有原版光碟,該如何是好?
答:妳可以透過掛載原版光碟來進行資料的查詢與安裝。請將原版光碟放入光碟機,底下我們嘗試將光碟掛載到 /media 當中, 並據以處理軟體的下載囉:
在鳥哥的系統中,剛好這個軟體並沒有屬性相依的問題,因此最後一個步驟可以順利的進行下去呢!
7、 RPM升级(upgrade/freshen)
以 -Uvh 或 -Fvh 來升級即可,而 -Uvh 與 -Fvh 可以用的選項與參數,跟 install 是一樣的。不過, -U 與 -F 的意義還是不太一樣的,基本的差別是這樣的:
-Uvh |
後面接的軟體即使沒有安裝過,則系統將予以直接安裝; 若後面接的軟體有安裝過舊版,則系統自動更新至新版;(没安装过则先安装安装过了就直接升级) |
-Fvh |
如果後面接的軟體並未安裝到你的 Linux 系統上,則該軟體不會被安裝;亦即只有已安裝至你 Linux 系統內的軟體會被『升級』! |
由上面的說明來看,如果你想要大量的升級系統舊版本的軟體時,使用 -Fvh 則是比較好的作法,因為沒有安裝的軟體才不會被不小心安裝進系統中。但是需要注意的是,如果你使用的是 -Fvh ,偏偏你的機器上尚無這一個軟體,那麼很抱歉,該軟體並不會被安裝在你的 Linux 主機上面,所以請重新以 ivh 來安裝吧!
8、 RPM验证数字签名(Verify/signature)
作用的方式是『使用 /var/lib/rpm 底下的資料庫內容來比對目前 Linux 系統的環境下的所有軟體檔案 』也就是說,當你有資料不小心遺失, 或者是因為你誤殺了某個軟體的檔案,或者是不小心不知道修改到某一個軟體的檔案內容, 就用這個簡單的方法來驗證一下原本的檔案系統吧
驗證的方式很簡單:
[root@www ~]# rpm -Va [root@www ~]# rpm -V 已安裝的軟體名稱 [root@www ~]# rpm -Vp 某個 RPM 檔案的檔名 [root@www ~]# rpm -Vf 在系統上面的某個檔案 選項與參數: -V :後面加的是軟體名稱,若該軟體所含的檔案被更動過,才會列出來; -Va :列出目前系統上面所有可能被更動過的檔案; -Vp :後面加的是檔案名稱,列出該軟體內可能被更動過的檔案; -Vf :列出某個檔案是否被更動過~
範例一:列出你的 Linux 內的 logrotate 這個軟體是否被更動過? [root@www ~]# rpm -V logrotate # 如果沒有出現任何訊息,恭喜你,該軟體所提供的檔案沒有被更動過。 # 如果有出現任何訊息,才是有出現狀況啊!
範例二:查詢一下,你的 /etc/crontab 是否有被更動過? [root@www ~]# rpm -Vf /etc/crontab S.5....T c /etc/crontab # 瞧!因為有被更動過,所以會列出被更動過的資訊類型! |
好了,那麼我怎麼知道到底我的檔案被更動過的內容是什麼?例如上面的範例二。呵呵!簡單的說明一下吧! 例如,我們檢查一下 logrotate 這個軟體:
[root@www ~]# rpm -ql logrotate /etc/cron.daily/logrotate /etc/logrotate.conf /etc/logrotate.d /usr/sbin/logrotate /usr/share/doc/logrotate-3.7.4 /usr/share/doc/logrotate-3.7.4/CHANGES /usr/share/man/man8/logrotate.8.gz /var/lib/logrotate.status # 呵呵!共有八個檔案啊!請修改 /etc/logrotate.conf 內的 rotate 變成 5
[root@www ~]# rpm -V logrotate ..5....T c /etc/logrotate.conf |
妳會發現在檔名之前有個 c ,然後就是一堆奇怪的文字了。那個 c 代表的是 configuration , 就是設定檔的意思。至於最前面的八個資訊是:
所以,如果當一個設定檔所有的資訊都被更動過,那麼他的顯示就會是:
SM5DLUGT c filename |
至於那個 c 代表的是『 Config file 』的意思,也就是檔案的類型,檔案類型有底下這幾類:
經過驗證的功能,你就可以知道那個檔案被更動過。那麼如果該檔案的變更是『預期中的』, 那麼就沒有什麼大問題,但是如果該檔案是『非預期的』,那麼是否被入侵了呢?呵呵!得注意注意囉! 一般來說,設定檔 (configure) 被更動過是很正常的,萬一你的 binary program 被更動過呢? 那就得要特別特別小心啊!
9、 RPM反安装与重建资料库(erase/rebuilddb)
解安裝的過程一定要由最上層往下解除. 移除的選項很簡單,就透過 -e 即可移除。不過,很常發生軟體屬性相依導致無法移除某些軟體的問題! 我們以底下的例子來說明:
# 1. 找出與 pam 有關的軟體名稱,並嘗試移除 pam 這個軟體: [root@www ~]# rpm -qa | grep pam pam-devel-0.99.6.2-3.27.el5 pam_passwdqc-1.0.2-1.2.2 pam_pkcs11-0.5.3-23 pam_smb-1.1.7-7.2.1 pam-0.99.6.2-3.27.el5 pam_ccreds-3-5 pam_krb5-2.2.14-1 [root@www ~]# rpm -e pam error: Failed dependencies: <==這裡提到的是相依性的問題 libpam.so.0 is needed by (installed) coreutils-5.97-14.el5.i386 libpam.so.0 is needed by (installed) libuser-0.54.7-2.el5.5.i386 ....(以下省略)....
# 2. 若僅移除 pam-devel 這個之前範例安裝上的軟體呢? [root@www ~]# rpm -e pam-devel <==不會出現任何訊息! [root@www ~]# rpm -q pam-devel package pam-devel is not installed |
從範例一我們知道 pam 所提供的函式庫是讓非常多其他軟體使用的,因此你不能移除 pam ,除非將其他相依軟體一口氣也全部移除!你當然也能加 --nodeps 來強制移除, 不過,如此一來所有會用到 pam 函式庫的軟體,都將成為無法運作的程式,我想,你的主機也只好準備停機休假了吧! 至於範例二中,由於 pam-devel 是依附於 pam 的開發工具,你可以單獨安裝與單獨移除啦!
由於 RPM 檔案常常會安裝/移除/升級等,某些動作或許可能會導致 RPM 資料庫 /var/lib/rpm/ 內的檔案破損。果真如此的話,那你該如何是好?別擔心,我們可以使用 --rebuilddb 這個選項來重建一下資料庫喔! 作法如下:
[root@www ~]# rpm --rebuilddb <==重建資料庫 |
将此目录的文件破损之后可以通过rebuilddb来修复。
10、YUM线上升级机制
由於 distribution 必須要先釋出軟體,然後將軟體放置於 yum 伺服器上面,以提供用戶端來要求安裝與升級之用的。 因此我們想要使用 yum 的功能時,必須要先找到適合的 yum server 才行啊!而每個 yum server 可能都會提供許多不同的軟體功能,那就是我們之前談到的『容器』啦!因此,你必須要前往 yum server 查詢到相關的容器網址後,再繼續處理後續的設定事宜。
PS:配置当前这台服务器的YUM容器用来做升级的时候会用到。
如果想要查詢利用 yum 來查詢原版 distribution 所提供的軟體,或已知某軟體的名稱,想知道該軟體的功能, 可以利用 yum 相關的參數為:
[root@www ~]# yum [option] [查詢工作項目] [相關參數] 選項與參數: [option]:主要的選項,包括有: -y :當 yum 要等待使用者輸入時,這個選項可以自動提供 yes 的回應; --installroot=/some/path :將該軟體安裝在 /some/path 而不使用預設路徑 [查詢工作項目] [相關參數]:這方面的參數有: search :搜尋某個軟體名稱或者是描述 (description) 的重要關鍵字; list :列出目前 yum 所管理的所有的軟體名稱與版本,有點類似 rpm -qa; info :同上,不過有點類似 rpm -qai 的執行結果; provides:從檔案去搜尋軟體!類似 rpm -qf 的功能!
範例一:搜尋磁碟陣列 (raid) 相關的軟體有哪些? [root@www ~]# yum search raid ....(前面省略).... mdadm.i386 : mdadm controls Linux md devices (software RAID arrays) lvm2.i386 : Userland logical volume management tools ....(後面省略).... # 在冒號 (:) 左邊的是軟體名稱,右邊的則是在 RPM 內的 name 設定 (軟體名) # 瞧!上面的結果,這不就是與 RAID 有關的軟體嗎?如果想瞭解 mdadm 的軟體內容呢?
範例二:找出 mdadm 這個軟體的功能為何 [root@www ~]# yum info mdadm Installed Packages <==這說明該軟體是已經安裝的了 Name : mdadm <==這個軟體的名稱 Arch : i386 <==這個軟體的編譯架構 Version: 2.6.4 <==此軟體的版本 Release: 1.el5 <==釋出的版本 Size : 1.7 M <==此軟體的檔案總容量 Repo : installed <==容器回報說已安裝的 Summary: mdadm controls Linux md devices (software RAID arrays) Description: <==看到否?這就是 rpm -qi 嘛! mdadm is used to create, manage, and monitor Linux MD (software RAID) devices. As such, it provides similar functionality to the raidtools package. However, mdadm is a single program, and it can perform almost all functions without a configuration file, though a configuration file can be used to help with some common tasks. # 不要跟我說,上面說些啥?自己找字典翻一翻吧!拜託拜託!
範例三:列出 yum 伺服器上面提供的所有軟體名稱 [root@www ~]# yum list Installed Packages <==已安裝軟體 Deployment_Guide-en-US.noarch 5.2-9.el5.centos installed Deployment_Guide-zh-CN.noarch 5.2-9.el5.centos installed Deployment_Guide-zh-TW.noarch 5.2-9.el5.centos installed ....(中間省略).... Available Packages <==還可以安裝的其他軟體 Cluster_Administration-as-IN.noarch 5.2-1.el5.centos base Cluster_Administration-bn-IN.noarch 5.2-1.el5.centos base ....(底下省略).... # 上面提供的意義為:『 軟體名稱 版本 在那個容器內 』
範例四:列出目前伺服器上可供本機進行升級的軟體有哪些? [root@www ~]# yum list updates <==一定要是 updates 喔! Updated Packages Deployment_Guide-en-US.noarch 5.2-11.el5.centos base Deployment_Guide-zh-CN.noarch 5.2-11.el5.centos base Deployment_Guide-zh-TW.noarch 5.2-11.el5.centos base ....(底下省略).... # 上面就列出在那個容器內可以提供升級的軟體與版本!
範例五:列出提供 passwd 這個檔案的軟體有哪些 [root@www ~]# yum provides passwd passwd.i386 : The passwd utility for setting/changing passwords using PAM passwd.i386 : The passwd utility for setting/changing passwords using PAM # 找到啦!就是上面的這個軟體提供了 passwd 這個程式! |
透過上面的查詢
10.YUM的配置文件
最重要的特色就是那個『 repodata 』的目錄!該目錄就是分析 RPM 軟體後所產生的軟體屬性相依資料放置處!因此,當你要找容器所在網址時, 最重要的就是該網址底下一定要有個名為 repodata 的目錄存在!那就是容器的網址了! 其他的容器正確網址,就請各位看倌自行尋找一下喔!現在讓我們修改設定檔吧!
[root@www ~]# vi /etc/yum.repos.d/CentOS-Base.repo #这个就是YUM的配置文件了 [base] name=CentOS-$releasever - Base mirrorlist= #baseurl= gpgcheck=1 gpgkey= |
如上所示,鳥哥僅列出 base 這個容器內容而已,其他的容器內容請自行查閱囉!上面的資料需要注意的是:
瞭解這個設定檔之後,接下來讓我們修改整個檔案的內容,讓我們這部主機可以直接使用高速網路中心的資源吧! 修改的方式鳥哥僅列出 base 這個容器項目而已,其他的項目請您自行依照上述的作法來處理即可!
[root@www ~]# vi /etc/yum.repos.d/CentOS-Base.repo [base] name=CentOS-$releasever - Base baseurl= gpgcheck=1 gpgkey= # 底下其他的容器項目,請自行到高速網路中心去查詢後自己處理! |
接下來當然就是給他測試一下囉!如何測試呢?再次使用 yum 即可啊!
範例一:列出目前 yum server 所使用的容器有哪些? [root@www ~]# yum repolist all repo id repo name status addons CentOS-5 - Addons enabled base CentOS-5 - Base enabled c5-media CentOS-5 - Media disabled centosplus CentOS-5 - Plus disabled extras CentOS-5 - Extras enabled updates CentOS-5 - Updates enabled # 上面最右邊有寫 enabled 才是有啟動的!由於 /etc/yum.repos.d/ # 有多個設定檔,所以你會發現還有其他的容器存在。 |
修改了配置文件可能会出现的问题及如何解决?
由於我們是修改系統預設的設定檔,事實上,我們應該要在 /etc/yum.repos.d/ 底下新建一個檔案, 該副檔名必須是 .repo 才行!但因為我們使用的是指定特定的映射站台,而不是其他軟體開發生提供的容器, 因此才修改系統預設設定檔。但是可能由於使用的容器版本有新舊之分,你得要知道, yum 會先下載容器的清單到本機的 /var/cache/yum 裡面去!那我們修改了網址卻沒有修改容器名稱 (中刮號內的文字), 可能就會造成本機的清單與 yum 伺服器的清單不同步,此時就會出現無法更新的問題了!
PS:当我们修改了配置文件里面的BASEPATH之后而本地上面的缓存的配置信息又没有更新过来的话就会导致更新失败。
那怎麼辦啊?很簡單,就清除掉本機上面的舊資料即可!需要手動處理嗎?不需要的, 透過 yum 的 clean 項目來處理即可!
[root@www ~]# yum clean [packages|headers|all] 選項與參數: packages:將已下載的軟體檔案刪除 headers :將下載的軟體檔頭刪除 all :將所有容器資料都刪除!
範例一:刪除已下載過的所有容器的相關資料 (含軟體本身與清單) [root@www ~]# yum clean all |
11.yum的软件群组功能
來看看指令先:
[root@www ~]# yum [群組功能] [軟體群組] 選項與參數: grouplist :列出所有可使用的『套件組』,例如 Development Tools 之類的; groupinfo :後面接 group_name,則可瞭解該 group 內含的所有套件名; groupinstall:這個好用!可以安裝一整組的套件群組,相當的不錯用! groupremove :移除某個套件群組;
範例一:查閱目前容器與本機上面的可用與安裝過的軟體群組有哪些? [root@www ~]# yum grouplist Installed Groups: Office/Productivity Editors System Tools ....(中間省略).... Available Groups: Tomboy Cluster Storage Engineering and Scientific ....(以下省略).... |
你會發現系統上面的軟體大多是群組的方式一口氣來提供安裝的(软件组比较多可以指定一个群组的方式一次性全部给安装完成)!還記全新安裝 CentOS 時, 不是可以選擇所需要的軟體嗎?而那些軟體不是利用 GNOME/KDE/X Window ... 之類的名稱存在嗎? 其實那就是軟體群組囉!如果你執行上述的指令後,在『Available Groups』底下應該會看到一個 『XFCE-4.4』的軟體群組,想知道那是啥嗎?就這樣做:
[root@www ~]# yum groupinfo XFCE-4.4 Setting up Group Process
Group: XFCE-4.4 Description: This group contains the XFCE desktop environment. Mandatory Packages: xfce4-session ....(中間省略).... Default Packages: xfce4-websearch-plugin ....(中間省略).... Optional Packages: xfce-mcs-manager-devel xfce4-panel-devel ....(以下省略).... |
你會發現那就是一個桌面環境 (desktop environment) ,也就是一個視窗管理員啦! 至於底下就列出主要的與選擇性 (optional) 的軟體名稱囉!讓我們直接安裝看看:
[root@www ~]# yum groupinstall XFCE-4.4 #指定一个软件组名然后就可以直接一次性全部把相关联的软件全部给安装了! |
你會發現系統進行了一大堆軟體的安裝!那就是啦!整個安裝 XFCE 這個視窗介面所需的所有軟體! 這個咚咚真是非常的方便呢!這個功能請一定要記下來,對你未來安裝軟體是非常有幫助的喔! ^_^
12. 让系统自动升级
我們可以手動選擇是否需要升級,那能不能讓系統自動升級,讓我們的系統隨時保持在最新的狀態呢? 當然可以啊!透過『 yum -y update 』來自動升級,那個 -y 很重要,因為可以自動回答 yes 來開始下載與安裝! 然後再透過 crontab 的功能來處理即可!假設我每天在台灣時間 3:00am 網路頻寬比較輕鬆的時候進行升級, 你可以這樣做的:
[root@www ~]# vim /etc/crontab ....(前面省略並保留設定值).... 0 3 * * * root /usr/bin/yum -y update #设置每隔多少时间就自动升级! #所以那天我差点问了一个很傻冒的一个问题。直接还上y参数就搞定了 |
從此你的系統就會自動升級啦!很棒吧!此外,你還是得要分析登錄檔與收集 root 的信件的, 因為如果升級的是核心軟體 (kernel),那麼你還是得要重新開機才會讓安裝的軟體順利運作的! 所以還是得分析登錄檔,若有新核心安裝,就重新開機,否則就讓系統自動維持在最新較安全的環境吧! 真是輕鬆愉快的管理啊!
這一直是個有趣的問題:『如果我要升級的話,或者是全新安裝一個新的軟體, 那麼該選擇 RPM 還是 Tarball 來安裝呢?』,事實上考慮的因素很多,不過鳥哥通常是這樣建議的:
1. 優先選擇原廠的 RPM 功能:
由於原廠釋出的軟體通常具有一段時間的維護期,舉例來說, RHEL 與 CentOS 每一個版本至少提供五年以上的更新期限。這對於我們的系統安全性來說,實在是非常好的選項! 何解?既然 yum 可以自動升級,加上原廠會持續維護軟體更新,那麼我們的系統就能夠自己保持在軟體最新的狀態, 對於資安來說當然會比較好一些的!
此外,由於 RPM 與 yum 具有容易安裝/移除/升級等特點,且還提供查詢與驗證的功能,安裝時更有數位簽章的保護, 讓你的軟體管理變的更輕鬆自在!因此,當然首選就是利用 RPM 來處理啦!
2. 選擇軟體官網釋出的 RPM 或者是提供的容器網址:
不過,原廠並不會包山包海,因此某些特殊軟體你的原版廠商並不會提供的!舉例來說 CentOS 就沒有提供 NTFS 的相關模組。此時你可以自行到官網去查閱,看看有沒有提供相對到你的系統的
RPM 檔案, 如果有提供容器網址,那就更好啦!可以修改 yum 設定檔來加入該容器,就能夠自動安裝與升級該軟體!
你說方不方便啊!
PS:就针对这一点我们可以搭建自己内网的软件仓库把日常工作中所使用到的软件做成一个软件仓库出来。然后在内网直接配置YUM源就行。至于如何搭建内网软件仓库方式下一个专题就重点介绍。
3. 利用 Tarball 安裝特殊軟體:
某些特殊用途的軟體並不會特別幫你製作 RPM 檔案的,此時建議你也不要妄想自行製作 SRPM 來轉成 RPM 啦! 因為你只有區區一部主機而已,若是你要管理相同的 100 部主機,那麼將原始碼轉製作成 RPM 就有價值! 單機版的特殊軟體,例如學術網路常會用到的 MPICH/PVM 等平行運算函式庫,這種軟體建議使用 tarball 來安裝即可,
不需要特別去搜尋 RPM 囉!
PS:当我们要的软件没有RPM包发行的时候怎么办?我们可以考虑使用SRPM来制作RPM了
4. 用 Tarball 測試新版軟體:
某些時刻你可能需要使用到新版的某個軟體,但是原版廠商僅提供舊版軟體,舉例來說,我們的 CentOS 主要是定位於企業版,因此很多軟體的要求是『穩』而不是『新』,但你就是需要新軟體啊!
然後又擔心新軟體裝好後產生問題,回不到舊軟體,那就慘了!此時你可以用 tarball 安裝新軟體到 /usr/local 底下, 那麼該軟體就能夠同時安裝兩個版本在系統上面了!而且大多數軟體安裝數種版本時還不會互相干擾的!
嘿嘿!用來作為測試新軟體是很不錯的呦!只是你就得要知道你使用的指令是新版軟體還是舊版軟體了!