创建一个供更新或安装用的本地镜像
如果你有很多系统,你可能会考虑创建一个供更新或网络安装用的本地镜像。假设我们想为 CentOS 5.6 创建一个名为 /share/CentOS/5/ 的网络分享…… yum 软件库定义中的 $releasever 变量永远映射至最新的主发行编号,在这个例子中也就是 "5",它多数是一个指向最新副发行目录树的连结,(即将)现在为 "5.6"。
请在服务器上成为 root并创建分享:
mkdir -p /share/CentOS/5.6 cd /share/CentOS ln -s 5.6 5
调整路径至一个拥有足够空间的文件系统,或将一个新的磁盘/分区挂载在 /share 或你喜欢的挂载点。在我现有的系统里,一个整全的镜像连同 ISO 映像及数个本地组件(见如何创建本地软件库)需要大约 28GB。
寻找一个支持 rsync 而接近你的现存镜像,设立一个预载了 5.6 DVD 或 CD 内容的目录结构。你可以加入 ISO 映像及任何你曾下载过的更新组件。
目录的结构应该是这个样子(或者你只希望使用其中部分內容,比如仅用于安装的 "os" ):
addons: i386 SRPMS x86_64 centosplus: i386 SRPMS x86_64 contrib: i386 SRPMS x86_64 extras: i386 SRPMS x86_64 fasttrack: i386 x86_64 isos: i386 x86_64 os: i386 x86_64 updates: i386 SRPMS x86_64
(上面是 5.6 的现状。)
根据你期望的架构放入内容,或者同时放入 i386 和 x86_64 :
mkdir /tmp/mnt mount -ro loop /share/CentOS/5.6/isos/x86_64/CentOS-5.6-x86_64-bin-DVD-1of2.iso /tmp/mnt rsync -avHPS /tmp/mnt/ /share/CentOS/5.6/os/x86_64/ umount /tmp/mnt mount -ro loop /share/CentOS/5.6/isos/x86_64/CentOS-5.6-x86_64-bin-DVD-2of2.iso /tmp/mnt rsync -avHPS /tmp/mnt/ /share/CentOS/5.6/os/x86_64/ umount /tmp/mnt
如果使用 CD 映像的话,请将 CD 针对每个结构的内容复制到同一个目录内,并覆盖相同名字的文件。
然后针对 CentOS 5.6 利用如下的一个脚本:
#!/bin/bash
if [ -d /share/CentOS/5.6 ] ; then
rsync -avSHP --delete --exclude "local*" --exclude "isos" nearby.rsync.centos.net::CentOS/5.6/ /share/CentOS/5.6/
else
echo "Target directory /share/CentOS/5.6 not present."
fi
利用 cron 执行这个脚本可以保持镜像常新。如果你只需要 i386 或 x86_64,或者想将 [extras] 或 [centosplus] 等东西排除,请按需要更改。若在 cron 内执行这个脚本,你应该通过锁定文件来确定没有相同工作在进行中,藉此增加坚固性。
#!/bin/bash
if [ -f /var/lock/subsys/rsync_updates ]; then
echo "Updates via rsync already running."
exit 0
fi
if [ -d /share/CentOS/5.6 ] ; then
touch /var/lock/subsys/rsync_updates
rsync -avSHP --delete --exclude "local*" --exclude "isos" nearby.rsync.centos.net::CentOS/5.6/ /share/CentOS/5.6/
/bin/rm -f /var/lock/subsys/rsync_updates
else
echo "Target directory /share/CentOS/5.6 not present."
fi
假如有最新的发行,请创建一个连结指向它。
cd /share/CentOS/ ln -fs 5.6 5
在服务器上你可以利用 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-5 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-5 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-5 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-5 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-5 protect=0 priority=3
切记要设置那些软件库会是被启用的,并且按你的需要设置 protectbase 或 priorities 插件。
要不然 —— 利用 HTTP 或 FTP 来取代或补替 NFS,分享更新。这个便留绐读者作为练习,但有关 HTTP 可以在这里找到帮助。
异曲同工
假如你较喜欢维护一套已通过本地测试的子集,而不是映射已发布的更新,你便需要为 yum 创建中继数据。请将内容放置在 updates 目录内,然后执行
createrepo /share/CentOS/5/updates/i386 createrepo /share/CentOS/5/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 5.6 && exit'
- 便会为放置在远程 centos/ 目录内的整个 5.6 创建镜像。lftp 的弊病就是在保存现有文件方面不够可靠:它经常会因为不健全的时间戳而重新下载完整的文件;然而忽略时间戳却又会导致那些如 repodata 等拥有相同名称但新内容及时间戳的文件不能被下载。
迁移到新的定点发行
一个新的定点发行多数包含一个新的 [base] 软件库,当中包括了上一个发行的最新文件,连同已发布的更新,及一组大量的更新。要迎接 5.7
cd /share/CentOS cp -al 5.4 5.7 mv 5.7/updates/i386/RPMS/* 5.7/os/i386/CentOS mv 5.7/updates/x86_64/RPMS/* 5.7/os/x86_64/CentOS
当 5.7 被发行,而镜像被更新时,更改映射的脚本来反映 5.4 至 5.7 的改变,并与镜像进行同步。接著
cd /share/CentOS /bin/rm -f 5 /bin/ln -s 5.7 5
这页的英文版本由 PhilSchaffner 创建及维护。欢迎其它 Wiki 用户作出更正、添加、或修改。
Translation of revision 14
