用不慣 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 端來使用! |
/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 |
[root@test
root]# vi /etc/apt/apt.conf
APT //第一個大群組 { // Options for apt-get Get //第一個大群組裡面的第一個參數 { Download-Only "false"; //第一個參數的項目與該項目之設定值 Show-Upgraded "true"; //第二個參數的項目與該項目之設定值 }; }; |
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"; |
[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 檔案的伺服器與目錄喔! |
[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 |
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 * ..... |
[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 # 動作真是給他有點久∼耐心等候吧! ^_^ |
[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 設定錯誤! |
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 伺服器之後,接下來我們就來談一談目前被 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 的機制為:
- 先將所有來自 Linux 原版光碟的 RPM 檔案複製到 /full/path/base 檔案中;
- 再將來自原 Linux 版本公司釋出的 RPM 修補套件由 Internet 下載到 /full/path/update 當中;
- 利用 yum 的功能去分析每個目錄下的 RPM 檔案;
- 在 Client 端上面,每次進行 RPM 套件的升級/安裝功能時, yum 會自動的讀取 headers 內的紀錄檔,並自動分析 RPM 套件的屬性相依問題。
與 APT 相比, yum 少了一個 Client 端同步化的步驟了,所以,可以避免使用者不小心遺忘了資料同步化而導致無法取得最新 RPM 紀錄的問題喔。
安裝 yum 軟體yum 在 Red Hat 及 Fedora 是標準配備,所以您無須傷腦筋。但如果您是其他的 distributions 而想要利用這個好用的 yum 功能,那麼可以到底下的網站搜尋適合您的 yum 版本: 找到後,直接安裝即可。
yum 伺服器的套件結構鳥哥覺得, yum 伺服器的套件結構要比 apt 簡單一些些,基本上只有底下幾個咚咚:yum 相關的咚咚就只有這樣,是否真的很簡單啊? ^_^
- 設定檔:不要懷疑,只有一個設定檔。
- /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 伺服器的設定真是簡單!最重要的是 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]當然啦,要利用您的 RPM 檔案的 client ,他的 /etc/yum.conf 就需要加入上面的設定,(注意:127.0.0.1 是在自己的機器上面跑的緣故,您必須要填寫正確的 yum server 的主機名稱或 IP 才行。)如此一來,您的 RPM 檔案就可以被利用啦!
name=My personal RPM files
baseurl=http://127.0.0.1/yum/fedora/core1/myself
如何取得網路上的更新元件上面提到的伺服器幾乎都是以 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 主機的相關設定請參考前面的章節。