建立一個供更新或安裝用的本地鏡像
如果你有很多系統,你可能會考慮建立一個供更新或網絡安裝用的本地鏡像。假設我們想為 CentOS 6.8 建立一個名為 /share/CentOS/6/ 的網絡分享…… yum 軟件庫定義中的 $releasever 變數永遠對映至最新的主發行編號,在這個例子中也就是 "6",它多數是一個指向最新副發行目錄樹的連結,現時為 "6.8"。
請在伺服器上成為 root並建立分享:
mkdir -p /share/CentOS/6.8 cd /share/CentOS ln -s 6.8 6
調整路徑至一個擁有足夠空間的檔案系統,或將一個新的磁碟/分割區掛載在 /share 或你喜歡的掛載點。在我現有的系統裡,一個整全的鏡像連同 ISO 映像及數個本地套件(見如何建立本地軟件庫)需要大約 28GB(自 CentOS 5 開已再沒有檢查大小)。
尋找一個支援 rsync 而接近你的現存鏡像,設立一個預載了 6.8 DVD 或 CD 內容的目錄結構。你可以加入 ISO 映像及任何你曾下載過的更新套件。
目錄的結構應該是這個樣子(或者你只希望使用其中部分內容,例如僅用於安裝的 "os" ):
centosplus: i386 x86_64 contrib: i386 x86_64 cr: i386 x86_64 extras: i386 x86_64 fasttrack: i386 x86_64 isos: i386 x86_64 os: i386 x86_64 updates: i386 x86_64
(上面是 6.8 的現狀。)
根據你期望的架構放入內容,或者同時放入i386 和x86_64 :
mkdir /tmp/mnt mount -ro loop /share/CentOS/6.8/isos/x86_64/CentOS-6.8-x86_64-bin-DVD1.iso /tmp/mnt rsync -avHPS /tmp/mnt/ /share/CentOS/6.8/os/x86_64/ umount /tmp/mnt mount -ro loop /share/CentOS/6.8/isos/x86_64/CentOS-6.8-x86_64-bin-DVD2.iso /tmp/mnt rsync -avHPS /tmp/mnt/ /share/CentOS/6.8/os/x86_64/ umount /tmp/mnt
如果使用 CD 映像的話,請將 CD 針對每個架構的內容複製到同一個目錄內,並覆蓋相同名字的檔案。
然後針對 CentOS 6.8 利用如下的一個腳本:
if [ -d /share/CentOS/6.8 ] ; then rsync -avSHP --delete --exclude "local*" --exclude "isos" nearby.rsync.centos.net::CentOS/6.8/ /share/CentOS/6.8/ else echo "Target directory /share/CentOS/6.8 not present." fi
利用 cron 執行這個腳本可以保持鏡像常新。如果你只需要 i386 或 x86_64,或者想將 [extras] 或 [centosplus] 等東西排除,請按需要更改。若在 cron 內執行這個腳本,你應該透過鎖定檔案來確定沒有相同工作在進行中,藉此增加堅固性。
if [ -f /var/lock/subsys/rsync_updates ]; then echo "Updates via rsync already running." exit 0 fi if [ -d /share/CentOS/6.8 ] ; then touch /var/lock/subsys/rsync_updates rsync -avSHP --delete --exclude "local*" --exclude "isos" nearby.rsync.centos.net::CentOS/6.8/ /share/CentOS/6.8/ /bin/rm -f /var/lock/subsys/rsync_updates else echo "Target directory /share/CentOS/6.8 not present." fi
假如有最新的發行,請建立一個連結指向它。
cd /share/CentOS/ ln -fs 6.8 6
在伺服器上你可以利用 NFS 匯出目錄。相對 HTTP 或 FTP,NFS 的好處就是更新檔將會被「就地」應用,而不必被複製到 yum 所使用的快取內。
cat >> /etc/exports /share 192.168.1.0/24(rw,mountpoint)
請以你的本地網絡或以 IP 位址清單取替。
如果 NFS 未被啟用:
exportfs -a chkconfig nfs on service nfs start
否則你只需
exportfs -r
然後在客戶端掛載分享。你可利用 /etc/fstab 內的一個記錄,如下:
myserver.my.net:/share /share nfs rw 0 0
或者利用 autofs:
cd / ln -s net/myserver/share
設置 /etc/yum.repos.d/CentOS-Base.repo 如下:
[base] name=CentOS-$releasever - Base baseurl=file:/share/CentOS/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 protect=1 priority=1 enabled=1 [updates] name=CentOS-$releasever - Updates baseurl=file:/share/CentOS/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 protect=1 priority=1 enabled=1 [extras] name=CentOS-$releasever - Extras baseurl=file:/share/CentOS/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 protect=1 priority=1 enabled=1 [centosplus] name=CentOS-$releasever - Plus baseurl=file:/share/CentOS/$releasever/centosplus/$basearch/ exclude=kernel* gpgcheck=1 enabled=1 gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 protect=0 priority=1 [contrib] name=CentOS-$releasever - Contrib baseurl=file:/share/CentOS/$releasever/contrib/$basearch/ gpgcheck=1 enabled=0 gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 protect=0 priority=3
切記要設定那些軟件庫會是被啟用的,並且按你的需要設置 protectbase 或 priorities 插件。
要不然 —— 利用 HTTP 或 FTP 來取代或補替 NFS,分享更新。這個便留紿讀者作為練習,但有關 HTTP 可以在這裡找到幫助。
1. 異曲同工
假如你較喜歡維護一套已通過本地測試的子集,而不是映射已發佈的更新,你便需要為 yum 建立中繼資料。請將內容放置在 updates 目錄內,然後執行
createrepo /share/CentOS/6/updates/i386 createrepo /share/CentOS/6/updates/x86_64
假如無法找到 createrepo(它預設不被安裝)
yum install createrepo
如果你的頻寬許可,請考慮成為一個公用鏡像。
其它方式是採用 Dag Wieers 的mrepo 軟件庫、lftp、或 reposync —— 它來自收錄於 [os] 軟件庫內的 yum-utils 套件。
引用 Karanbir Singh 在 centos-docs 內的一封電郵:
- reposync 可在 centos-3/4/5 上運作,而且由於它利用內置的 yum 設定,你可以令它做一些很不錯的事情,例如:與 X 個本地安裝分享快取;用它將軟件庫同步而不必從軟件庫取下每個套件。此外,它亦能包括/排除套件組,因此你可以簡易地(利用較能配合 yum 的方法)管理套件。只要運用一點創意,你更可以用它與 squid 來設置一個建基於 avahi 的內聯網零組態 yum 鏡像,連同備用的外置連結。
還有 Akemi Yagi 提及 lftp:
- 你或試會想以 lftp 作為 rsync 的代替品。我採用的是 lftp,因為 rsync 在工作的地方被局限在一個慢得可憐的速度。還有,就是 http/ftp 網站的數量比 rsync 的網站來得多。 它亦只須單一句指令。例如:
lftp -e 'open http://<some.site>/centos/ && mirror -c --delete 6.8 && exit'
- 便會為放置在遠端 centos/ 目錄內的整個 6.8 建立鏡像。lftp 的弊病就是在保存現有檔案方面不夠可靠:它經常會因為不健全的時戳而重新下載完整的檔案;然而忽略時戳卻又會導致那些如 repodata 等擁有相同名稱但新內容及時戳的檔案無法被下載。
2. 遷移到新的定點發行
一個新的定點發行多數包含一個新的 [base] 軟件庫,當中包括了上一個發行的最新檔案,連同已發佈的更新,及一組大量的更新。要迎接 6.9
cd /share/CentOS cp -al 6.8 6.9 mv 6.9/updates/i386/Packages/* 6.9/os/i386/Packages/ mv 6.9/updates/x86_64/Packages/* 6.9/os/x86_64/Packages/
當 6.9 被發行,而鏡像被更新時,更改映射的腳本來反映 6.8 至 6.9 的改變,並與鏡像進行同步。接著
cd /share/CentOS /bin/rm -f 6 /bin/ln -s 6.9 6
這頁的英文版本由 PhilSchaffner 建立及維護。歡迎其他 Wiki 用戶作出更正、添加、或修改。
Translation of revision 19