安裝與升級軟體:RPM & YUM

来源:互联网 发布:黑客牛还是程序员厉害 编辑:程序博客网 时间:2024/05/01 19:36

如何安裝與升級軟體

2种方法

* 直接以原始碼透過編譯來安裝與升級。即直接以 Tarball 在自己的機器上面進行偵測、編譯、 安裝

 

* 直接以編譯好的 binary program 來安裝與升級。即使用RPM/YUM来安装(Debian 使用dpkg/ APT)。

 

本篇文章只讲解如何使用RPM/YUM来安装软件。Tarball安装见上篇文章

 

知识点:

1.      RPM安装就是廠商先在他們的系統上面編譯好了我們使用者所需要的軟體並且打包成為 RPM 機制的包裝檔案,使用者通过命令”RPM”來安裝到本机

 

2.      安裝的時候就將該軟體的資訊整個寫入/var/lib/rpm/ 目錄下的RPM資料庫檔案(该资料库记录的是通过RPM方式安装好的softwareinfo中,以便未來的查詢、驗證與反安裝

 

3.      通常不同的 distribution 所釋出的 RPM 檔案,並不能用在其他的 distributions 。舉例來說,Red Hat 釋出的 RPM 檔案,通常無法直接在 SuSE 上面進行安裝的。甚至CentOS 4.x RPM 檔案就無法直接套用在 CentOS 5.x

 

4.      當安裝在你的 Linux 主機時, RPM 會先依照軟體裡頭的資料检查 Linux 主機里是否有所有所需的相依屬性軟體, yes則予以安裝,若no則不予安裝

 

5.      解决RPM屬性相依問題的完美方案就是使用YUMYUM是一种在线安装机制。当user执行yum install命令来安装软件时,就会先遍历本机设定的yum repositories每个repository都对应一个yum server web sitesearch到该软件的info (包括軟體相關性的清單列表),并下载这个清單列表, 然後透過清單列表的資料與本機 RPM 資料庫已存在的軟體資料相比較,如果缺少哪些具有相依屬性的軟體,就会一并安装

 

6.      YUM安装实际上就是在线下载软件以及相关依赖属性的软件到local,然后通过RPM一并安装,从而解决仅通过local RPM屬性相依問題无法安装的问题

 

管理的抉擇:RPM 還是 Tarball

如果我要升級的話,或者是全新安裝一個新的軟體, 那麼該選擇 RPM 還是 Tarball 來安裝呢?事實上考慮的因素很多,不過鳥哥通常是這樣建議的:

  1. 優先選擇原廠的 RPM 功能:

由於原廠釋出的軟體通常具有一段時間的維護期,舉例來說, RHEL CentOS 每一個版本至少提供五年以上的更新期限。這對於我們的系統安全性來說,實在是非常好的選項!何解?既然 yum 可以自動升級,加上原廠會持續維護軟體更新,那麼我們的系統就能夠自己保持在軟體最新的狀態, 對於資安來說當然會比較好一些的!此外,由於 RPM yum 具有容易安裝/移除/升級等特點,且還提供查詢與驗證的功能,安裝時更有數位簽章的保護, 讓你的軟體管理變的更輕鬆自在!因此,當然首選就是利用 RPM 來處理啦!

  1. 選擇軟體官網釋出的 RPM 或者是提供的容器網址

不過,原廠並不會包山包海,因此某些特殊軟體你的原版廠商並不會提供的!舉例來說 CentOS 就沒有提供 NTFS 的相關模組。此時你可以自行到该软件的官網去查閱,看看有沒有提供相對到你的系統的 RPM 檔案,如果有提供容器網址,可以修改 yum 設定檔來加入該容器,就能夠自動安裝與升級該軟體! 你說方不方便啊!

  1. 利用 Tarball 安裝特殊軟體

某些特殊用途的軟體並不會特別幫你製作 RPM 檔案的,此時建議你也不要妄想自行製作 SRPM 來轉成 RPM 啦! 因為你只有區區一部主機而已,若是你要管理相同的 100 部主機,那麼將原始碼轉製作成 RPM 就有價值! 單機版的特殊軟體,例如學術網路常會用到的 MPICH/PVM 等平行運算函式庫,這種軟體建議使用 tarball 來安裝即可, 不需要特別去搜尋 RPM 囉!

  1. Tarball 測試新版軟體

某些時刻你可能需要使用到新版的某個軟體,但是原版廠商僅提供舊版軟體,舉例來說,我們的 CentOS 主要是定位於企業版,因此很多軟體的要求是『穩』而不是『新』,但你就是需要新軟體啊!然後又擔心新軟體裝好後產生問題,回不到舊軟體,那就慘了!此時你可以用 tarball 安裝新軟體到 /usr/local 底下, 那麼該軟體就能夠同時安裝兩個版本在系統上面了!而且大多數軟體安裝數種版本時還不會互相干擾的! 嘿嘿!用來作為測試新軟體是很不錯的呦!只是你就得要知道你使用的指令是新版軟體還是舊版軟體了!

 

For more detailspls read following sections.

RPM 命令的用法

* RPM安装 (install)

[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

# 後面直接接上許多的軟體檔案!

 

範例三、直接由網路上面的某個檔案安裝,以網址來安裝:

[root@www ~]# rpm -ivh http://website.name/path/pkgname.rpm

rpm install还有一个重要的参数就是“--prefix 新路徑”。 使用時機: 要將軟體安裝到其他非正規目錄時。舉例來說,妳想要將某軟體安裝到 /usr/local 而非正規的 /bin, /etc 等目錄, 就可以使用『 --prefix /usr/local 』來處理了

 

* RPM升级及更新 (upgrade/freshen)

使用 RPM 來升級就以 -Uvh -Fvh 來升級即可。-U -F 的意義還是不太一樣的,基本的差別是這樣的:

-Uvh

後面接的軟體即使沒有安裝過,則系統將予以直接安裝; 若後面接的軟體有安裝過舊版,則系統自動更新至新版;

-Fvh

如果後面接的軟體並未安裝到你的 Linux 系統上,則該軟體不會被安裝;亦即只有已安裝至你 Linux 系統內的軟體會被『升級』!

 

* RPM 卸载與重建資料庫 (erase/rebuilddb)

要注意的是,『卸载過程一定要由最上層往下解除』,以 rp-pppoe 為例,這一個軟體主要是依據 ppp 這個軟體來安裝的,所以當你要解除 ppp 的時候,就必須要先解除 rp-pppoe 才行!否則就會發生結構上的問題啦!

移除的選項很簡單,就透過 -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 來強制移除

由於 RPM 檔案常常會安裝/移除/升級等,某些動作或許可能會導致 RPM 資料庫 /var/lib/rpm/ 內的檔案破損。果真如此的話,我們可以使用 --rebuilddb 這個選項來重建一下資料庫! 作法如下

[root@www ~]# rpm --rebuilddb   <==重建資料庫

 

* RPM查询 (query)

RPM 在查詢的時候,其實查詢的地方是在 /var/lib/rpm/ 這個目錄下的資料庫檔案!另外, RPM 也可以查詢未安裝的 RPM 檔案內的資訊

[root@www ~]# rpm -qa                              <==已安裝軟體

[root@www ~]# rpm -q[licdR] 已安裝的軟體名稱       <==已安裝軟體

[root@www ~]# rpm -qf 存在於系統上面的某個檔名     <==已安裝軟體

[root@www ~]# rpm -qp[licdR] 未安裝的某個檔案名稱  <==查閱RPM檔案

選項與參數:

查詢已安裝軟體的資訊:

-q  :僅查詢,後面接的軟體名稱是否有安裝;

-qa :列出所有的,已經安裝在本機 Linux 系統上面的所有軟體名稱;

-qi :列出該軟體的詳細資訊 (information),包含開發商、版本與說明等;

-ql :列出該軟體所有的檔案與目錄所在完整檔名 (list)

-qc :列出該軟體的所有設定檔 (找出在 /etc/ 底下的檔名而已)

-qd :列出該軟體的所有說明檔 (找出與 man 有關的檔案而已)

-qR :列出與該軟體有關的相依軟體所含的檔案 (Required 的意思)

-qf :由後面接的檔案名稱,找出該檔案屬於哪一個已安裝的軟體;

查詢某個 RPM 檔案內含有的資訊:

-qp[icdlR]:注意 -qp 後面接的所有參數以上面的說明一致。但用途僅在於找出

            某個 RPM 檔案內的資訊,而非已安裝的軟體資訊!注意!

所有的參數之前都需要加上 -q 才是所謂的查詢

查詢主要分為兩部分

l  查已安裝到系統上面的的軟體資訊,這部份的資訊都是由 /var/lib/rpm/ 所提供

l  查某個 rpm 檔案內容, 等於是由 RPM 檔案內找出一些要寫入資料庫內的資訊就是了,這部份就得要使用 -qp

範例一:找出你的 Linux 是否有安裝 logrotate 這個軟體?

[root@www ~]# rpm -q logrotate

logrotate-3.7.4-8

[root@www ~]# rpm -q logrotating

package logrotating is not installed

# 注意到,系統會去找是否有安裝後面接的軟體名稱。注意,

# 不必要加上版本喔!至於顯示的結果,一看就知道有沒有安裝啦!

 

範例二:列出上題當中,屬於該軟體所提供的所有目錄與檔案:

[root@www ~]# rpm -ql logrotate

/etc/cron.daily/logrotate

/etc/logrotate.conf

....(以下省略)....

# 可以看出該軟體到底提供了多少的檔案與目錄,也可以追蹤軟體的資料。

 

範例三:列出 logrotate 這個軟體的相關說明資料:

[root@www ~]# rpm -qi logrotate

Name        : logrotate             Relocations: (not relocatable)

Version     : 3.7.4                      Vendor: CentOS

Release     : 8                      Build Date: Sun 02 Dec 2007 08:38:06 AM CST

Install Date: Sat 09 May 2009 11:59:05 PM CST    Build Host: builder6

。。。

Install the logrotate package if you need a utility to deal with the

log files on your system.

# 列出該軟體的 information (資訊),裡面的資訊可多著呢,包括了軟體名稱、

# 版本、開發商、SRPM檔案名稱、打包次數、簡單說明資訊、軟體打包者、

# 安裝日期等等!如果想要詳細的知道該軟體的資料,用這個參數來瞭解一下

 

範例四:分別僅找出 logrotate 的設定檔與說明檔

[root@www ~]# rpm -qc logrotate

[root@www ~]# rpm -qd logrotate

 

WWW 伺服器為 Apache ,我知道他使用的 RPM 軟體檔名為 httpd 想要知道這個軟體的所有設定檔放置在何處

[root@www ~]# rpm -qc httpd

 

 

範例五:若要成功安裝 logrotate ,他還需要什麼檔案的幫忙?

[root@www ~]# rpm -qR logrotate

/bin/sh

config(logrotate) = 3.7.4-8

libc.so.6

....(以下省略)....

# 由這裡看起來,呵呵~還需要很多檔案的支援才行喔!

 

範例六:由上面的範例五,找出 /bin/sh 是那個軟體提供的?

[root@www ~]# rpm -qf /bin/sh

bash-3.2-21.el5

# 這個參數後面接的可是『檔案』吶!不像前面都是接軟體喔!

# 這個功能在查詢系統的某個檔案屬於哪一個軟體所有的。

 

範例七:假設我有下載一個 RPM 檔案,想要知道該檔案的需求檔案,該如何?

[root@www ~]# rpm -qpR filename.i386.rpm

# 加上 -qpR ,找出該檔案需求的資料!

範例八_1:要知道我的系統當中, 所有RPM安装了的软件

> rpm -qa

範例八_2:要知道我的系統當中,安装了的、software name里包含有"ffcall"的软件有哪些

> rpm -qa | grep 'ffcall'

 

範例八_3:

> rpm -qa | grep ^c | wc -l

要知道我的系統當中,以 c 開頭的軟體有幾個

 

範例九:如果查出來的設定檔案已經被我改過,但是我忘記了曾經修改過哪些地方,所以想要直接重新安裝一次該軟體,該如何作

假設該軟體在網路上的網址為:
http://web.site.name/path/httpd-x.x.xx.i386.rpm
則我可以這樣做:
rpm -ivh http://web.site.name/path/httpd-x.x.xx.i386.rpm --replacepkgs

範例十:如果我誤砍了某個重要檔案,例如 /etc/crontab,偏偏不曉得他屬於哪一個軟體,該怎麼辦

雖然已經沒有這個檔案了,不過沒有關係,因為 RPM 有記錄在 /var/lib/rpm 當中的資料庫啊!所以直接下達:
rpm -qf /etc/crontab
就可以知道是那個軟體囉!重新安裝一次該軟體即可!

RPM 的優點

  • RPM 內含已經編譯過的程式與設定檔等資料,可以讓使用者免除重新編譯的困擾;
  • RPM 在被安裝之前,會先檢查系統的硬碟容量、作業系統版本等,可避免檔案被錯誤安裝;
  • RPM 檔案本身提供軟體版本資訊、相依屬性軟體名稱、軟體用途說明、軟體所含檔案等資訊,便於瞭解軟體;
  • RPM 管理的方式使用資料庫記錄 RPM 檔案的相關參數,便於升級、移除、查詢與驗證。

RPM 預設安裝的路徑

/etc

一些設定檔放置的目錄,例如 /etc/crontab

/usr/bin

一些可執行檔案

/usr/lib

一些程式使用的動態函式庫

/usr/share/doc

一些基本的軟體使用手冊與說明檔

/usr/share/man

一些 man page 檔案

 

YUM用法

使用 yum 的功能時,必須要先找到適合的 yum server 才行啊!而每個 yum server 可能都會提供許多不同的軟體功能,那就是我們之前談到的『repository啦!因此,你必須要前往 yum server 查詢到相關的容器網址後,再繼續處理後續的設定事宜。事實上 CentOS 在釋出軟體時已經製作出多部yum repository映射站台 (mirror site) 提供全世界的軟體更新之用。

* yum命令查詢功能:yum [list|info|search|provides|whatprovides] 參數

[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

....(底下省略)....

# 上面就列出在那個容器內可以提供升級的軟體與版本!

 

範例五:找出以 pam 為開頭的軟體名稱有哪些?而其中尚未安裝的又有哪些?

[root@www ~]# yum list pam*

Installed Packages

pam.i386                  0.99.6.2-3.27.el5      installed

pam_ccreds.i386           3-5                    installed

pam_smb.i386              1.1.7-7.2.1            installed

Available Packages <==底下則是『可升級』的或『未安裝』的

pam.i386                  0.99.6.2-4.el5         base

pam-devel.i386            0.99.6.2-4.el5         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 這個程式!

* yum命令安裝/升級功能:yum [install/update] 軟體

[root@www ~]# yum [option] [查詢工作項目] [相關參數]

選項與參數:

  install :後面接要安裝的軟體!

  update  :後面接要升級的軟體,若要整個系統都升級,就直接 update 即可

 

範例一:將前一個練習找到的未安裝的 pam-devel 安裝起來

[root@www ~]# yum install pam-devel

Setting up Install Process

Parsing package install arguments

Resolving Dependencies  <==先檢查軟體的屬性相依問題

--> Running transaction check

---> Package pam-devel.i386 0:0.99.6.2-4.el5 set to be updated

Installing:

 pam-devel i386       0.99.6.2-4.el5   base              186 k

Updating:

 pam       i386       0.99.6.2-4.el5   base              965 k

Transaction Summary

Install 1 Package(s)  <==結果發現要安裝此軟體需要升級另一個相依的軟體

Update       1 Package(s)

Remove       0 Package(s)

 

Total download size: 1.1 M

Is this ok [y/N]: y  <==確定要安裝

Downloading Packages: <==先下載!

Running Transaction <==開始安裝!

...

Complete!

* yum命令移除功能:yum [remove] 軟體

[root@www ~]# yum remove pam-devel

Setting up Remove Process

Resolving Dependencies  <==同樣的,先解決屬性相依的問題

...

Removing:

 pam-devel i386       0.99.6.2-4.el5   installed         495 k

Remove 1 Package(s)  <==還好,並沒有屬性相依的問題,單純移除一個軟體

Is this ok [y/N]: y

...

Complete!

* yumrepository設定檔

/eto/yum.repos.d/目录下的所有.repo file就是本机的所有repository设定文件。你可以把所有or 多个repository的设置写入一个.repo file里,也可以分开成多个.repo file来设置以便于管理。当你要添加repository时,建议 /etc/yum.repos.d/ 底下新建一個檔案該副檔名必須是 .repo 才行不同的yum repository提供的software list不同。

雖然 yum 是你的主機能夠連線上 Internet 就可以直接使用的,不過,由於 CentOS 的映射站台可能會選錯, 舉例來說,我們在台灣,但是 CentOS 的映射站台卻選擇到了大陸北京或者是日本去,有沒有可能發生啊!有啊!鳥哥教學方面就常常發生這樣的問題,要知道,我們連線到大陸或日本的速度是非常慢的呢!那怎辦? 當然就是手動的修改一下 yum 的設定檔就好囉!

在台灣,CentOS 的映射站台主要有高速網路中心與義首大學,鳥哥近來比較偏好高速網路中心, 似乎更新的速度比較快,而且連接台灣學術網路也非常快速哩!因此,鳥哥底下建議台灣的朋友使用高速網路中心的 ftp 主機資源來作為 yum 伺服器來源喔!目前高速網路中心對於 CentOS 所提供的相關網址如下:

  • http://ftp.twaren.net/Linux/CentOS/5/

如果你連接到上述的網址後,就會發現裡面有一堆連結,那些連結就是這個 yum 伺服器所提供的容器repository了!所以高速網路中心也提供了 addons, centosplus, extras, fasttrack, os, updates 等容器,最好認的容器就是 os (系統預設的軟體) updates (軟體升級版本) 囉!由於鳥哥在我的測試用主機是利用 i386 的版本, 因此那個 os 再點進去就會得到如下的可提供安裝的網址:

  • http://ftp.twaren.net/Linux/CentOS/5/os/i386/

為什麼在上述的網址內呢?有什麼特色!最重要的特色就是那個『 repodata 』的目錄!該目錄就是分析 RPM 軟體後所產生的軟體屬性相依資料放置處!因此,當你要找容器所在網址時, 最重要的就是該網址底下一定要有個名為 repodata 的目錄存在那就是容器的網址了

下面是列出 base 這個容器內容

[root@www ~]# vi /etc/yum.repos.d/CentOS-Base.repo

[base]

name=CentOS-$releasever - Base

mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os

#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/

gpgcheck=1

gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

上面的資料需要注意的是:

·  [base]:代表容器的名字!中刮號一定要存在,裡面的名稱則可以隨意取。但是不能有兩個相同的容器名稱,否則 yum 會不曉得該到哪裡去找容器相關軟體清單檔案。

·  name:只是說明一下這個容器的意義而已,重要性不高!

·  mirrorlist=:列出這個容器可以使用的映射站台,如果不想使用,可以註解到這行;

·  baseurl=:這個最重要,因為後面接的就是容器的實際網址 mirrorlist 是由 yum 程式自行去捉映射站台, baseurl 則是指定固定的一個容器網址!我們剛剛找到的網址放到這裡來啦!

·  enable=1:就是讓這個容器被啟動。如果不想啟動可以使用 enable=0 喔!

·  gpgcheck=1:還記得 RPM 的數位簽章嗎?這就是指定是否需要查閱 RPM 檔案內的數位簽章!

·  gpgkey=:就是數位簽章的公鑰檔所在位置!使用預設值即可

 

範例一:列出目前本机所使用的repository有哪些?

[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/

# 有多個設定檔,所以你會發現還有其他的容器存在。

* 修改yum repository容器设置產生的問題與解決之道

由於使用的容器版本有新舊之分,你得要知道, yum 會先下載容器的清單到本機的 /var/cache/yum 裡面去!那我們修改了網址卻沒有修改容器名稱 (中刮號內的文字) 可能就會造成本機的清單與 yum 伺服器的清單不同步,此時就會出現無法更新的問題了!

那怎麼辦啊?很簡單,就清除掉本機上面的舊資料即可!需要手動處理嗎?不需要的, 透過 yum clean 項目來處理即可!

[root@www ~]# yum clean [packages|headers|all]

選項與參數:

 packages:將已下載的軟體檔案刪除

 headers :將下載的軟體檔頭刪除

 all     :將所有容器資料都刪除!

 

範例一:刪除已下載過的所有容器的相關資料 (含軟體本身與清單)

[root@www ~]# yum clean all

* yum 的軟體群組功能

透過 yum 來線上安裝一個軟體是非常的簡單,但是,如果要安裝的是一個大型專案呢? 舉例來說,鳥哥使用預設安裝的方式安裝了測試機,這部主機就只有 GNOME 這個視窗管理員, 那我如果想要安裝 KDE 呢?難道需要重新安裝?當然不需要,透過 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

....(以下省略)....

直接安裝

[root@www ~]# yum groupinstall XFCE-4.4

* 如果使用yum全系統自動升級

透過『 yum -y update 』來自動升級,那個 -y 很重要,因為可以自動回答 yes 來開始下載與安裝 然後再透過 crontab 的功能來處理即可!假設我每天在台灣時間 3:00am 網路頻寬比較輕鬆的時候進行升級, 你可以這樣做的

[root@www ~]# vim /etc/crontab

....(前面省略並保留設定值)....

0  3 * * * root /usr/bin/yum -y update

 

RPM 驗證(Verify)

驗證 (Verify)『使用 /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

# 瞧!因為有被更動過,所以會列出被更動過的資訊類型!

上面的红字部分最前面的八個資訊是

  • S (file Size differs) 檔案的容量大小是否被改變
  • M (Mode differs) 檔案的類型或檔案的屬性 (rwx) 是否被改變?如是否可執行等參數已被改變
  • 5 (MD5 sum differs) MD5 這一種指紋碼的內容已經不同
  • D (Device major/minor number mis-match) 裝置的主/次代碼已經改變
  • L (readLink(2) path mis-match) Link 路徑已被改變
  • U (User ownership differs) 檔案的所屬人已被改變
  • G (Group ownership differs) 檔案的所屬群組已被改變
  • T (mTime differs) 檔案的建立時間已被改變

如果當一個設定檔所有的資訊都被更動過,那麼他的顯示就會是:

        SM5DLUGT c filename

妳會看到上面被改动过的檔名之前有個 c 。那個 c 代表的是 Config file 』的意思,也就是檔案的類型,檔案類型有底下這幾類:

  • c :設定檔 (config file)
  • d :文件資料檔 (documentation)
  • g :鬼檔案~通常是該檔案不被某個軟體所包含,較少發生!(ghost file)
  • l :授權檔案 (license file)
  • r :讀我檔案 (read me)

經過驗證的功能,你就可以知道那個檔案被更動過。一般來說,設定檔 (configure) 被更動過是很正常的,萬一你的 binary program 被更動過呢 那就得要特別特別小心啊!

 

RPM 數位簽章 (signature)

驗證只能驗證軟體內的資訊與 /var/lib/rpm/ 裡面的資料庫資訊而已,如果該軟體檔案所提供的資料本身就有問題,那你使用驗證的手段也無法確定該軟體的正確性啊! 那如何解決呢?就使用rpm的签章

如何使用(略)

SRPM

不同的 distribution 所釋出的 RPM 檔案,並不能用在其他的 distributions 上。如果我真的想要安裝其他 distributions 提供的好用的 RPM 軟體檔案時? 就要用到 SRPM 這個東西!SRPM Source RPM 的意思,也就是這個 RPM 檔案裡面含有原始碼哩!特別注意的是,這個 SRPM 所提供的軟體內容『並沒有經過編譯』,他提供的是原始碼喔!

通常 SRPM 的副檔名是 ***.src.rpm 。不過,既然 SRPM 提供的是原始碼,那麼為什麼我們不使用 Tarball 直接來安裝就好了這是因為 SRPM 雖然內容是原始碼, 但是他仍然含有該軟體所需要的相依性軟體說明、以及所有 RPM 檔案所提供的資料。同時,他與 RPM 不同的是,他也提供了參數設定檔 (就是 configure makefile)。所

通过SRPM 安裝軟體的步骤:

  • 先將該軟體以 RPM 管理的方式編譯,此時 SRPM 會被編譯成為 RPM 檔案;
  • 然後將編譯完成的 RPM 檔案安裝到 Linux 系統當中

详细讲解见http://linux.vbird.org/linux_basic/0520rpm_and_srpm.php