1. 尽管有很多的免费镜像提供yum源服务,但是还是有必要建立自己的yum服务器,主要出于以下几点考虑:
l 网络速度:访问互联网可能比较慢
l 节省带宽:如果有大量的服务器,架设自己的yum源可以有效节省互联网带宽
l 联网限制:对于有些内网服务器,不能连接到互联网
l 对于RHEL(Redhat Enterprise Linux),需要购买服务
l 便于发布自己开发的rpm包
2. 找到适合你的站点的yum同步源,主要是CentOS标准软件仓库、epel、以及rpmforge
CentOS标准仓库选择列表
Asian:
http://www.centos.org/modules/tinycontent/index.php?id=32
North American
http://www.centos.org/modules/tinycontent/index.php?id=30
Epel源选择列表
http://mirrors.fedoraproject.org/publiclist/EPEL/
Rpmforge源
http://apt.sw.be/
要选尽量离你的local服务器近的地区,并支持RSYNC,方便更新同步
我选择的是Linux Kernel Archives
CentOS标准软件仓库
rsync://mirrors.kernel.org/centos
Epel源
rsync://mirrors.kernel.org/fedora-epel
Rpmforge源
rsync://ftp-stud.fht-esslingen.de/dag
rsync://mirror.cpsc.ucalgary.ca/dag
3. 编写同步脚本,根据需求进行自动同步
[root@cc-system-manager1 bin]# vi update_yum_source.sh
#!/bin/bash
#==========================================
# Program : update_yum_source.sh
# Info : 定期同步官方 yum 源到本机
# Version : 2013.03.05 First Release
#==========================================
Date=`date +%Y%m%d`
LogFile="/tmp/update_yum_source.log"
CentOSTrunkVer="5"
CentOSCurrentVer="5.9"
RsyncBin="/usr/bin/rsync"
RsyncPerm="-avrt --delete --exclude=debug/ --exclude=isos/"
CentOS_Trunk_Ver_Path="/servers/yum_update/$CentOSTrunkVer"
CentOS_Current_Ver_Path="/servers/yum_update/$CentOSCurrentVer"
YumSiteList="rsync://mirrors.kernel.org/centos"
echo "---- $Date `date +%T` Begin ----" >>$LogFile
# centos 5
$RsyncBin $RsyncPerm $YumSiteList/$CentOSTrunkVer/
$CentOS_Trunk_Ver_Path/ >> $LogFile
# centos 5.9
$RsyncBin $RsyncPerm $YumSiteList/$CentOSCurrentVer/
$CentOS_Current_Ver_Path/ >> $LogFile
echo "---- $Date `date +%T` End ----" >> $LogFile
[root@cc-system-manager1 bin]# vi update_epel_source.sh
#!/bin/bash
#==========================================
# Program : update_epel_source.sh
# Info : 定期同步官方 epel 源到本机
# Version : 2013.03.05 First Release
#==========================================
Date=`date +%Y%m%d`
LogFile="/tmp/update_epel_source.log"
RsyncBin="/usr/bin/rsync"
RsyncPerm="-avrt --delete --exclude=4/ --exclude=4AS/ --exclude=4ES/ --exclude=4WS/ --exclude=6/ --exclude=testing/"
#============ epel ==============
epelSite="rsync://mirrors.kernel.org/fedora-epel"
epelLocalPath="/servers/epel"
echo "---- $Date `date +%T` Begin ----" >>$LogFile
# epel
$RsyncBin $RsyncPerm $epelSite $epelLocalPath >> $LogFile
echo "---- $Date `date +%T` End ----" >> $LogFile
[root@cc-system-manager1 bin]# vi update_rpmforge_socure.sh
#!/bin/bash
#==========================================
# Program : update_rpmforge_source.sh
# Info : 定期同步官方 rpmforge 源到本机
# Version : 2013.03.05 First Release
#==========================================
Date=`date +%Y%m%d`
LogFile="/tmp/update_rpmforge_source.log"
RsyncBin="/usr/bin/rsync"
RsyncPerm="-avrt --delete --exclude=i386/ --exclude=ppc/ --exclude=source/"
# rpmforge
#rpmforgeSite="rsync://apt.sw.be/redhat/el5/en/"
rpmforgeSite="rsync://ftp-stud.fht-esslingen.de/dag/redhat/el5/en/"
rpmforgeLocalPath="/servers/rpmforge"
echo "---- $Date `date +%T` Begin ----" >>$LogFile
# rpmforge
$RsyncBin $RsyncPerm $rpmforgeSite $rpmforgeLocalPath >> $LogFile
echo "---- $Date `date +%T` End ----" >> $LogFile
4. 在apache的配置文件里做好相应的软连接或者修改主目录指向
cd /var/www/html/
ln -s /servers/yum_update/ yum
ln -s /servers/epel epel
ln -s /servers/rpmforge rpmforge
5. 分别创建3个repo的配置文件,指向本地源所在的服务器,注意目录
[root@cc-monitor yum.repos.d]# vi CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
baseurl=http://172.25.6.8/yum/$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://172.25.6.8/yum/$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://172.25.6.8/yum/$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://172.25.6.8/yum/$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://172.25.6.8/yum/$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://172.25.6.8/yum/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[root@cc-monitor yum.repos.d]# vi epel.repo
[epel]
name=Extra Packages for Enterprise Linux 5 - $basearch
baseurl=http://172.25.6.8/epel/5/$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
[epel-debuginfo]
name=Extra Packages for Enterprise Linux 5 - $basearch - Debug
baseurl=http://172.25.6.8/epel/5/$basearch/debug
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
gpgcheck=1
[epel-source]
name=Extra Packages for Enterprise Linux 5 - $basearch - Source
baseurl=http://172.25.6.8/epel/5/SRPMS
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
gpgcheck=1
[root@cc-monitor yum.repos.d]# vi rpmforge.repo
[rpmforge]
name = RHEL $releasever - RPMforge.net - dag
baseurl = http://172.25.6.8/rpmforge/$basearch/rpmforge
enabled = 1
protect = 0