You can use CentOS master server bellow to sync your mirror:
eu-msync.centos.org::CentOS [EU users may wish to use]
We're using this one now, seems relatively nippy. We've been mirroring from either Belnet or HEAnet in the past; they're both pretty good.
#!/usr/bin/ruby def xsys(c); exit $? unless system(c); end
RSYNC = ENV['RSYNC'] RSYNC_MODULES = %w( CentOS ) RSYNC_HOST = "rsync://eu-msync.centos.org" RSYNC_DIR = ENV['MIRRORDIR']
options = [] options += %w( --exclude='.~tmp~/' --exclude='alpha/' --exclude='ia64/' --exclude='s390/' --exclude='s390x/' --exclude='isos/' --exclude='isos-dvd/' --exclude '*.iso' )
RSYNC_MODULES.each do |mod| cmdline = [RSYNC] cmdline += options cmdline << "#{RSYNC_HOST}/#{mod}" cmdline << "#{RSYNC_DIR}/centos" puts cmdline.join(" ") xsys("mkdir -p #{cmdline[-1]}") xsys(cmdline.join(" ")) end
# Pass 2 RSYNC_MODULES.each do |mod| cmdline = [RSYNC] cmdline += options cmdline += %w( --delete --delete-after --delete-excluded ) cmdline << "#{RSYNC_HOST}/#{mod}" cmdline << "#{RSYNC_DIR}/centos" p cmdline.join(" ") xsys(cmdline.join(" ")) end
Two-way mirror approach ensures that old content is only deleted after the fresh RPMs have been sync'd into the mirror.
It's invoked by a simple wrapper script through cron.
#!/bin/bash LIST=$* cd /mirror/scripts/sites
export MIRRORDIR="/mirror/public" export RSYNC="rsync --verbose --partial --progress --recursive --perms --times --links --safe-links --sparse --bwlimit=5120 --address=80.68.87.200"
for SCRIPT in $LIST ; do ./$SCRIPT done
I'm sure it's not perfect, but it does the trick :) Works especially well for things like Debian / Ubuntu, and you can handle distribution-specific things like architecture excludes using loops. Saves writing out a *huge* rsync command and maintaining it.
Alex