鳥哥的 Linux ADSL 私房菜


簡易 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 伺服器設定
特殊案例
  :建立自己的更新套件
  :如何取得網路上的更新元件
主機的規劃技巧與建議
參考資源

前言:

圖一、APT/YUM 伺服器的架構。

APT 伺服器:
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 簡單一些些,基本上只有底下幾個咚咚: 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 伺服器的說明!並有實做的例子喔!

2003/08/27 以來統計人數