尽管sohu和163都推出了mirrors服务,但当要配置多台服务器时仍然需要占用很多公网带宽,因此配置一个本地yum源并时常与公网同步就显得非常有必要了。本文介绍的就是针对CentOS 5.4 配置yum源, 并且每日同步公网数据。每日的同步使用rsync协议,这里要注意并不是所有的mirrors站点都支持rsync协议,不过不用担心,下文有更新脚本,里面有我测试过的几个支持rsync协议的mirros站点。

配置yum源

本文要配置3个yum软件仓库,分别为:CentOS标准软件仓库、epel、以及rpmforge。经过多次尝试,定位了速度和更新频率都比较理想的几个站点。更多的mirrors站点参见以下网址:
CentOS:http://www.centos.org/modules/tinycontent/index.php?id=32
epel:https://fedoraproject.org/wiki/EPEL
rpmforge:http://apt.sw.be/

同步yum源脚本:

#!/bin/bash

#==========================================
# Program   : update_yum_source.sh
# Info      : 定期同步官方 yum 源到本机
# Version   : 2010.01.28    First Release
#==========================================

Date=`date +%Y%m%d`
LogFile="/data/logs/rsync_yum/$Date.log"
CentOSTrunkVer="5"
CentOSCurrentVer="5.4"
ReceiveMail="nathanzhou@mysite.com"

RsyncBin="/usr/bin/rsync"
RsyncPerm="-avrt --delete --exclude=debug/  --exclude=isos/"
CentOS_Trunk_Ver_Path="/data/soft/mirror.mysite.com/centos/$CentOSTrunkVer"
CentOS_Current_Ver_Path="/data/soft/mirror.mysite.com/centos/$CentOSCurrentVer"
YumSiteList="rsync://mirror.averse.net/centos"

#============ epel ==============
epelSite="rsync://mirrors.sohu.com/fedora-epel/"
epelLocalPath="/data/soft/mirror.mysite.com/epel"

# rpmforge
rpmforgeSite="rsync://apt.sw.be/freshrpms/pub/dag/redhat/el5/"
rpmforgeLocalPath="/data/soft/mirror.mysite.com/rpmforce"

echo "---- $Date `date +%T` Begin ----" >>$LogFile

# centos 5
$RsyncBin $RsyncPerm $YumSiteList/$CentOSTrunkVer/ \
$CentOS_Trunk_Ver_Path >> $LogFile

# centos 5.4
$RsyncBin $RsyncPerm $YumSiteList/$CentOSCurrentVer/ \
$CentOS_Current_Ver_Path  >> $LogFile

# epel
$RsyncBin $RsyncPerm  --exclude=4/ --exclude=4AS/ --exclude=4AS/ \
--exclude=4WS/ --bwlimit=500 $epelSite $epelLocalPath >> $LogFile

# rpmforge
$RsyncBin $RsyncPerm $rpmforgeSite $rpmforgeLocalPath >> $LogFile

echo  "---- $Date `date +%T` End ----" >> $LogFile

/bin/mail -s "opt001 - update yum source - $Date" $ReceiveMail<$LogFile

该脚本只更新了CentOS 5.4的软件包,其它的版本都略过了。根据不同的情况,脚本中还有很多变量需要做相应的修改,如yum保存路径,更新后发送的邮件地址等等。

首次执行该脚本会下载很多资源,大概60G左右,以后就会差异更新了。同步好软件后,下一步就要配置web服务了,这样client端的yum程序才能下载我配置好的yum源,当然也可以配置ftp服务。我这里利用nginx作为web服务,并且编译时加入了fancyindex第三方插件,这样nginx在输出列表时看着舒服些。nginx配置mirrors.mysite.com站点如下:

server
{
listen          80;
server_name     mirrors.mysite.com;
index           index.html index.htm index.php;
root            /data/soft/mirror.mysite.com;
location  /  {
fancyindex on;
fancyindex_exact_size off;
fancyindex_localtime on;

allow 124.42.53.137;
allow 203.86.81.196;
allow 192.168.99.0/24;
deny all;
}
access_log  /var/log/nginx/access_yum.log  access;
}

由于我配置的mirrors站点只为公司内部使用,因此做了些访问控制。web浏览截图如下:
mirrors_site.png
最后将脚本加入到计划任务中每日执行一次:
3 3 * * * /bin/bash /root/bin/update_yum_source.sh

配置客户端yum

由于我新增了2个yum软件仓库,因此yum客户端需要安装相应的软件包:
rpmforge:http://packages.sw.be/rpmforge-release/
EPEL:https://fedoraproject.org/wiki/EPEL
选择系统对应的最新版本下载安装。

安装完成后需要将/etc/yum.repos.d/*.repo 文件中的站点替换为上文nginx配置的站点名,如:CentOS-Base.repo文件:

[base]
name=CentOS-$releasever - Base
baseurl=http://mirrors.mysite.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#released updates
[updates]
name=CentOS-$releasever - Updates
baseurl=http://mirrors.mysite.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#packages used/produced in the build but not released
[addons]
name=CentOS-$releasever - Addons
baseurl=http://mirrors.mysite.com/centos/$releasever/addons/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
baseurl=http://mirrors.mysite.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://mirrors.mysite.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
baseurl=http://mirrors.mysite.com/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

epel.repo 和rpmforge.repo文件修改与CentOS-Base.repo文件类似。

需要注意一点的是,我配置的站点是没有经过公网DNS注册的,因此需要修改host文件指定其IP。

文件修改完毕后执行yum clean all;yum makecache 没有报错的话下次yum安装程序时就通过自己的源安装了。

原创文章,转载请注明: 转自 http://salogs.com