创建一个供更新或安装用的本地镜像
如果你有很多系统,你可能会考虑创建一个供更新或网络安装用的本地镜像。假设我们想为 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