创建一个供更新或安装用的本地镜像

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

#!/bin/bash
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 内执行这个脚本,你应该通过锁定文件来确定没有相同工作在进行中,藉此增加坚固性。

#!/bin/bash
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 可以在这里找到帮助。

异曲同工

假如你较喜欢维护一套已通过本地测试的子集,而不是映射已发布的更新,你便需要为 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'

迁移到新的定点发行

一个新的定点发行多数包含一个新的 [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

zh/HowTos/CreateLocalMirror (last edited 2017-04-09 08:19:37 by TimothyLee)