[FrontPage] [TitleIndex] [WordIndex

This is a read-only archived version of wiki.centos.org

建立一個供更新或安裝用的本地鏡像

如果你有很多系統,你可能會考慮建立一個供更新或網絡安裝用的本地鏡像。假設我們想為 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

切記要設定那些軟件庫會是被啟用的,並且按你的需要設置 protectbasepriorities 插件。

要不然 —— 利用 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 內的一封電郵:

還有 Akemi Yagi 提及 lftp:

lftp -e 'open http://<some.site>/centos/ && mirror -c --delete  6.8 && exit'

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


2023-09-11 07:23