X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=vbuild-fedora-mirror.sh;h=716b9f3768dc719f0cec52eb6578b860fb957c48;hb=refs%2Fheads%2Flxc_devel;hp=48a84f4ccdbc529435137a0d2434e7f1aa2f2764;hpb=dd2f3bf2f804d52e8ff46a26d1e3d4f7745cd75c;p=build.git diff --git a/vbuild-fedora-mirror.sh b/vbuild-fedora-mirror.sh index 48a84f4c..716b9f37 100755 --- a/vbuild-fedora-mirror.sh +++ b/vbuild-fedora-mirror.sh @@ -1,121 +1,247 @@ #!/bin/bash # this can help you create/update your fedora mirror -# $Id$ COMMAND=$(basename $0) +LOGDIR=/var/log/fedora-mirroring +DATE=$(date '+%Y-%m-%d-%H-%M') +LOG=${LOGDIR}/${DATE}.log dry_run= verbose= +log= skip_core= -root=/data/fedora/linux -rsyncurl=rsync://mirrors.kernel.org/fedora -eu_rsyncurl=rsync://ftp-stud.hs-esslingen.de/fedora/linux -distroname=f8 -arch=i386 +root=/mirror/ +dhozac_url=rsync://rpm.hozac.com/dhozac/centos/ + +us_fedora_url=rsync://mirrors.kernel.org/fedora +us_centos_url=rsync://mirrors.rit.edu/centos +us_epel_url=rsync://rsync.gtlib.gatech.edu/fedora-epel + +# ircam's fedora8 repo has been turned off +#eu_fedora_url=rsync://mirrors.ircam.fr/fedora-linux +#eu_fedora_url=rsync://mirror.ovh.net/download.fedora.redhat.com/linux +eu_fedora_url=rsync://ftp-stud.hs-esslingen.de/fedora/linux +eu_centos_url=rsync://mirrors.ircam.fr/CentOS +eu_epel_url=rsync://mirrors.ircam.fr/fedora-epel + +pl_fedora_url=$eu_fedora_url +pl_centos_url=rsync://ftp.tpnet.pl/centos +pl_epel_url=rsync://ftp.icm.edu.pl/pub/Linux/fedora/linux/epel + +jp_fedora_url="jp_fedora_url-needs-to-be-defined" +jp_centos_url="jp_centos_url-needs-to-be-defined" +jp_epel_url="jp_epel_url-needs-to-be-defined" + +default_distroname="centos5.6" +all_distronames="f14 f16 centos5.6 epel5 epel6" +default_arch="i386" +all_archs="i386 x86_64" + +case $(hostname) in + blitz*|*.fr|*.de|*.uk) + fedora_url=$eu_fedora_url ; centos_url=$eu_centos_url ; epel_url=$eu_epel_url ;; + *.pl) + fedora_url=$pl_fedora_url ; centos_url=$pl_centos_url ; epel_url=$pl_epel_url ;; + *.jp) + fedora_url=$jp_fedora_url ; centos_url=$jp_centos_url ; epel_url=$jp_epel_url ;; + *) + fedora_url=$us_fedora_url ; centos_url=$us_centos_url ; epel_url=$us_epel_url ;; +esac + +function mirror_distro_arch () { + distroname=$1; shift + arch=$1; shift + + distroname=$(echo $distroname | tr '[A-Z]' '[a-z]') + case $distroname in + fc*[1-6]) + distroindex=$(echo $distroname | sed -e "s,fc,,g") + distro="Fedora Core" + rsyncurl=$fedora_url + ;; + f*[7-9]|f1?) + distroindex=$(echo $distroname | sed -e "s,f,,g") + distro="Fedora" + rsyncurl=$fedora_url + ;; + centos[4-5]|centos[4-5].[0-9]) + distroindex=$(echo $distroname | sed -e "s,centos,,g") + distro="CentOS" + rsyncurl=$centos_url + ;; + epel[5-6]) + distroindex=$(echo $distroname | sed -e "s,epel,,g") + distro=epel + rsyncurl=$epel_url + ;; + dhozac) + distroindex=5 + distro="dhozac" + rsyncurl=$dhozac_url + ;; + *) + echo "WARNING -- Unknown distribution $distroname -- skipped" + return 1 + ;; + esac + + excludelist="debug/ iso/ ppc/ source/" + options="--archive --compress --delete --delete-excluded $dry_run $verbose" + [ -n "$(rsync --help | grep no-motd)" ] && options="$options --no-motd" + for e in $excludelist; do + options="$options --exclude $e" + done + + echo ">>>>>>>>>>>>>>>>>>>> root=$root distroname=$distroname arch=$arch rsyncurl=$rsyncurl" + [ -n "$verbose" ] && echo "rsync options=$options" + + RES=1 + paths="" + case $distro in + [Ff]edora*) + case $distroindex in + 2|4|6) + [ -z "$skip_core" ] && paths="core/$distroindex/$arch/os/" + paths="$paths core/updates/$distroindex/$arch/ extras/$distroindex/$arch/" + RES=0 + ;; + 7|8|9|1?) + [ -z "$skip_core" ] && paths="releases/$distroindex/Everything/$arch/os/" + paths="$paths updates/$distroindex/$arch/" + # f8 and f9 have the additional newkey repo + case $distroindex in + 8|9) paths="$paths updates/$distroindex/${arch}.newkey/" ;; + esac + RES=0 + ;; + esac + localpath=fedora + ;; + + CentOS*) + case $distroindex in + 5*) + [ -z "$skip_core" ] && paths="$distroindex/os/$arch/" + paths="$paths $distroindex/updates/$arch/" + RES=0 + ;; + esac + localpath=centos + ;; + + epel*) + case $distroindex in + 5|6) + paths="$paths $distroindex/$arch/" + RES=0 + ;; + esac + localpath=epel + ;; + + dhozac*) + case $distroindex in + 5) + # leave off trailing '/' + paths="$paths $distroindex/vserver/$arch" + RES=0 + ;; + esac + localpath=dhozac + ;; + + esac + + if [ "$RES" = 1 ] ; then + echo "DISTRIBUTION $distro $distroindex CURRENTLY UNSUPPORTED - skipped" + else + for repopath in $paths; do + echo "===== $distro -> $distroindex $repopath" + [ -z "$dry_run" ] && mkdir -p ${root}/${localpath}/${repopath} + command="rsync $options ${rsyncurl}/${repopath} ${root}/${localpath}/${repopath}" + echo $command + $command + done + fi + + echo "<<<<<<<<<<<<<<<<<<<< $distroname $arch" + + return $RES +} + function usage () { - echo "Usage: $COMMAND [-n] [-v] [-c] [-e] [-r root] [-u rsyncurl] [-f distroname] [-a arch]" - echo "Defaults to -r $root -u $rsyncurl -f $distroname -a $arch" - echo "Use vserver conventions for distroname, e.g. fc6 and f7" + echo "Usage: $COMMAND [-n] [-v] [-c] [-r root] [-u|U rsyncurl] [-e|-j] [-f distroname|-F] [-a arch|-A]" + echo "Defaults to -r $root -f $default_distroname -a $default_arch" + echo "Default urls : $fedora_url $centos_url" echo "Options:" echo " -n : dry run" echo " -v : verbose" + echo " -l : turns on autologging in $LOGDIR" echo " -c : skips core repository" - echo " -e : uses European mirror $eu_rsyncurl" + echo " -C : force syncing core repository (default)" + echo " -r root (default is $root)" + echo " -u rsyncurl for fedora (default is $fedora_url)" + echo " -U rsyncurl for centos (default is $centos_url)" + echo " -E rsyncurl for epel (default is $epel_url)" + echo " -s : uses standard (US) mirrors $us_fedora_url $us_centos_url $us_epel_url" + echo " -e : uses European mirrors $eu_fedora_url $eu_centos_url $eu_epel_url" + echo " -j : uses Japanese mirrors $jp_fedora_url $jp_centos_url $jp_epel_url" + echo " -f distroname - use vserver convention, e.g. f8 or centos5" + echo " -F : for distroname in $all_distronames" + echo " -a arch - use yum convention" + echo " -A : for arch in $all_archs" exit 1 } -while getopts "nvcer:u:f:a:h" opt ; do - case $opt in - n) dry_run=--dry-run ;; - v) verbose=--verbose ;; - c) skip_core=true ;; - e) rsyncurl=$eu_rsyncurl ;; - r) root=$OPTARG ;; - u) rsyncurl=$OPTARG ;; - f) distroname=$OPTARG ;; - a) arch=$OPTARG ;; - h|*) usage ;; - esac -done - -case $distroname in - fc*[1-6]) - distroindex=$(echo $distroname | sed -e "s,fc,,g") - distro="Fedora Core" - ;; - f*[7-8]) - distroindex=$(echo $distroname | sed -e "s,f,,g") - distro="Fedora" - ;; - centos*[4-5]) - distroindex=$(echo $distroname | sed -e "s,centos,,g") - distro="CentOS" - ;; - *) - echo "Unknown redhat distribution $distroname - exiting" - RES=1 - ;; -esac +function run () { + RES=0 + for distroname in $distronames ; do + for arch in $archs; do + mirror_distro_arch "$distroname" "$arch" || RES=1 + done + done + return $RES +} -excludelist="debug/ iso/ ppc/ source/" -options="--archive --compress --delete --delete-excluded $dry_run $verbose" -[ -n "$(rsync --help | grep no-motd)" ] && options="$options --no-motd" -for e in $excludelist; do - options="$options --exclude $e" -done - -if [ -n "$verbose" ] ; then - echo "root=$root" - echo "distro=$distroname" - echo "distroname=$distroname" - echo "distroindex=$distroindex" - echo "arch=$arch" - echo rsyncurl="$rsyncurl" - echo "rsync options=$options" -fi - -RES=1 -paths="" -case $distro in - [Ff]edora*) - case $distroindex in - 2|4|6) - [ -z "$skip_core" ] && paths="core/$distroindex/$arch/os/" - paths="$paths core/updates/$distroindex/$arch/ extras/$distroindex/$arch/" - RES=0 - ;; - 7|8) - [ -z "$skip_core" ] && paths="releases/$distroindex/Everything/$arch/os/" - paths="$paths updates/$distroindex/$arch/" - RES=0 - ;; +function main () { + distronames="" + archs="" + while getopts "nvlcCr:u:U:E:sejf:Fa:Ah" opt ; do + case $opt in + n) dry_run=--dry-run ;; + v) verbose=--verbose ;; + l) log=true ;; + c) skip_core=true ;; + C) skip_core= ;; + r) root=$OPTARG ;; + u) fedora_url=$OPTARG ;; + U) centos_url=$OPTARG ;; + E) epel_url=$OPTARG ;; + s) fedora_url=$us_fedora_url ; centos_url=$us_centos_url ; epel_url=$us_epel_url;; + e) fedora_url=$eu_fedora_url ; centos_url=$eu_centos_url ; epel_url=$eu_epel_url ;; + j) fedora_url=$jp_fedora_url ; centos_url=$jp_centos_url ; epel_url=$jp_epel_url ;; + f) distronames="$distronames $OPTARG" ;; + F) distronames="$distronames $all_distronames" ;; + a) archs="$archs $OPTARG" ;; + A) archs="$archs $all_archs" ;; + h|*) usage ;; esac - ;; - - CentOS*) - case $distroindex in - 5) - [ -z "$skip_core" ] && paths="$distroindex/os/$arch/" - paths="$paths $distroindex/updates/$arch/" - RES=0 - ;; - esac - ;; - -esac - -if [ "$RES" = 1 ] ; then - echo "$distro $distroindex currently unsupported - exiting" -else - for repopath in $paths; do - echo "============================== $distro -> $distroindex $repopath" - [ -z "$dry_run" ] && mkdir -p ${root}/${repopath} - command="rsync $options ${rsyncurl}/${repopath} ${root}/${repopath}" - echo $command - $command done -fi + shift $(($OPTIND-1)) + [[ -n "$@" ]] && usage + [ -z "$distronames" ] && distronames=$default_distroname + [ -z "$archs" ] && archs=$default_arch + + # auto log : if specified + if [ -n "$log" ] ; then + mkdir -p $LOGDIR + run &> $LOG + else + run + fi + exit $? +} -exit $RES +main "$@"