鳥哥的 Linux 私房菜
為取得較佳瀏覽結果,請愛用 firefox 瀏覽本網頁
鳥哥的 Linux 私房菜館 | 目錄 | Linux 基礎文件 | Linux 架站文件 | Linux 企業運用 | 安全管理 | 新手討論 |
     
 
簡易 APT/YUM  伺服器設定
最近更新日期:2004/06/23
 
用不慣 Tarball 安裝套件卻又擔心 RPM 的屬性相依問題嗎?如果有一種套件管理工具可以克服 RPM 屬性相依的方法該有多好!有沒有這種工具?呵呵!有的,那就是 APT 與 YUM 這兩個伺服器了。APT (Advanced Package Tool) 是由 debian 這個 distribution 所發展的一個套件管理工具,其目的在克服 RPM 套件的屬性相依問題,讓使用者可以透過 APT 的分析直接安裝/昇級/刪除相關聯的套件喔。另一個很好用的就是 YUM (Yellow dog Updater, Modified) 這個咚咚,他是由 Duke University 所發起的計劃,目的則與 APT 相似,都是在克服 RPM 的屬性相依問題,方便使用者進行套件的安裝、升級等等工作。由於 APT/YUM 這一類的伺服器在『系統升級/管理』上面的功能發揮的很好,所以目前很多的 distributions 都把這兩個伺服器作為預設的服務喔。在這個章節當中,我們要介紹如何在您的 Linux 伺服器上面建置一個 ATP 或 YUM 伺服器,並且提供更新的 RPM 套件給 Client 端來使用!
 
前言
  :甚麼是 APT/YUM 呢?他們如何運作
  :是否需要架設 APT/YUM 伺服器
  :架設之前,您所需要啟用的服務
APT 伺服器
  :APT 伺服器利用的機制
  :安裝 APT 軟體
  :APT 伺服器的套件結構
  :APT 伺服器設定 ( 以 HTTP 提供服務為例 )
  :Client 端的設定
YUM 伺服器
  :YUM 伺服器利用的機制
  :安裝 yum 軟體
  :yum 伺服器的套件結構
  :yum 伺服器設定
特殊案例
  :建立自己的更新套件
  :如何取得網路上的更新元件
主機的規劃技巧與建議
參考資源

前言:
    如果您曾經自行安裝過某些套件的話,那麼您或許會覺得:『RPM 是比 Tarball 好安裝沒有錯啦,但是每次為了解決套件之間的屬性相依問題,真的是很煩,尤其是 RPM 檔案在不同的作業系統版本之間也無法相容!』是的!沒錯!為了要解決這個套件之間的屬性相依問題,又要保留 RPM 套件的易安裝與查詢的特性,所以就有一些套件管理方法出來啦!比較有名的就是 APT 與 YUM 這兩個咚咚啦。(註:當然,Mandrake 的 urpmi 也是很棒的工具。)
     

    甚麼是 APT/YUM 呢?他們如何運作?
     
      眾所皆知的, RPM 是目前 Linux 世界裡面用的最多的套件安裝方式。不過,由於 RPM 所管理的套件在安裝的時候必須要考慮到不同套件之間的相依性,這在系統管理員處理系統的升級/更新上面是很討厭的!為了克服這個問題,所以有 APT/YUM 之類的計劃出來。APT ( Advanced Package Tool ) 最早是由 debian 這個 distribution 所發展出來的,而 YUM ( Yellow dog Updater, Modified ) 則是由 Duke University 所發起的計劃之一,這兩者的目的都是『為了要解決安裝 RPM 套件時的屬性相依問題!』,而不是額外再建立一個套件安裝模式喔。首先,我們談一談為甚麼 RPM 套件會有屬性相依的問題?又,甚麼是屬性相依的問題啊?
       
      • 屬性相依的問題大多來自於函式庫的引用,舉例來說,我們前面 SSH 與 Telnet 伺服器章節中提到的 SSH 伺服器需要使用到 SSL 這個套件的加密機制,所以自然就需要 SSL 的函式庫,這個時候,如果您沒有安裝 SSL 的話,那麼 SSH 就不會讓您安裝了!這就是屬性相依的問題啦。也就是說,當我們要安裝 A 套件,結果 RPM 套件管理員告訴你還需要 B 套件,而安裝 B 套件時,卻又發現還缺少 C 套件~真是環環相扣啊!討厭死了~
     
      • 要知道某個套件的最低要求是哪些套件時,可以使用 rpm -qR packagename ,至於某個套件提供哪些檔案則可以使用 rpm -q --provides packagename 。這些資訊都紀錄在 RPM 套件裡面。
       
      如果對於 RPM 還有疑問,請參考基礎學習篇RPM 與 SRPM 那個章節囉。好了,既然每一個 RPM 套件的標頭 (header)裡面都會紀錄該套件的屬性相依關係,那麼如果我們可以將該標頭的內容紀錄下來並且進行分析,不就可以得知每個套件在安裝之前需要額外安裝哪些基礎套件嗎?也就是說,我們在伺服器上面先以分析工具將所有的 RPM 檔案進行分析,然後將該分析紀錄下來,只要在進行安裝或升級時先查詢該紀錄的檔案,就可以知道所有相關聯的套件檔案!沒錯!是這樣。他的整個運作流程有點像這樣:
       
      伺服器端:
      1. 首先,在 APT/YUM 伺服器上面放置了所有的 RPM 套件(這包括來自原版光碟與供應商發行的昇級套件);
      2. 然後以相關的功能去分析各個 RPM 檔案的相依性,這些紀錄可以解決所謂的屬性相依問題,然後將這些資料記錄成檔案存放在伺服器的某特定目錄內;
       
      客戶端:
      1. Client 端如果需要安裝/升級/刪除某個程式時,會先下載伺服器上面記載的屬性相依檔案(利用的協定則是 WWW 或者是 FTP);
      2. 經由比對伺服器端傳來的紀錄資料進行分析,然後取得所有相關的套件,一次全部下載下來進行升級安裝。
       
      如此一來則克服了屬性相依的問題囉!是的!就這麼簡單啊!整個圖示如下:

圖一、APT/YUM 伺服器的架構。
      您的 APT/YUM 伺服器上面可以擁有多個版本的 Linux distributions 的 RPM 套件,並且需要提供 WWW/FTP 等服務,而 Client 端則是藉由主機的 WWW/FTP 等協定來進行 RPM 檔案的取得喔。
     

    是否需要架設 APT/YUM 伺服器
     
      APT/YUM 的功能也只是在管理 RPM 套件而已,只是他比單純的 RPM 指令要好的地方在於他克服了屬性相依的問題,所以用戶端可以很方便的進行安裝/升級與移除的動作。那麼是否意味著我就得要架設 APT 或 YUM 伺服器呢?
       
      這可不一定吶。如果您只有一部主機,而且上面的網路服務很少,並且也沒有提供甚麼重要的服務,那麼架設 APT/YUM 伺服器就沒有這麼需要了。為甚麼呢?因為很少用到 APT 的機制啊,而且直接找網路上面有的 APT/YUM 伺服器即可,無須架設啦!要注意的是,架設 APT/YUM 伺服器時,您必須要有夠用的硬碟空間、夠用的頻寬以及提供至少 WWW 或者是 FTP 的網路服務呢!這對只有一部主機的您來說,真的不必要費心思去管理的啦!但如果您的網路環境是如下的模樣,可能就得要架設一部 APT/YUM 伺服器比較好囉!
       
      • 您的網路裡面有相當多的同樣版本的 Linux distribution 系統;
      • 您的區域網路對外頻寬不高,且內部有多部 Linux 主機系統;
      • 您的 Linux distributions 在國內並沒有相對應的 APT/YUM 伺服器提供服務,而對國外連線的頻寬又很低時;
       
      也就是說,如果您擁有多部 Linux 主機,或者是您連接到 APT/YUM 伺服器的頻寬太低時,就可以考慮架設 APT/YUM 伺服器了。以上面圖一來說,如果您的連外網路頻寬太低,那麼架設一部 APT/YUM 伺服器後,所有的 Linux 是連接到該部 APT/YUM 伺服器進行升級/安裝,速度當然比連外要快很多啦!
        
      所以說,如果您是上層的系統管理員(例如學校的網管老師或者縣網、區網的網管人員),為了您的整個網域的 Linux 主機來打算,那麼架設 APT/YUM 是蠻需要的,因為真的可以節省很多連外的頻寬;相反的,如果您是一般用戶,擁有的了不起就是兩三部 Linux 主機而已,那麼似乎沒有架設 APT 主機的必要性呢!因為由上面的說明來看,架設 APT 主機所需要的『硬碟空間』可是不能省的,對於一般的用戶來說,架設 APT 主機實在是沒有什麼必要性說
     

    架設之前,您所需要啟用的服務
     
      就如同前面的說明,您要架設 APT/YUM 時,請先記得在您的 APT/YUM 主機上面啟用 WWW 或者是 FTP 服務了才行!因為 APT/YUM 是利用 WWW/FTP 來進行 RPM 檔案在 Server 與 Client 之間的傳送的!此外,您的 APT/YUM 主機上面最好將最靠近您主機的 Linux 版本更新套件的網站設定為映射站台 ( mirror ),如此一來,您就可以讓系統自動的更新您的 Linux distributions 所需要的更新檔案,而不必手動來更新呢!
       
      此外,由於完整的 APT/YUM 伺服器包含了原本的 Linux distributions 的原版光碟內容,所以需要的硬碟空間是很高的!至少需要 3~5 GB 以上,最好能夠有 10GB 以上的硬碟空間
       
      好了,底下我們就來開始安裝與設定 APT/YUM 伺服器吧!

APT 伺服器:
    底下開始來談一談 APT 伺服器吧!
     

    APT 伺服器利用的機制
     
      就如同前言說明的, APT 主機可以將已經存在的 RPM 檔案進行分析,並且將各個套件的相關係記錄下來,以便讓使用者依據這個套件的相關性紀錄檔案來更新與安裝他們的 Linux 系統。那麼這些檔案放在哪裡呢?其實因為這些檔案被需要讓 Client 端可以下載,而且 APT 並不是額外再啟用其他的 port ,而是透過 WWW 或者是 FTP 的方式來讓 Client 端下載的,所以 APT 的 RPM 檔案當然就需要放在可以讓 WWW 或者讓 FTP 來存取的目錄囉
       
      在很多 Linux distributions 的 WWW 預設主頁是放在 /var/www/html 這個目錄下的( 例如 Red Hat 9, Fedora Core I/II, Mandrake 等等 ),所以,除非您想要自行架設虛擬主機,或者是利用連結檔的方式來讓 RPM 檔案放置的目錄可以讓 WWW 讀取,否則您都應該要將 APT 管理的 RPM 檔案放置在 /var/www/html 底下。假設我有兩個 Linux 的版本要這部 APT 主機管理時,一版是 Mandrake 9.1 一版是 Red Hat 9 ,那麼我可以這樣編排我的 RPM 檔案放置的目錄:
       
      表一、APT 主機相關 RPM 檔案放置的目錄示意表
      /var/www/html/apt/redhat9
                   |--RPMS.os
                   |--RPMS.updates
                   |--SRPMS.os (非必備目錄)
                   |--SRPMS.updates (非必備目錄)
                   `--base
                     |--pkglist.os.bz2
                     |--pkglist.updates.bz2
                     |--release
                     |--release.os
                     `--release.updates
      /var/www/html/apt/mdk9.1
                  |--RPMS.os
                  |--RPMS.updates
                  |--SRPMS.os (非必備目錄)
                  |--SRPMS.updates (非必備目錄)
                  `--base
                    |--pkglist.os.bz2
                    |--pkglist.updates.bz2
                    |--release
                    |--release.os
                    `--release.updates
       
      如上所示,我獨立出一個名為 apt 的目錄來管理我的 APT 檔案,另外,因為有兩個版本,所以我將 apt 又分為兩個目錄,因為兩個目錄的格式一樣,所以我以 Red Hat 9 那個 /var/www/html/apt/redhat9 目錄來介紹。裡面至少會有三個目錄才對,分別是 RPMS.os, RPMS.updates, base 這三個目錄,其中:
       
      • RPMS.os 的內容為 Red Hat 9 的原本光碟中的 RPM 檔案(i386);
      • RPMS.updates 的內容為 Red Hat 公司針對 Red Hat 9 這一版所釋出的修補套件;
      • base 這個目錄裡面的資料則是由 APT 伺服器所自動產生的,前面我們提到的 APT 會去分析 RPM 檔案而將檔案資訊記錄下來,記錄下來的咚咚就是放置在這個目錄下的啦!
       
      您還會看到其實還有 SRPMS.os 以及 SRPMS.updates 等目錄,呵呵!那個就是 Source RPM (SRPM) 檔案放置的目錄了。因為我們直接可以透過 Binary 來升級,所以我預設不放 SRPM 在我的 APT 伺服器裡面囉!
       
      OK!所以我們需要怎麼來架設我們的 APT 以及利用 APT 來升級呢?
       
      1. 先將所有來自 Linux 原版光碟的 RPM 檔案複製到 /full/path/RPMS.os 檔案中;
      2. 再將來自原 Linux 版本公司釋出的 RPM 修補套件由 Internet 下載到 /full/path/RPMS.updates 當中;
      3. 利用 APT 的功能進行 /full/path/base 這個目錄裡面資訊的更新;
      4. 到 Client 端上面,以 APT 的功能更新 Client 自己的套件資訊,使與 APT 主機的 /full/path/base 這個目錄裡面的套件記錄資訊同步化;
      5. 到 Client 端上面,可以利用 APT 的功能來更新或者是安裝套件了!當然,所使用來下載 RPM 檔案的協定當然是 WWW 或是 FTP 囉!而且, Client 端分析的是自己的 RPM 資訊喔,所以每次進行更新之前,應該將 Client 端的 RPM 資訊與 APT Server 端來同步化才行!否則 Server 新增的檔案在 Client 端是無法取得資訊的喔!
       
      所以囉,其實在 APT 主機設定上面最重要的步驟應該是在於主機硬碟的規劃、檔案的複製與 updates 檔案的隨時自動更新(可以利用映射站台的功能),以及 /full/path/base 目錄下的資訊更新等等步驟!只要這邊沒有問題,其他的流程就簡單咯!
     

    安裝 APT 軟體
       

    APT 伺服器的套件結構
     
      APT 伺服器裡面有很多的檔案,說明如下:
     
    • 設定檔案:

    •  
      • /etc/apt/apt.conf:這個並不是 APT Server 的記錄檔,而是當我們在指令列模式下達 APT 的指令時 (如底下執行檔部分會介紹的 apt-get ),該指令的環境參數。一般來說,使用預設值就可以了!不需要更動他。這個檔案的內容當中:

      •  
        註解符號為兩個斜線( slash ):『//』
        主要至少分為三大群組,分別為 APT(環境參數), Acquire(下載相關參數) 與 RPM(RPM相關參數),而每個群組之內又分別具有多個參數,每個參數的設定值最後以分號『;』隔開,例如下面的範例:
        [root@test root]# vi /etc/apt/apt.conf
        APT    //第一個大群組
        {
          // Options for apt-get
          Get   //第一個大群組裡面的第一個參數
          {
            Download-Only "false";  //第一個參數的項目與該項目之設定值
            Show-Upgraded "true";   //第二個參數的項目與該項目之設定值
          };
        };
        除了上面的格式外,也可以利用底下的格式來進行設定:
        主群組::參數::項目 "設定值";
        例如上面的範例中,可以將第一個設定值寫成:
        APT::Get::Download-Only "false";
         
        另外,如果您想要使用 Proxy 來加快您的網路傳輸時,可以修改裡面的內容,因為 Proxy 是在 Acquire 裡面的 Http 參數,所以您可以使用如下的設定值(註:我以成大的 proxy.ncku.edu.tw:3128 為例):
         
        1. 利用原本的設定技巧:
        [root@test root]# vi /etc/apt/apt.conf
        // 找到底下的參數
        Acquire
        {
          // 底下加入這些資料:
          Http
          {
            Proxy "http://proxy.ncku.edu.tw:3128";
          };
          Retries "0";
        };
         
        2. 或者您也可以改用底下的參數設定:
        [root@test root]# vi /etc/apt/apt.conf
        //在最後一行加入,注意,不要被括號 {} 括住了!
        Acquire::Http::Proxy "http://proxy.ncku.edu.tw:3128";
         
        上面兩種方法都是行的通的啦!
         
      • /etc/apt/sources.list:這個檔案就真的重要了!此檔案的作用在於『選擇適合您的 APT 主機』囉!所以這個檔案與 Client 的關係比較大。內容有點像這樣:

      •  
        [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
        # 而至於 rpm-src 則是放置 SRPM 檔案的伺服器與目錄喔!
         
        如果您是由鳥哥面推薦的 RPM 安裝您的 APT 時,這裡可以保持預設的路徑,不過,如果您知道台灣地區有更快速的映射站台,這裡就可以修改成您所找到的 APT 伺服器囉。
         
    • 執行檔案:

    •  
      • apt-get:這個是最主要的執行檔了!大部分的時候都是給 Client 端用的,語法如下:

      •  
        [root@test root]# apt-get <options> <更新項目> <套件名稱>
        參數說明:
        options:關於參數有底下幾個較常見的:
          -q 不要顯示 apt-get 運作時的輸出訊息,安靜一點比較好嗎?! ^_^
          -y 如果 apt-get 在工作過程中需要使用者回應,這個參數可以直接回答 yes 
        更新項目:更新的動作有底下幾個:
          update:這個動作很重要,就是我們上面有提到的,Client 端要更新與 APT Server
              套件相關性檔案的清單對應表,就得要使用這個項目了!基本上,
              每次進行 apt-get 來下載 APT Server 的檔案前,最好都先 apt-get update 
          install:安裝某個套件,後面接套件名稱
          dist-upgrade:自動升級我們系統上面已經安裝的所有 RPM 套件喔
          clean:將下載自 APT 主機的的 RPM 檔案刪除哩!
          remove:移除已經安裝在我們系統的某個套件!
        範例:
        [root@test root]# apt-get update       # 將 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
         
      • genbasedir:我們在前言的部分一再地提到 APT Server 會分析已經存在的 RPM 檔案的屬性相關性,並且會將屬性的結果放置在 /full/path/base 那個目錄內~呵呵!其實該動作很簡單的,就是使用這個 genbasedir 即可!
       
    • 相關目錄:

    •  
      • /var/cache/apt:一些記錄檔案的地方,例如當使用 apt-get update 之後,這個目錄下的 RPM 檔案相關係記錄檔就會更新了!

      • /var/state/apt:這個則是 apt 在工作的時候,一些狀態的紀錄檔案放置的地方!
     

    APT 伺服器設定 ( 以 HTTP 提供服務為例 )
     
      在底下的例子當中,我們主要是設定以 HTTP 為 APT Server 的服務提供者,因為是利用預設的 WWW 系統版本,所以首頁在 /var/www/html。鳥哥在 /var/www/html 底下建立一個名為 apt 的目錄,並在底下提供 Red Hat 9 與 Mandrake 9.1 的 APT 套件服務功能,注意,我預設僅提供 RPM 檔案,並不提供 SRPM 的檔案喔!相關的目錄如前面提到的表一所示(註:當然 SRPM.os... 等檔案就不必建立了!)。好了,那麼就來給他安裝 APT Server 相關的流程吧!
     
    1. 建置所需的目錄與複製所需的檔案:

    2. 如上面提到的 表一 所示為我們所需要的目錄,而在每個 RPMS.os 為系統原本的光碟裡面的檔案,而 RPMS.updates 則為套件升級版本。我這裡主要以中山大學的 FTP 網站作為主要的 update 資料來源,使用的是 ncftp 的下載方法:
      1. 建置所需目錄:
      [root@test root]# mkdir -p /var/www/html/apt/redhat9/RPMS.os
      [root@test root]# mkdir -p /var/www/html/apt/redhat9/RPMS.updates
      [root@test root]# mkdir -p /var/www/html/apt/mdk9.1/RPMS.os
      [root@test root]# mkdir -p /var/www/html/apt/mdk9.1/RPMS.updates
       
      2. 利用原版 CD 來複製所需的 .os 的 RPM 檔案
      [root@test root]# cd /var/www/html/apt/redhat9/RPMS.os
      # 先放入 Red Hat 9 的原版光碟片
      [root@test RPMS.os]# mount /dev/cdrom 
      [root@test RPMS.os]# cp /mnt/cdrom/RedHat/RPMS/* .
      [root@test RPMS.os]# umount /dev/cdrom
      # 重複上面的步驟,將三片 i386 的 RPM 檔案都複製進去!
      # 至於 Mandrake 的原版光碟複製方法也是相同的步驟!
       
      3. 利用 ftp.nsysu.edu.tw 來下載所需要的 RPM 檔案
      [root@test RPMS.os]# cd /var/www/html/apt/redhat9/RPMS.updates
      [root@test RPMS.updates]# ncftp  \
      > ftp://ftp.nsysu.edu.tw/Linux/RedHat/linux/updates/9/en/os/i386/
      NcFTP 3.0.2 (October 19, 2000) by Mike Gleason (ncftp@ncftp.com).
      Connecting to 140.117.11.7...
      ====================================================================
       歡迎光臨【國立中山大學】檔案伺服器 : FTP.NSYSU.edu.tw
         Welcome to National Sun Yat-Sen University FTP Server.
       右列網址提供本站檔案搜尋引擎 http://ftp.nsysu.edu.tw/
         File Search Engine on the URL http://ftp.nsysu.edu.tw/
       目前 FTP 部份有 313 人正在線上,最高限制 5000 人.
         There are currently 313 users out of 5000 possible.
      ====================================================================
      Only anonymous FTP !!!! Please press [ENTER] key.
      Logging in...
       ========================================================================
       !!!! Important Function !!!! (重要功能介紹)
       o 'cd key*word' or 'cd prefix*' or 'cd *suffix' provided (case-insentive).
         (例:cd freebsd 可以打成 cd fr 或 cd *sd 或 cd f*e*d 都通用,大小寫都行)
       ========================================================================
       請多多利用 <A HREF="http://ftp.nsysu.edu.tw">http://ftp.nsysu.edu.tw</A>
       可以使用方便的檔案搜尋引擎喔!!!!!!!!!!!!!!!!!
       ========================================================================
       ADM.Email: ftpadm@cc.nsysu.edu.tw
      Anonymous user (163.28.112.1) logged in
      Logged in to ftp.nsysu.edu.tw.
      Current remote directory is /pub/Linux/RedHat/linux/updates/9/en/os/i386.
      ncftp ...x/updates/9/en/os/i386 > mget *
      .....
      利用上面的步驟就可以將 Red Hat 9 的兩個目錄下的 RPM 檔案放置完畢!至於 Mandrake 9.1 的方法與 Red Hat 9 是完全相同的!請您依照上面的方法來自行安裝 Mandrake 到您的系統當中喔!另外,除了中山大學提供的 FTP 網站之外, 您也可以使用淡江大學或者是其他的大專院校提供的 FTP 服務喔!
      淡江大學的 FTP 網站: ftp://ftp.tku.edu.tw/OS/Linux
      中山大學的 FTP 網站: ftp://linux.cdpa.nsysu.edu.tw
       
    3. 建立 RPM 所在檔案的相關資料:

    4. 建立好了檔案之後,再來則是需要進行這些 RPM 檔案的相關係分析了,分析方法很簡單,只要一個動作即可:
      [root@test root]# genbasedir <最上層目錄> <相對目錄一> <相對目錄二> ...
      參數說明:
      最上層目錄:以我們的 APT 主機為例,最上層目錄有兩個,分別就是:
            /var/www/html/apt/redhat9
            /var/www/html/apt/mdk9.1
      相對目錄一:那就是 RPMS.os 與 RPMS.updates ,但是記得 RPMS 不要寫,
            只要 os 以及 updates 即可!
      範例:
      [root@test root]# genbasedir /var/www/html/apt/redhat9 os updates
      Creating base directory... done
      Components: os updates
      Processing pkglists... os updates done
      Processing srclists... done
      Creating component releases... os updates done
      Creating global release file... done
      Appending MD5Sum... os updates done
      All your base are belong to us!!!
      [root@test root]# genbasedir /var/www/html/apt/mdk9.1 os updates
      # 動作真是給他有點久~耐心等候吧! ^_^
      進行完上面兩個動作後,APT 就會在您的系統上面主動的建立起 /var/www/html/apt/redhat9/base 以及 /var/www/html/apt/mkd9.1/base 這兩個目錄囉!這也是最重要的目錄咯!基本上, APT Server 到這一步驟就已經完全 OK 了!其他的就是 WWW 伺服器的設定囉,因為前面我們已經介紹過 WWW 了,這裡不再重複說明說!
       
    5. 建立 Client 所需要的 sources.list

    6. 我們的 Red Hat 9 所架設的 APT Server 當然也可以讓我們自己來升級了!這個時候請您修改 /etc/apt/sources.list 呢!請注意喔!您所選擇的 APT Server 需要設定正確才行喔!
      [root@test root]# vi /etc/apt/sources.list
      # 這是我們主機的 Red Hat 9 範例:
      rpm http://192.168.1.2 apt/redhat9 os updates
      # 這是 Mandrake 的範例
      # rpm http://192.168.1.2 apt/mdk9.1 os updates
       
      [root@test root]# apt-get update
      Get:1 http://192.168.1.2 apt/redhat9 release [543B]
      Fetched 543B in 0s (1359B/s)
      Get:1 http://192.168.1.2 apt/redhat9/os pkglist [420kB]
      Get:2 http://192.168.1.2 apt/redhat9/os release [121B]
      Get:3 http://192.168.1.2 apt/redhat9/updates pkglist [55.1kB]
      Get:4 http://192.168.1.2 apt/redhat9/updates release [126B]
      Fetched 475kB in 8s (57.0kB/s)
      Reading Package Lists... Done
      Building Dependency Tree... Done
      # 這個步驟在測試我們上面的 sources.list 是否正確!
      # 並且可以同時更新我們 Client 端的 RPM 屬性檔案記錄!
      # 要出現上面的訊息才對,如果出現錯誤訊息,很有可能是 WWW 設定錯誤!
      這裡特別說明的是, apt-get update 的作用在『取得 APT Server 的各個 RPM 檔案的相關性,亦即是 base 目錄裡面的檔案』,取得這些資料後,未來您的 Linux 主機要進行各項安裝/升級動作時,就可以直接取用自己的紀錄檔了。所以,如果主機上面更新了 base 裡面的資訊,則您必須要再次的執行 apt-get update 才行,否則主機上面更新的資料您將無法取得。
       
    7. 定期建立 update RPM 檔案的映射資料,並更新 RPM 相關資料

    8. 其實到上一步驟所有 APT 相關的作業應該就已經完成了,不過,要曉得的是, Internet 上面的 update 套件是隨時在更新的,所以我們的 APT server 上面的 RPMS.updates 目錄也應該要隨時更新才對啊!要更新,您可以使用手動的方式來下載,用 ncftp 似乎不錯!不過,畢竟不太適合即時更新,這個時候,我們可以利用映射 (mirror) 的方式來進行更新喔!我們以 Red Hat 9 的 update 來進行說明!關於映射的說明請您自行參考 http://mirrordir.sourceforge.net/ ,我們這裡僅需要應用而已喔!
      1. 先線上安裝 mirror 吧!
      [root@test root]# rpm -ivh \
      > http://mirrordir.sourceforge.net/mirrordir-0.10.49-1.i386.rpm
       
      2. mirrordir 的語法
      [root@test root]# mirrordir <來源網址> <目標目錄>
      [root@test root]# mirrordir -v \
      > ftp://ftp.nsysu.edu.tw/Linux/RedHat/linux/updates/9/en/os/i386/  \
      > /var/www/html/apt/redhat9/RPMS.updates
      # 用 -v 來察看一下 mirrordir 的檢查狀態,如果以 cron 來進行時,就不需要了!
       
      3. 定期進行映射並且同時更新 RPM 檔案相關性:
      [root@test root]# vi /etc/crontab
      # 加入這一行:
      30 5 * * * root mirrordir ftp://ftp.nsysu.edu.tw/Linux/RedHat/linux/updates/9/en/os/i386/  /var/www/html/apt/redhat9/RPMS.updates && genbasedir /var/www/html/apt/redhat9  os updates
      # 注意喔!上面為連續的一行啊! ^_^
       
      如此一來,我們的 APT 主機不但能夠自己更新自己與 FTP 映射站的 update 資料,並且同時更新 APT 的 base 目錄下的相關性檔案喔!而您的 APT Client 就可以隨時來更新他的 RPM 套件囉! ^_^
     

    Client 端的設定
     
      無論是 APT Server 或者是 APT Client ,要使用 APT 伺服器的功能,您都必須要安裝 APT 軟體才行。所以,首先請將您的 Client 依據前面『安裝 APT 伺服器軟體』章節進行 apt 的安裝;安裝完畢之後,最重要的就是修訂 /etc/apt/sources.list 這個檔案囉!您必須要設定正確的 APT 伺服器才行,如此一來,您就可以運用 APT 的強大功能啦!更多的使用技巧請參考 Linux 網路套件升級 章節。

YUM 伺服器
談完了 APT 伺服器之後,接下來我們就來談一談目前被 Red Hat 及 Fedora 列為預設的 RPM 套件安裝/升級機制的 yum 這個伺服器啦。
 

YUM 伺服器利用的機制
    與 APT 類似的, yum 並沒有開發新的網路傳輸機制,同樣僅是利用原本主機就提供的 WWW 或者是 FTP 服務,來讓 server/client 進行檔案的傳輸。所以在您 yum 伺服器上的 RPM 檔案同樣的需要放置在 WWW 或 FTP 服務可以存取的所在目錄才行。這裡鳥哥同樣以 /var/www/html 這個 WWW 的目錄作為說明。
     
    一般來說,我們需要的 RPM 檔案就是原本光碟所提供的套件,以及後來廠商提供的升級套件,這兩種 RPM 檔案我分別將他放置在底下所示的目錄內:
     
    表二、APT 主機相關 RPM 檔案放置的目錄示意表
    /var/www/html/yum/fedora/core1
                  |--base
                  |  `--headers
                  `--update
                    `--headers

    /var/www/html/yum/mandarke/10.0
                  |--base
                  |  `--headers
                  `--update
                    `--headers

     
    如同上表二所示,每一個版本的 Linux 內僅有兩個目錄,其中 base 是原版光碟的 RPM 檔案,至於 update 則是升級的 RPM 檔案。比較有趣的地方在於『經過 yum 分析 RPM 檔案後的紀錄資料是放置在該目錄下的 headers 目錄內。』舉例來說,我們的 mandrake 10.0 升級用的 RPM 檔案是放置在 /var/www/html/yum/mandrake/10.0/update 下,則在該目錄下的 RPM 被分析後,每一個 RPM 檔案的紀錄檔則放置在 /var/www/html/yum/mandrake/10.0/update/headers 目錄下喔。至於整個 yum 的機制為:
     
    1. 先將所有來自 Linux 原版光碟的 RPM 檔案複製到 /full/path/base 檔案中;
    2. 再將來自原 Linux 版本公司釋出的 RPM 修補套件由 Internet 下載到 /full/path/update 當中;
    3. 利用 yum 的功能去分析每個目錄下的 RPM 檔案;
    4. 在 Client 端上面,每次進行 RPM 套件的升級/安裝功能時, yum 會自動的讀取 headers 內的紀錄檔,並自動分析 RPM 套件的屬性相依問題。
     
    與 APT 相比, yum 少了一個 Client 端同步化的步驟了,所以,可以避免使用者不小心遺忘了資料同步化而導致無法取得最新 RPM 紀錄的問題喔。

安裝 yum 軟體
yum 在 Red Hat 及 Fedora 是標準配備,所以您無須傷腦筋。但如果您是其他的 distributions 而想要利用這個好用的 yum 功能,那麼可以到底下的網站搜尋適合您的 yum 版本: 找到後,直接安裝即可。

yum 伺服器的套件結構
鳥哥覺得, yum 伺服器的套件結構要比 apt 簡單一些些,基本上只有底下幾個咚咚:
  • 設定檔:不要懷疑,只有一個設定檔。

  •  
    • /etc/yum.conf這個檔案是給 yum client 用的設定檔,裡面主要規定了要取用 RPM 檔案的 yum server 的資訊,內容有點像這樣:

    •  
      [root@test root]# vi /etc/yum.conf
      # 在這個檔案當中,註解符號是 # ,而每一個大項目則以 [] 作為開始
      # 除了 [main] 是用在針對本機相關參數的說明之外,要取用伺服器的目錄時,
      # 則需要額外的規定。我們以上述的 base/update 兩個目錄作為說明:
      [main]
      cachedir=/var/cache/yum
      debuglevel=2
      logfile=/var/log/yum.log
      pkgpolicy=newest
      distroverpkg=fedora-release
      tolerant=1
      exactarch=1
      # 上面主要規定了執行 yum 時所會使用到的目錄。例如 /var/cache/yum。
       
      [base]
      name=Fedora Core $releasever - $basearch - Base
      baseurl=http://127.0.0.1/yum/fedora/core1/base
      # 這裡就重要了,那個中括號[]裡面就是『目錄名稱』需要對應正確喔
      # name 僅只是說明該目錄下的咚咚而已,並不重要;
      # baseurl 則是完整的 URL 了!這裡請千萬填寫正確!
       
      [update]
      name=Fedora Core $releasever - $basearch - Released Updates
      baseurl=http://127.0.0.1/yum/fedora/core1/update
       
      看到了嗎?事實上,我們只要設定好 [base] 與 [update] 裡面的網址,呵呵!就可以使用 yum server所提供的更新功能啦。
     
  • 執行檔:

  •  
    • yum:這個指令是給 yum client 用來作為更新之用的,簡單的操作如下:

    •  
      [root@test root]# yum <options> <更新項目> <套件名稱>
      參數說明:
      options:這裡僅列出常見的參數而已。
        -y 如果 yum 在工作過程中需要使用者回應,這個參數可以直接回答 yes 
      更新項目:更新的動作有底下幾個:
        install :安裝某個套件,後面需要接套件名稱
        update  :這就是升級啦!如果 update 後面接套件名稱,表示只要 yum 升級該套件
             而已,如果 update 後面不接套件名稱,表示 yum 針對目前該主機所有已
             經安裝的套件進行升級的動作!這是最常使用的項目了。
        list    :列出目前在 yum server 上面有的 RPM 套件;
        info    :某個套件的內容,類似 rpm -qi packages 的內容。
        clean   :將已將下載到本機的 packages 或 headers 移除。
        remove  :移除已經安裝在我們系統的某個套件!
      範例:
      [root@test root]# yum install hdparm  # 安裝 hdparm 這個套件
      [root@test root]# yum update hdparm    # 更新 hdparm 這個套件
      [root@test root]# yum -y update      # 更新目前本機上面的所有套件,並自動回覆 yes
      [root@test root]# yum clean packages # 將下載至本機的 RPM 檔案刪除(放在 
                           /var/cache/yum 裡面。
       
      # 至於每日更新的話,可以寫入 /etc/crontab 喔
      [root@test root]# vi /etc/crontab
      40 5 * * * root yum -y update; yum clean packages
       
    • yum-arch:這個指令則是給 yum server 使用的!重點在分析 RPM 套件的 header 喔!用法真是很簡單,同樣已 /var/www/html/yum/fedora/core1/base 為例:

    •  
      [root@test root]# yum-arch <options> <目錄>
      參數說明:
      options:這裡僅列出常見的參數而已。
        -q : yum 分析 RPM 過程中不顯示訊息。
      範例:
      [root@test root]# yum-arch /var/www/html/yum/fedora/core1/base
      # 只要經過這個步驟, yum 就會自動在 /var/www/html/yum/fedora/core1/base 底下新增
      # 一個名為 headers 的目錄,並將分析的 RPM 紀錄資料都放置在裡面喔!
       
  • 相關目錄

  •  
    • /var/cache/yum:我們在 yum 這個指令裡面談到當使用 yum 進行升級時,下載下來的 rpm 檔案並不會自動被刪除的,那麼這些 rpm 檔案放在哪裡呢?就是放在 /var/cache/yum 這個目錄內。這些檔案在升級完成後就可以移除了,所以我們可以使用『yum clean packages』來移除這些 rpm 檔案喔。
yum 相關的咚咚就只有這樣,是否真的很簡單啊?  ^_^

yum 伺服器設定
yum 伺服器的設定真是簡單!最重要的是 WWW/FTP 的設定必須要正確才行。整個步驟是這樣的:
 
1. 先建立所需要的目錄:
[root@test root]# mkdir /var/www/html/yum/fedora/core1/base
[root@test root]# mkdir /var/www/html/yum/fedora/core1/update
 
2. 複製原版光碟的內容:
# 利用 mount 與 cp umount 等功能,將原本光碟的內容整個複製到
# /var/www/html/yum/fedora/core1/base 當中。
 
3. 利用 mirrordir 下載昇級套件。鳥哥這裡建議使用中山大學的 FTP 網站:
[root@test root]# mirrordir -v \
> http://linux.cdpa.nsysu.edu.tw/Linux/Fedora/linux/core/updates/1/i386/ \
> /var/www/html/yum/fedora/core1/update
 
4. 進行 RPM 套件分析:
[root@test root]# yum-arch /var/www/html/yum/fedora/core1/base
[root@test root]# yum-arch /var/www/html/yum/fedora/core1/update
 
5. 為 client 建立 yum.conf 內容:
[root@test root]# vi /etc/yum.conf
[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
distroverpkg=fedora-release
tolerant=1
exactarch=1

[base]
name=Fedora Core $releasever - $basearch - Base
baseurl=http://127.0.0.1/yum/fedora/core1/base

[update]
name=Fedora Core $releasever - $basearch - Released Updates
baseurl=http://127.0.0.1/yum/fedora/core1/update
 
6. 開始自我升級:
[root@test root]# yum -y update

 
沒錯!別懷疑!整個 yum 伺服器的架設就是這麼簡單啊!

特殊案例

建立自己的更新套件
如果您曾經自己修改一些 SRPM 的檔案,並且重新打包成為 RPM 套件,然後發行給自己的 Linux 機器來安裝,此外,您也可能取得一些計劃所釋出的 RPM 檔案,例如 opnewebmail 所釋出的 RPM 套件,這些 RPM 檔案您又想放置在自己的伺服器上面,以方便自己未來升級與查詢之用,那麼應該怎麼放置呢?最簡單的方法就是將這些檔案放置在 /var/www/html/yum/fedora/core1/update 裡面,不過可能會有問題,例如如果您使用 mirrordir 進行資料的映射時,那麼您放置的 RPM 檔案將會被刪除喔!
 
事實上,我們可以自己設定好額外的升級目錄啊!舉例來說,鳥哥自己所製作出來的 RPM 檔案都是放置在:
/var/www/html/yum/fedora/core1/myself
當然,該目錄是自己建立的,然後將自己新增的 RPM 檔案通通給他複製進去該目錄下,之後,就是製作 header 檔案啦:
yum-arch /var/www/html/yum/fedora/core1/myself
最後只要在 /etc/yum.conf 裡面新增一個目錄:
[myself]
name=My personal RPM files
baseurl=http://127.0.0.1/yum/fedora/core1/myself
當然啦,要利用您的 RPM 檔案的 client ,他的 /etc/yum.conf 就需要加入上面的設定,(注意:127.0.0.1 是在自己的機器上面跑的緣故,您必須要填寫正確的 yum server 的主機名稱或 IP 才行。)如此一來,您的 RPM 檔案就可以被利用啦!

如何取得網路上的更新元件
上面提到的伺服器幾乎都是以 FTP 的方式在 internet 上面取得最新的 RPM 套件檔案。那如果您的內部網域本身並不提供 FTP 對外連線時,該如何是好?鳥哥曾經遇過一個特別的狀況,在該網域內僅提供 port 80 的對外連線,除此之外,一切都是關閉的!而我們使用的 mirrordir 及 ncftp 都是以 ftp 來對外連線,這該如何是好?
 
好在天無絕人之路啊!記得鳥哥在前面 網路升級套件 那個章節裡面提到的 zzgetrpm.sh 檔案嗎?您只要下載該檔案,然後填寫正確的 URL ,就可以透過 port 80 下載網路上最新的更新套件了!而後在內部網域當中,您當然就可以透過各方式來進行 yum/apt 的升級嚕!^_^

主機的規劃技巧與建議
那麼架設一部 APT/YUM 主機需要注意哪些事項呢?因為您的 APT 主機還需要運行 WWW ,所以您可能需要獨立出一個 partition 以進行虛擬主機的設定,或者是在 /var/www/html 這個預設的 WWW 主頁的硬碟空間要足夠!反正 APT 主機需要注意的地方最主要還是在於硬碟的空間了!此外, APT 主機最好可以放置在對外頻寬較高的網段內,因為還需要對 Internet 取得 update 的 RPM 檔案嘛!
 
而如果您的 APT 主機僅作為 APT 的 update 之用時,而 WWW 僅是附屬的功能,那麼您在安置 RPM 的所在目錄最好額外的限制使用者的瀏覽網段,避免被外部的人(來自 Internet)作為連線升級的主要主機,那可能會佔據掉您的連外頻寬吶!所以,可能的話,使用虛擬主機,並且加以設定瀏覽的屬性,例如使用 iptables 設定防火牆,或以 httpd.conf 裡面的 ACCEPT/DENY 功能來抵擋,也是一個不錯的想法喔!至於 WWW 主機的相關設定請參考前面的章節。

參考資源:
簡易 APT/YUM 伺服器設定

2003/08/27:首次完成
2004/06/23:首次加入 yum 伺服器的說明!並有實做的例子喔!
 
     
本網頁主要以 firefox 配合解析度 1024x768 作為設計依據
http://linux.vbird.org is designed by VBird during 2001-2009. Aerosol Lab.