伺服器架設篇 - RedHat 9

第八章、Linux 網路套件升級

up2date 的註冊、使用方法,以及 RPM 的方法!

最近更新時間: 2003/08/22

本文資料主要針對 RedHat 9 的系統進行說明,要注意的是,RedHat 9 與 Red Hat Enterprise Linux (RHEL) 是完全不同的東西!RedHat 9 在 2003 年推出,在 2004 年就不再維護了!這部份網站更新到 2005 年,也沒有再維護過! 因此,建議您前往本站查詢最新版本的 Linux distribution 文章來閱讀,比較不會浪費時間。那為何還需要編輯 RedHat 9 的資料呢? 鳥哥只想要做個自己曾經撰寫過的文件內容保存而已囉! ^_^!最新文章請前往鳥站首頁查閱囉!
在現在的 Internet 上面,Cracker 實在是太多了!這些 Cracker 利用已知道的 Linux 上面的套件漏洞,來進行偵測、入侵您的主機,因此,除了未來架設防火牆之外,最重要的 Linux 日常管理工作,莫過於套件的升級了!不過,經由每日觀察網路安全通報所告知的套件漏洞,以及等待各大 distribution 針對這些漏洞來提供 RPM 檔案,以使 Client 來升級的過程中,實在是有點緩慢啊!因此,目前就有很多線上直接更新的機制出現了!有了這些線上直接更新 RPM 的手段與方法,我們系統管理員在管理主機系統上面,可就輕鬆的多囉!趕緊來看看吧!

為何我的 Linux 要升級?

    網路上面常常聽到:『大家好,我的 Linux 好像怪怪的,因為沒有辦法以 root 的身份登入了!』呵呵!幾乎不要懷疑的可以跟這位朋友說:『您的 Linux 主機被入侵了!』『瞎米!』早上才剛剛安裝完 Linux 系統,下午立刻被入侵,這是真的還是假的!?呵呵!當然『係金A!』,沒有錯!由於這個網路世界越來越複雜化,網際網路的組成份子也就越來越多樣化了~裡面不乏很多所謂的『網路閒人』,天天在偵測人家的系統漏洞,並藉以宣稱自己是『高手!』。對於這些人的想法,實在是覺得很奇怪!算了!不管怎麼說,我們還是得防備一下這些不速之客啊!
     
    一般來說,這些不速之客到底是怎麼入侵您的 Linux 主機的呢?排除一些高級駭客的入侵手法,通常,一些低級怪客 ( Cracker ) 最喜歡直接由網路上面取得所謂的入侵軟體( 不要懷疑,這些入侵軟體真的隨手可得!),然後直接以這種入侵軟體來進行 Linux 主機的攻擊的!不過,這些攻擊軟體到底是怎麼來的?!基本上,由於 Linux 上面的套件太多了,總是有些套件可能在設計之初沒有想到一些可能被利用的程式漏洞,所以,當這樣的程式發佈之後,如果漏洞被利用,則可能會產生系統的危害。某些人士就針對這樣的系統漏洞來寫成一些程式,這些程式就可以直接利用這些套件的漏洞來攻擊 Linux 主機了!也就是說,利用套件的漏洞就能夠取得您主機上面的 root 的權限或者一些功能。所以啦!安裝完 Linux 系統後,第一件要做的事情就是趕緊去升級您的系統套件囉
     
    事實上,套件的漏洞倒不是一定是會被利用來進行入侵,有的時候,某些套件的漏洞可能導致您 Linux 主機的運行不良或者是容易產生系統當機等等的問題呢!所以,一個好的 Linux 主機,他的套件最好是隨時保持在較新的版本上面,這樣還是比較好一點的啦!關於安全漏洞的通報您可以參考底下的網站:
       
    瞭解了需要套件升級的基本理由之後,接下來要瞭解的是:『那麼我要如何升級我的套件啊?!』說的好!先來理解一下您的 Linux 系統上面是使用哪一種方式來安裝您的套件的呢?!一般來說,有底下這幾種方式:
     
    • RPM:這個是最早由 Red Hat 公司發展的,後來成為 Linux 上面使用最為廣泛的一種套件製作與安裝的方式;
    • Tarball:使用原始碼在您的系統上面編譯出可以執行的檔案,以成功的安裝該套件;
    • dpkg:與 RPM 有點類似的方式,是 Debian 的套件管理員。
     
    我們不談哪一種套件管理方式好,只是要瞭解的是,這幾種方式是常見的套件安裝方法。好了,既然有這些套件安裝的方式,所以啦,如果您的套件要升級,就需要依據當初安裝這個套件所使用的方法來加以考量了!舉個例子來說,如果您的郵件伺服器套件 sendmail 是經由 RPM 來安裝的,那麼當您要將 sendmail 這個套件『直接』升級時,就需要使用原始的 distribution 那家公司所釋出的 Sendmail 的 RPM 檔案來安裝囉!那麼我可以使用 Tarball 來升級 sendmail 嗎?!當然可以!不過,那就需要花比較多的時間去一個步驟一個步驟的完成升級的手續了! ( 因為還需要經過主機搜尋、編譯、安裝與設定等等過程) 。
     
    不管怎說,反正如果是手動升級的話,那麼您就必須要(1)先到網路上面下載最新的檔案(2)根據各個不同的方法來進行安裝手續(3)額外的設定檔設定。唉!真是麻煩。難道說,真的套件升級只能使用 RPM/Tarball/dpkg 這些手動的方式嗎?!
     
    我們都曉得在 Windows 底下有個 update 的選項,這個 update 的選項可以隨時將您的 Windows 保持在最新套件的環境中。此外,在一些防毒軟體的附屬功能中,由於病毒隨時在變種,所以防毒軟體也提供了線上直接更新的功能 ( Live Update )。咦!那我的 Linux 可不可以利用這樣的功能來自動升級我的 Linux 套件啊?!如果可以的話,那就真的是太好了! ^_^ !呵呵!果真是太好了!目前在 Internet 上面就有多種的 Linux 套件線上更新方式呢!例如:
     
    • Red Hat 提供的 up2date 這個套件升級方式;
    • Mandrake 提供的 urpmi 升級方式;
    • APT 的套件升級方法。
     
    這些套件升級的方式都是線上直接更新的呢!不過要小心的是,這些套件更新的方法幾乎都是針對各個 distribution 自家的系統平台喔!例如 up2date 這個功能就只能在 Red Hat 的 distribution 上面工作,而 APT 的方式則需要找到自己能夠使用的 APT Server 才行!此外,這些方法幾乎都是針對已經打包完成的 RPM 檔案來升級的哩!而且 up2date, urpmi 與 APT 都已經克服了 RPM 的檔案相依屬性的問題了喔!真是不錯!然而,這些方法都是針對 RPM ,因此, Tarball 的套件是無法經由 up2date, urpmi 或者 APT 來升級的呢!還是得自己來手動升級的啦!
     
    底下我們就來談一談目前常見的幾種線上直接升級的方法,以及鳥哥自己寫的一支線上升級的 BASH script 喔!

以 up2date 進行 Linux 網路套件升級

    為了讓自家的 Linux 作業系統可以更安全更無後顧之憂,而且為了讓使用者更方便來進行系統的套件升級,Red Hat 首先推出的就是 up2date 這個好用的傢伙了! up2date 可以讓使用者在進行過註冊的程序之後,直接以線上升級的方式進行套件的升級,相當的方便好用。不過,奇怪了, Red Hat 本身就已經有套件漏洞與錯誤通報網站,也就是底下這個網站:
     
     
    使用者可以直接以瀏覽器連接到此網站,然後下載所需要的套件,就可以立刻升級了!既然如此,為何還需要使用 up2date 呢?有兩個基本的原因啦!首先,由於在過去的經驗中,使用者在進行 Red Hat 的 RPM 升級時,最容易發生的升級問題就是:『套件的屬性相依問題!』如果對於『鳥哥的 Linux 私房菜 -- 基礎學習篇』還有印象的話,那就應該還記得 RPM 與 Tarball 套件管理員那一章節吧!?我們知道 RPM 是已經經過編譯過的可執行檔案( binary file ),因此,他只能夠在適合自己的版本與相關檔案都已經安裝的環境中,才可以被正確且正常的安裝完畢!不過,使用者常常會忽略掉一些基本的套件安裝,因此導致常常無法順利升級,總是要找好幾個需要一起同時升級的套件,啊!真是麻煩啊!再來,如果是自己到網站上去下載,由於是手動的方式,總是覺得不方便,尤其是當系統管理員同時管理好幾部主機時,很有可能會不小心遺忘了某幾部主機啊!傷腦筋~所以,這個時候就有 up2date 的推出了!
     
    up2date 的工作原理中:
     
    • 首先會針對您的系統上面的套件進行分析,然後透過 Red Hat 的 up2date 網站進行交叉比對分析,並同時將所有需要的相依屬性的套件一起記錄下來;
    • 之後將上面的記錄中所有需要的套件,包括那些相依屬性的套件通通下載到您的 Linux 系統上面;
    • 最後,就是直接在您的 Linux 上面進行升級的動作啦! ^_^
     
    太好了!如此一來我們可以不必考慮套件的屬性相依的問題,因為 up2date 已經幫我們克服了!因此,我們的系統就可以自動的給他升級了!而不需要系統管理員手動的升級呢!閒話就不多說了,談一談 up2date 的使用流程吧!基本上, up2date 實作的過程很簡單,不過由於還需要進行 up2date 的網站註冊動作,所以您必須:
    1. 下載並更新 up2date 與 rhn_register 套件(註:在 Red Hat 9 以後, rhn_register 這個套件的功能已經整合到 up2date 裡面去了, 所以 Red Hat 9 以後的版本只要 up2date 這個套件而已。);
    2. 確定可以登入 Internet ,可能的話,並找尋可支援的近端 proxy ;
    3. 執行 rhn_register 線上註冊;
    4. 執行 up2date 更新套件。
    這樣就可以囉。不過有幾件事情必須說明一下:
     
    • up2date 是 Red Hat 公司為了自己的 Linux 系統所推出的,所以當然僅支援 Red Hat Linux 而已,如果您不是 Red Hat Linux 的 Linux 使用者,不要使用 up2date 喔!
    • up2date 套件在 Red Hat 7.2 以後已經預設安裝好在您的 Linux 系統上面了,但是舊版本的 Red Hat 本身並沒有 up2date 的套件 ( 例如 Red Hat 6.1 ),所以如果您是 Red Hat 系統的舊用戶,那麼您必須先安裝 up2date 套件;
    • 由於 up2date 套件使用之前必須先登入 Red Hat 公司的 up2date 網站,所以您必須先註冊才行。 Red Hat 使用的註冊程式,即為 rhn_register !因此,整個流程就是先註冊,然後就可以線上更新囉。
    • 附加一點,目前 Red Hat 已經針對不同的用戶進行 up2date 的線上更新流量限制,所以如果像我們這一種免費的用戶,有可能會比較難登入 up2date Server 去進行更新的動作呦!這點請特別留意囉!所以,如果您的 ISP 或者網路環境不利於連線到國外的話,請記得使用 Proxy 喔!
    • 此外的此外,由於 rpm 套件只有 root 可以來變更系統,所以以下的指令都必須以 root 的身份來安裝
     
    底下我們就一步一步來進行 up2date 的使用吧!
     

    安裝或更新 up2date 與 rhn_register 套件:
     
    理論上, Red Hat 所釋出的各版本 Linux 系統均有提供 up2date 的服務,不過,由於 up2date 是最近這幾年才提供的服務,大約是在 Red Hat 7.x 以後才出現的玩意兒,所以說,那個 Red Hat 6.x 以前的版本實在是太舊了點,如果您仍然使用的是 Red Hat 6.x 以前的版本,那麼我想,為了克服一些套件的漏洞,您的系統裡面應該已經大多使用了 Tarball 所安裝的套件了!呵呵!因此,說實在的,沒有什麼動力還要去玩 up2date 呢(因為 up2date 僅針對 Red Hat 自家公司所推出的 RPM 套件來進行更新而已!)!所以囉,底下的文件部分,鳥哥僅提供 Red Hat 7.x 以後的版本中,本來就含有 up2date 的環境底下的實作方式。原則上, Red Hat Linux 安裝完畢之後,就已經提供了 up2date 的功能囉!我這裡以 Red Hat 9 進行介紹囉!
     
    如果您的 Red Hat 版本是在 8.0 以前的話,那麼您的系統當中應該會需要 rhn_register 與 up2date 兩個套件,不過,如果是在 Red Hat 9 這個版本當中,那麼只需要 up2date 即可!因為 rhn_register 這個套件的功能已經被整合到 up2date 裡面去了!一般來說,當您安裝好 Red Hat Linux 的時候,應該 up2date 會自動的安裝上去,這個套件是預設選項會安裝的吶~如果萬一不幸沒有安裝上去的話,這個時候,請拿出您的 Red Hat 原版光碟,mount 他,然後直接安裝吧!嗄!原版光碟不見了~傷腦筋,不過不要緊,請到中山大學去瞧一瞧吧!:
       
    使用 rpm 將 up2date 或/與 rhn_register 兩個套件安裝起來吧!安裝完畢之後,應該可以看到 up2date 在您的系統當中喔!以我的 Red Hat 9 為例:
     
    [root@test root]# rpm -qa | grep up2date
    up2date-3.1.23-1
     
    :由於 Red Hat 在 2003/08 更新 up2date 套件時,出了點小問題,導致使用者無法直接連接上 Red Hat 的 up2date 網站,所以,請先手動至 Red Hat 官方網站( http://www.redhat.com/apps/support/errata/ ) 進行 up2date 程式的下載,並以 rpm -Uvh update-xxx.rpm 來升級後,才能繼續下列的動作喔!
     

    註冊:
     
    up2date 的註冊方式有兩種方法,一種是直接以瀏覽器來線上註冊,另外一種則是以 up2date 的程式功能 ( rhn_register ) 來進行直接註冊!底下分別談一談註冊的方法吧!
     
    • 以瀏覽器來線上註冊:

    • up2date 的線上註冊網站在這裡:http://rhn.redhat.com/network ,連線之後如下圖所示:
       

       
      因為尚未建立過註冊的資料,所以當然要選擇上面箭頭的部分『Create Account』(建立帳號)囉!
       

       
      Red Hat 提供三種註冊的帳號給使用者選擇,分別是個人式帳號、公司帳號與學術研究帳號。因為我們是一般用戶啊!所以我們這裡以個人式帳號來進行說明!給他按下『Create a new personal account』之後,出現下面畫面,並請在有紅色星號的空白處填寫正確喔!並且在最右下方的按鈕處按下『Create Account』。
       

       
      最後完成的畫面就如同下面圖示所示,這樣就已經完成了註冊了!注意!因為我們沒有提供我們的作業系統給註冊網站知道,因此,他並沒有顯示出目前我們 Red Hat 主機的資料!所以,您應該將註冊時填寫的帳號與密碼記錄下來,因為這個是未來主機要連線時所必須要填寫的資料!
       
       
    • 使用主機提供的 rhn_register 功能註冊:

    • 雖然使用瀏覽器來註冊是比較方便一些,不過畢竟由於沒有提供我們 Red Hat Linux 主機的資訊,結果導致還要在註冊完畢之後去改寫 up2date 的設定檔資料,有點小麻煩啊!因此,使用 Linux 上面的 rhn_register 來註冊不失為一個好主意!在主機上面註冊的方式,先登入主機,開啟一個終端機 (console) ,依步驟輸入底下的資料:
       
      1. 重建 RPM 資料庫:

      2. 因為我們必須告訴 Red Hat 的註冊網站關於目前我們 Linux 主機的 RPM 套件資訊,這樣一來, Red Hat 的網站才能依照我們的 RPM 資料給予我們 Linux 系統的升級!所以,可能的話,最好是先重建一下 Linux 的 RPM 資料庫:
        [root@test roo]# rpm --rebuilddb
         
      3. 首次註冊程序:

      4. 就使用 rhn_register 這一支程式吧!
        [root@test roo]# rhn_register
        0.  debug              No
        1.  rhnuuid            6b1058dc-82ee-11d7-9acb-cd7c6dfdb7bc
        2.  isatty             Yes
        3.  showAvailablePacka No
        4.  depslist           []
        5.  retrieveOnly       No
        6.  enableRollbacks    No
        7.  pkgSkipList        ['kernel*']
        8.  storageDir         /var/spool/up2date
        9.  adminAddress       ['root@localhost']
        10. noBootLoader       No
        11. serverURL          https://xmlrpc.rhn.redhat.com/XMLRPC
        12. fileSkipList       []
        13. sslCACert          /usr/share/rhn/RHNS-CA-CERT
        14. noReplaceConfig    Yes
        15. noReboots          None
        16. useNoSSLForPackage No
        17. systemIdPath       /etc/sysconfig/rhn/systemid
        18. enableProxyAuth    No
        19. retrieveSource     No
        20. versionOverride
        21. headerFetchCount   10
        22. networkRetries     5
        23. enableProxy        No
        24. proxyPassword
        25. noSSLServerURL     http://xmlrpc.rhn.redhat.com/XMLRPC
        26. keepAfterInstall   No
        27. proxyUser
        28. removeSkipList     ['kernel*']
        29. useGPG             Yes
        30. gpgKeyRing         /etc/sysconfig/rhn/up2date-keyring.gpg
        31. httpProxy
        32. headerCacheSize    40
        33. forceInstall       No
        34. noReboot           No
         
        Enter number of item to edit <return to exit, q to quit without saving>: 
        這個時候可以按下 Enter 來離開!而且,這個畫面只有在第一次才會出現!
        此外,不同的版本出現的畫面不太相同!不過原理都一樣的啦!需要特別留意的
        是上面幾個不同字體的部分!不過不要緊,可以先保持預設值,其他的
        未來再手動來設定。
         
        Your GPG keyring does not contain the Red Hat, Inc. public key.
        Without it, you will be unable to verify that packages Update Agent 
        downloads are securely signed by Red Hat.
        Your Update Agent options specify that you want to use GPG.
        To install the key, run the following as root:
         
           rpm --import /usr/share/rhn/RPM-GPG-KEY
        這裡在說明我們的註冊程式沒有 Red Hat 的 GPG 公鑰(Public Key),
        所以需要手動來製作一份!直接輸入上面的字眼即可!
        [root@test root]# rpm --import /usr/share/rhn/RPM-GPG-KEY
        上面的動作進行完畢後,如果您有資訊想要更改,例如上圖的 31 httpProxy 這個項目,如果您瞭解您使用的網路的上層代理伺服器(Proxy)的話,可以填寫這個資料!在哪裡填寫呢?!在底下這個檔案內喔!
        /etc/sysconfig/rhn/up2date
         
      5. 開始編寫與傳送註冊資料:

      6. 好了!基本的資料做完之後,可以開始傳送與編寫您的註冊資料囉!再執行 rhn_register 一次後,會出現下面的畫面喔!
         

         
        按下 Next 之後,會出現如下的 Red Hat 公司的隱私聲名,請詳細看完之後,按下 Next 吧!
         

         
        在出現了如下的註冊畫面後,呵呵!填寫您的註冊資料吧!是否跟剛剛上面瀏覽器的申請一模一樣呢?!沒錯啦!確實一樣喔!填寫完畢後,請輸入 Next 吧!
         

         
        呵呵!接下來就是要將我們主機的(1)硬體資料與(2)作業系統的資訊給他上傳給 Red Hat 的註冊網站囉!如下所示,如果一切都沒有問題的話,就給他 Next 吧!(使用 Tab 按鍵)。
         

         
        好了!在建立好我們的主機套件資訊後,呵呵!在底下的畫面按下 Next 吧!
         


         
        終於將一些資訊收集完畢,呵呵!要將資料傳上 Red Hat 囉!還是按下 Next 吧!
         



        看到上面的 Finish 就表示,哈哈!『挖出溫啊!』(我出運了)恭喜您!註冊完畢囉!準備使用 up2date 的強大功能吧! ^_^

    開始使用 up2date 功能:
     
    只有在第一次使用 up2date 之前才需要註冊,未來您的主機就可以直接使用 up2date 而不需要再次的註冊囉喔!好了,來使用 up2date 的功能吧!您可以使用 man up2date 來瞭解 up2date 的所有功能,不過,這裡只幾個可能比較常用的:
     
    [root@test /root]# up2date -l     <==列出所有可以升級的套件
    [root@test /root]# up2date --showall <==列出您的版本中,有沒有可以升級的套件
    [root@test /root]# up2date -i packages<==直接升級 packages 那個套件!例如:
    [root@test /root]# up2date -i gdb <==直接連到 Red Hat 主機升級 gdb 這個套件
    [root@test /root]# up2date -u  <==全部的套件升級!等於升級您的 Red Hat !
     
    舉個常見的例子來進行 up2date 的更新動作好了:
     
    # 1. 先檢查一下我的主機需要進行更新的套件有哪些?
    [root@test /root]# up2date -l
    Fetching package list for channel: redhat-linux-i386-9...
    ########################################

    Fetching Obsoletes list for channel: redhat-linux-i386-9...
    ########################################

    Fetching rpm headers...
    ########################################

    Name                                    Version        Rel
    ----------------------------------------------------------
    redhat-config-date                      1.5.15         1
    unzip                                   5.50           14

    註:因為我曾經更新過,所以這裡顯示出來的套件有點少喔! ^_^

    # 2. 針對 unzip 這個套件來更新一下:
    [root@test /root]# rpm -q unzip
    unzip-5.50-7
    [root@test /root]# up2date -i unzip

    Fetching package list for channel: redhat-linux-i386-9...
    ########################################

    Fetching Obsoletes list for channel: redhat-linux-i386-9...
    ########################################

    Fetching rpm headers...
    ########################################

    Testing package set / solving RPM inter-dependencies...
    ########################################
    unzip-5.50-14.i386.rpm:     ###############          1 k/sec, 00:00:34 rem.
    unzip-5.50-14.i386.rpm:     ########################## Done.

     

    結語
     
    其實我個人對於 up2date 的評價還不錯!因為他解決了在 Red Hat 使用的 RPM 套件當中,屬性相依的這個最麻煩也最討厭的問題了!使得使用者與系統管理員可以輕鬆的無痛的進行系統套件的升級!不過,並不是每個人都適合使用 up2date 來進行套件的升級的啦!怎麼說呢?
     
    • 網路問題:由於『知識服務無價!』所以,Red Hat 確實是有針對不同的使用者限制 up2date 的流量的!有付費的註冊會員會有較大的使用頻寬喔!當 Red Hat 註冊主機流量不足時,當然,我們這些散兵游勇就不可能有頻寬可以進行升級了!因此,呵呵!小流量的我們的主機,想使用 up2date 來升級,會花上很長的一段時間的!
     
    • 套件安裝問題:如果您喜歡自己使用 Tarball 進行自己的套件修補的話,那麼 up2date 對您而言可能根本沒有什麼用處的!因為他只針對 Red Hat 自家出品的 RPM 檔案進行升級而已喔!
     
    不過,無論如何,鳥哥還是相當建議您去進行註冊的!為什麼呢?因為網路上面的安全通報很多,我們可能沒有什麼時間去關心一下網路安全的問題!這個時候, up2date 的好處就來啦!因為每次 up2date 發現您的套件(在註冊的時候不是有提供您系統上面的套件嗎?!就是那個啦!)可能有漏洞,並且也已經推出修補的程式時,就會發送 email 到您的信箱去!該封 email 列有相當詳細的問題解析與如何升級的方式,呵呵!光是這些資訊,對於系統管理員的我們來說,就具有相當棒的好處啦!您說是吧! ^_^
     
    反正,能夠以 Linux 上網之後,第一件事情,請您趕快進行 Linux 系統之套件的升級吧!以免有些漏洞造成您系統整體的問題!

Mandrake 的 urpmi 升級

    相對於 Red Hat 的 up2date , Mandrake 也自行推出了一個 urpmi 的套件,這個套件也可以用來進行網路升級喔!事實上, urpmi 是個很不錯用的套件,相對於 up2date 一定需要到 Red Hat 的 up2date 上面去進行升級, urpmi 則可以自行選擇提供 RPM 檔案的伺服器來源 ( 在 urpmi 裡面稱為媒體, media ),而且與 up2date 相同的是, urpmi 也會自動的由遠端伺服器 ( 遠端的媒體 ) 上面的套件去分析各個 RPM 檔案之間的相依屬性 (dependence ) 之後,然後再下載所需要的套件,並據以升級自己的套件!所以,我們只要:
     
    1. 選擇最靠近我們主機的 FTP 網站,並以 urpmi.addmedia 指令將該網站(媒體)加入到 urpmi 分析的媒體當中;
    2. 將上面登錄的媒體當中,所有的套件資訊寫到我們的主機上面 (使用 urpmi.update 指令 );
    3. 利用 urpmi 指令來進行套件升級。
     
    全部的動作就是這麼簡單喔! ^_^
     

    urpmi 的套件結構
     
    urpmi 相關的設定檔與執行指令有:
     
    • /var/lib/urpmi/list.*:剛剛上面不是提到了媒體嗎?這個媒體有可能是原版光碟、 FTP 伺服器網站以及 WWW 網站等等。而這些媒體上面的資訊都會被紀錄到 urpmi 的紀錄檔當中,那就是這個檔案的功能啦!當我們選擇了媒體,並且使用 urpmi.addmedia 之後,相關的 list.媒體名稱 就會被建立,而當使用 urpmi.update 則該檔案就會被更新!也就是說,每一個媒體都會具有一個資訊紀錄檔案。舉例來說,我的 Mandrake 9.0 有三塊光碟,這三塊光碟的資訊就分別在:
      • list.Installation CD 1 (x86) (cdrom1)
      • list.Installation CD 2 (x86) (cdrom2)
      • list.International CD (x86) (cdrom3)
      上面三個檔案分別記錄了三塊光碟的內容,當我以 urpmi 要安裝某個程式時, urpmi 就會到這這三個檔案內去搜尋我要的套件,然後自己分析出相依屬性的套件,我只要順著螢幕的資料放入原版光碟即可!不再需要自己去搞定 RPM 的屬性相依問題了。
       
    • /var/lib/urpmi/hdlist.*/var/lib/urpmi/synthesis.*:與 list.* 類似的,主要的檔案內容仍在於將媒體的資訊記錄下來,好讓 urpmi 可以順利的進行套件的屬性相依分析與下載升級等動作!

    •  
    • /etc/urpmi/urpmi.cfg:這個檔案記錄了各個媒體的說明而已,例如預設的情況下,這個檔案內有三塊原版光碟的說明而已。

    •  
    • /etc/urpmi/skip.list:這個檔案裡面如果有列出某些套件名稱(可以使用正規表示法來表示套件名稱),則該套件就不能以 urpmi 來自動升級了。這樣可以避免一些比較危險的套件安裝。預設的情況下這個檔案裡面不會有任何套件名稱存在。

    •  
    • /etc/urpmi/inst.list:列出您需要安裝,而不是升級的套件!

    •  
    • /usr/sbin/urpmi:這個就是安裝的主程式啦!

    •  
    • /usr/sbin/urpme:這個就是移除的主程式啦!

    •  
    • /usr/sbin/urpmq:這個就是用來查詢媒體裡面包含的套件資訊!

    •  
    • /usr/sbin/urpmi.addmedia/usr/sbin/urpmi.update :這兩個指令的主要功能就是用來新增 RPM 放置的媒體 ( 不論是儲存媒體還是網站 ),以及將媒體上面的資訊更新到自己的 /var/lib/urpmi 目錄下的檔案當中!
     
    基本上,最常用到的就是 urpmi 咯,而不要忘記了剛開始使用 urpmi 的時候需要選擇媒體,那麼 urpmi.addmedia 也需要學會喔!
     

    選擇 RPM 檔案的媒體
     
    雖然在 /var/lib/urmpi/list.* 已經具有原版光碟的 RPM 檔案資訊存在了,但是老是抽換光碟總是覺得蠻討厭的!所以在這裡,我依然選擇了一個 Internet 上面的 Mandrake 原版 RPM 檔案的網站,另外,也選擇了一個升級網站 (update 網站,或者是 patch 網站) ,好讓我可以自由自在的經過 Internet 來安裝或升級我的系統。考慮到我在南部,所以我選擇了中山大學這個 FTP 網站,而這個網站關於 Mandrake 的路徑為:(請注意,我以 Mandrake 9.0 為範例喔!如果您是 Mandrake 9.1 或者其他版本,請自行尋找對應的網站路徑!)
       
    特別注意到上面,每個 Mandrake 釋出的 RPM 都會附上一個 hdlist.cz 的檔案來記錄 RPM 的相關性,這個 hdlist.cz 檔案相當的重要,我們在底下介紹 urpmi.addmedia 來新增媒體時時,就是以這個 hdlist.cz 做為我們分析 RPM 屬性的依據來源!通常這個檔案放置的地點會是在每個 RPM 檔案放置的路徑上層的一個名為 base 的目錄下,例如 /PATH/Mandrake/RPMS 放置了所有的 RPM 檔案,而這些 RPM 檔案的相關性則放置在 /PATH/Mandrake/base/hdlist.cz 裡面啦!也就是說,他的相對路徑其實通常是在 ../base/hdlist.cz 喔! ^_^
     
    而剛剛在 urpmi 的架構中,我們知道 /var/lib/urmpi/list.* 等等的檔案是一個媒體為一個檔名,在這個地方,我們其實是選擇了兩個媒體喔(當然,您可以選擇更多的媒體!),好了,我這裡將這兩個媒體命名為(您可以自行設定媒體名稱):
     
    • 原本的 RPM 檔案路徑:packages.ftp.nsysu
    • 升級的 RPM 檔案路徑:update.ftp.nsysu
     
    好了,讓我們將上面這兩個媒體資訊給他複製到我們的 Mandrake 系統上吧!
     
    [root@test root]# urpmi.addmedia [name] [url] with [屬性相關性檔案]
    參數說明:
    [name]:為您要為這個媒體設定的一個容易記憶的名稱
        設定好之後,會將該名稱寫入 /etc/urpmi/urmpi.cfg 裡面
    [url] :就是 ftp 伺服器的完整路徑!
    [屬性相關檔案]:剛剛上面我們不是提到一個 hdlist.cz 嗎?就是那個檔案
            相對於 [url] 的相對路徑與檔名!
    範例:
    [root@test root]# urpmi.addmedia package.ftp.nsysu  \
    > ftp://ftp.nsysu.edu.tw/Linux/Mandrake/mandrake-old/9.0/i586/Mandrake/RPMS \
    > with ../base/hdlist.cz
    [root@test root]# urmpi.addmedia update.ftp.nsysu \
    > ftp://ftp.nsysu.edu.tw/Linux/Mandrake/mandrake/updates/9.0/RPMS  \
    > with ../base/hdlist.cz
    # 上面的動作進行完畢之後,會更動 /etc/urpmi/urmpi.cfg 以及
    # /var/lib/urpmi/ 目錄下的內容喔!
     
    # 察看一下 /etc/urpmi/urpmi.cfg 的內容可以發現:
    [root@test root]# more /etc/urpmi/urpmi.cfg
    package.ftp.nsysu  {
      hdlist: hdlist.package.ftp.nsysu.cz
      with_hdlist: ../base/hdlist.cz
      list: list.package.ftp.nsysu
    }

    update.ftp.nsysu  {
      hdlist: hdlist.update.ftp.nsysu.cz
      with_hdlist: ../base/hdlist.cz
      list: list.update.ftp.nsysu
    }
    # 看到了吧!兩個媒體已經加入了我們的搜尋囉!

      
    如果您想要將剛剛的媒體,或者是原版 CD 的資訊移除的話,那麼您就可以這樣做:
     
    [root@test root]# urpmi.removemedia [name]
    參數說明:
    [name]:為媒體的名稱
    範例:
    [root@test root]# urpmi.removemedia package.ftp.nsysu
     
    # 事實上,我蠻討厭原版光碟還在 /etc/urpmi/urpmi.cfg 裡面的,
    # 所以我都會將他移除說!
      

    進行升級: urpmi.update, urpmi
     
    在進行升級之前,有沒有想到一件事情,網路上面的 update 修補套件是一直在公告的,所以前一個小節提到的 /PATH/Mandrake/base/hdlist.cz 其實『是一直在更動的!』,亦即每次 Mandrake 公司釋出新版的修補套件後,就會同時更新 hdlist.cz ,然而我們的 /var/lib/urpmi/* 只有第一次增加媒體的時候才會主動建立!那麼怎麼更新套件的資訊呢?因為一定要更新套件的資訊啊,不然新釋出的套件就不會被我們的 urpmi 捉到了!更新的步驟真是太簡單了:
     
    [root@test root]# urpmi.update [name]
    參數說明:
    [name]:為媒體的名稱
    範例:
    [root@test root]# urpmi.update update.ftp.nsysu
      
    注意一下,因為原版釋出的 RPM 檔案並不會被更動,所以沒有必要對 package.ftp.nsysu 進行 urpmi.update 的動作!但是 update.ftp.nsysu 這個媒體則『每次在進行升級前,都需要 urpmi.update 一次』。好了,更新完畢之後,就來給他升級吧!
     
    [root@test root]# urpmi [options] [套件名稱]
    參數說明:
    [options]:主要的參數有:
      --media 媒體名稱:以哪一個媒體來進行搜尋 RPM 的動作?
      --auto:自動進行升級的動作,而不會再詢問使用者
      --auto-select:自動將屬性相依的檔案安裝起來;
    [套件名稱]:就是要進行升級的套件!
    範例:
     
    # 將 tcpdump 升級一下!
    [root@test root]# urpmi --media update.ftp.nsysu tcpdump
     
    # 自動將所有的套件都給他升級一下:
    [root@test root]# urpmi --media update.ftp.nsysu --auto --auto-select
      

    每日自動升級
     
    如果說要讓系統每日進行升級的話,那麼您可以使用 cron 這個 daemon 的輔助啊!如果先以手動方式確定 urpmi.update 與 urpmi 執行都沒有問題,就可以這樣做:
     
    [root@test root]# vi /etc/crontab
    # 在這個檔案當中新增一行:
    30 5 * * * root /usr/sbin/urpmi.update update.ftp.nsysu > /dev/null ; /usr/sbin/urpmi --media update.ftp.nsysu --auto --auto-select > /dev/null
    # 特別注意,上面是同一行啊!
     
    透過這樣的一個手段後,您的 Mandrake 可以很便利的進行自我升級呢!很不賴吧! ^_^

APT 的使用

    除了 up2date 與 urpmi 之外,其實我們也可以透過 APT 來進行套件的升級喔。事實上, APT 主機的動作與 urpmi 有點類似的,我們要以 APT 伺服器提供的功能來自我套件升級時,同樣的需要透過 Server 與我們 Linux 主機的套件比對之後,才能夠進行套件的安裝與升級!我以我的 Red Hat 9 作為範例,要以 APT 網路升級套件時,我們應該這麼做:
     
    1. 先尋找適合我們 Linux 系統的 apt 套件,並且安裝:

    2. 如果是 Red Hat 系統,可以使用底下的網站提供的 RPM 檔案來安裝喔:
      http://apt.freshrpms.net/
      以我的 Red Hat 9 為例,要安裝的動作為:
      [root@test root]# rpm -ivh \
      > http://ftp.freshrpms.net/pub/freshrpms/redhat/9/apt/apt-0.5.5cnc6-fr1.i386.rpm
      [root@test root]# rpm --import \
      > ftp://linux.sinica.edu.tw/redhat/redhat-9/en/os/i386/RPM-GPG-KEY
      [root@test root]# rpm --import http://ftp.freshrpms.net/pub/freshrpms/RPM-GPG-KEY
      這樣就可以直接網路上安裝該套件了!一般來說,我們在安裝了 RPM 之後,為了要信任來源網站,所以要將該網站提供的 Public Key 讀進我們的 linux 系統當中,那就是上面為何需要 import 的原因了!
       
    3. 尋找合適的更新主機:sources.list

    4. 既然 APT 是去到 APT Server 來下載我們 Client 端所需要的套件,所以當然就要尋找我們所需要的 APT 主機啦!如果您是以上面的 APT 套件來安裝您的 APT 的話,那麼預設的 APT 主機設定在 /etc/apt/sources.list 裡面,內容有點像這樣:
      [root@test root]# vi /etc/apt/sources.list
      # Red Hat Linux 9
      rpm http://ayo.freshrpms.net redhat/9/i386 os updates freshrpms
      #rpm-src http://ayo.freshrpms.net redhat/9/i386 os updates freshrpms
      # 裡面料的格式為:
      # rpm <APT伺服器位址> <相對於伺服器的路徑> <目錄一> <目錄二> <目錄三> ...
      # 以上面的例子來說,事實上 RPM 放置的目錄在:
      # http://ayo.freshrpms.net/redhat/9/i386/RPMS.os
      # http://ayo.freshrpms.net/redhat/9/i386/RPMS.updates
      # http://ayo.freshrpms.net/redhat/9/i386/RPMS.freshrpms
      我們使用預設的路徑即可!當然,您可以自行去 Internet 上面搜尋最靠近我們的 APT 伺服器,這樣可以讓我們的 RPM 下載速度比較快啦!
       
    5. 更新 Client 與 APT Server 的對應清單:

    6. 在每次更新之前,請務必將您的主機上面的 RPM 屬性清單與 APT 伺服器上面同步更新,這樣才能下載到最新的套件啊!更新的方式很簡單:
      [root@test root]# apt-get update
       
    7. 開始更新與每日更新:

    8. 要安裝與更新來自 APT 主機的 RPM 檔案真的很簡單,只要一個指令 apt-get 即可!工作的方法如下:
      [root@test root]# apt-get <options> <更新項目> <套件名稱>
      參數說明:
      options:關於參數有底下幾個較常見的:
        -q 不要輸出訊息,安靜一點比較好嗎?! ^_^
        -y 如果 apt-get 在工作過程中需要使用者回應,這個參數可以直接回答 yes 
      更新項目:更新的動作有底下幾個:
        update:就是剛剛我們上個動作說的,要更新 Client 與 Server 的清單對應
        install:安裝某個套件,後面接套件名稱
        dist-upgrade:自動升級我們系統上面已經安裝的所有 RPM 套件喔
        clean:將下載自 APT 主機的的 RPM 檔案刪除哩!
      範例:
      [root@test root]# apt-get install tcpdump  # 安裝 tcpdump 這個套件
      [root@test root]# apt-get -y dist-upgrade  # 升級我們系統上面的所有 RPM 套件
      [root@test root]# apt-get clean 
       
      # 至於每日更新的話,可以寫入 /etc/crontab 喔
      [root@test root]# vi /etc/crontab
      40 5 * * * root apt-get update; apt-get -y dist-upgrade ; apt-get clean
       
    呵呵!這麼簡單的方法就可以自動的更新我們的 Linux 囉!當然啦,我這裡是以 Red Hat 系統為範例,如果您的系統並非為 Red Hat ,那麼您就得要自行到 Internet 上面去搜尋您的 distributions 的 APT Server 咯!至於如果您想要自行架設 APT 主機的話,請參考後續章節的 APT 伺服器架設

VBird 的自動更新程式

    套件的升級真的很重要,而透過線上直接升級則是一個很不錯的方式,例如前面介紹的 up2date, urpmi 與 APT 等方法。不過,您是否思考過,既然每一個 Linux distribution 在發現漏洞之後都會釋出相關的套件修補版本,並且公告在 Internet 上面,而台灣地區很多好的站台都會將這些資料保留下來,以方便台灣地區的 Linux 愛好者可以很快速的進行下載與升級的動作!而由於各大 Linux distribution 在釋出他們修改過的套件時,均同時會將相關的屬性相依的套件問題一起解決,所以啦!只要將同時間釋出的套件下載下來,並且同時予以升級,一般來說,都不會有屬性相依的困擾呢
     
    根據這樣的考量,讓 VBird 思考了一件事情,既然我們可以用手動的方式來將國內 FTP 網站的 RPM 檔案捉下來,然後在 Linux 上面進行套件更新,那麼是否我們可以透過 scripts 來幫我們分析新釋出的檔案,並且依據這些資料來進行線上的自動更新呢?!
     
    呵呵!在經過一段時間的改寫之後,終於使用 lynx 以及 wget 完成了一個可以自動更新 Linux 系統的 script 了!我是利用中山大學的 FTP 網站來進行 RPM 檔案的下載與分析的!而由於這個程式是使用 FTP 網站的資料,並且利用比對的方式來找出自己所需要的套件,所以呢,基本上程式應該是能夠符合使用 RPM 安裝的 Linux 系統的,目前我在 Red Hat 以及 Mandrake 系統上面測試過這個程式,都沒有問題!理論上, Open Linux 以及其他使用 RPM 方式來安裝套件的 Linux 系統應該都可以使用這支程式才是!
     
    這支程式主要的工作流程圖是這樣的:
     

     
    1. 由國內 FTP 網站上面,搜尋符合自己系統相關的 RPM 套件;
    2. 以上面的步驟所取得的 RPM 檔案資訊中,比對與自己目前已經下載過的 RPM 檔案,如果沒有新增的檔案,那麼程式就會停止;
    3. 如果 FTP 上面的新增檔案,其實是我們主機所需要的 RPM 升級套件之一,那麼就將 FTP 網站上面新增的檔案下載下來;
    4. 將上面的步驟中所自動產生的 bash scripts 執行他,使我們的 Linux 自動的去下載新的套件到目前所在的目錄中;
    5. 可以設定忽略某些套件的下載與安裝,利用 ignore 這個參數!
    6. 可以設定是否需要系統自動的幫您升級系統內的 RPM 套件!
    7. 升級成功後, RPM 檔案可視情況自動刪除!
     
    您可以在底下的網頁找到下載這支程式的地方:
    http://linux.vbird.org/download/#zzgetrpm
    整個程式的安裝方法也是很簡單的!
     
    1. 先查到您的 Linux 的 distribution 的 FTP 網站的網址,建議可以到中山大學的 FTP 網站 ( ftp://ftp.nsysu.edu.tw/Linux/ ) 上面尋找相關的網址!請注意,必須使用 ftp://website 的網址!不要使用 http://website 的網址,因為 lynx 判斷會失誤喔!以我為例,我的 Red Hat 9 就使用底下的網址啦:

    2. ftp://ftp.nsysu.edu.tw/Linux/RedHat/updates/9/en/os/i386/
      在程式當中我列出了 Red Hat 7.1~9 以及 Mandrake 9.0~9.1 的網址列,您可以直接將屬於您的 OS 該行前面的 # 拿掉即可!注意, url 僅能有一個喔!
       
    3. 建立一個目錄,注意,該目錄最好能夠有 500 MB 以上的空間!以我為例,我都會額外規劃出一個 partition 進行備份與升級的工作,這個 partition 通常命名為 /mybackup ,而我的升級目錄就可以建立成為:

    4. mkdir -p /mybackup/update9
       
    5. 將 zzgetrpm.sh 放置到該目錄下,並且更改屬性成為可以執行喔!

    6. cp /your/full/path/zzgetrpm.sh /mybackup/update9
      chmod 755 /mybackup/update9/zzgetrpm.sh
       
    7. 將 zzgetrpm.sh 裡面的幾個變數更改成為您的環境,例如:

    8. basedir=/mybackup/update9
      url=ftp://ftp.nsysu.edu.tw/Linux/RedHat/updates/9/en/os/i386/
       
    9. 選擇是否需要自動更新,亦即 autoupdate 那個變數的設定值!預設的情況下是需要自動更新的呢!

    10.  
    11. 嘗試執行看看有沒有錯誤訊息:

    12. /mybackup/update9/zzgetrpm.sh
      如果執行完畢並且沒有發生任何錯誤時,那麼就可以將這個程式寫入 /etc/crontab 當中了!最好是每天執行一次就好了!每次有自動更新之後,程式會主動的寄出一封信給 email 變數後面的郵件主機喔!在 /etc/crontab 裡面可以這樣寫:
      30 5 * * * root /mybackup/update9/zzgetrpm.sh > /dev/null
       
    有了這支程式,呵呵!鳥哥的日字過的可是挺開心的! ^_^

重點回顧

  • 將 Linux 系統上面的套件隨時保持在較新的版本,較能夠避免被 Cracker 入侵的問題;
  • 套件的升級可以透過手動以 RPM 或 Tarball 來升級,也可以透過 Red Hat 的 up2date 以及 Mandrake 的 urpmi 來升級,亦可以透過 apt 伺服器來升級;
  • up2date 為 Red Hat 公司釋出的網路升級程式,需要透過登錄到 Red Hat up2date 主網站註冊後,就可以進行 RPM 套件的升級;
  • urpmi 為 Mandrake 公司發展出來的線上升級程式,可以自行選擇媒體來進行套件升級;
  • APT 也是一種透過網路提供的輔助來進行套件升級的方法。

參考資源


課後練習

  • 請依照您的 Linux 系統進行適合的網路套件升級程序(一個步驟一個步驟寫下來),並說明為何您需要選擇這樣的網路升級程序?
修改歷史:
2002/08/02:第一次完成日期!
2003/06/29:加入自己寫的自動更新 RPM 的 bash scripts 功能!
2003/07/01:重新編寫一些內容介紹,此外,由於 Red Hat 6.x 有點老舊了,已經將 up2date 關於 Red Hat 6.x 以前的資料消除了!
2003/08/22:加入 Mandrake 的 urpmi 以及 APT Client 的設定方法
其他連結
環境工程模式篇
鳥園討論區
鳥哥舊站

今日 人數統計
昨日 人數統計
本月 人數統計
上月 人數統計