X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=vbuild-fedora-mirror.sh;h=716b9f3768dc719f0cec52eb6578b860fb957c48;hb=refs%2Fheads%2Frc26-fixes;hp=42934a8ce5be2d18a54110bd6b0967325ac1fdea;hpb=0f6c068285c05cda9c6c018c40dfab47d10abcb3;p=build.git diff --git a/vbuild-fedora-mirror.sh b/vbuild-fedora-mirror.sh index 42934a8c..716b9f37 100755 --- a/vbuild-fedora-mirror.sh +++ b/vbuild-fedora-mirror.sh @@ -1,69 +1,89 @@ #!/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 +root=/mirror/ -us_rsyncurl=rsync://mirrors.kernel.org/fedora -eu_rsyncurl=rsync://ftp-stud.hs-esslingen.de/fedora/linux -# change this -jp_rsyncurl=rsync://ftp-stud.hs-esslingen.de/fedora/linux -default_distroname=f8 -all_distronames="f7 f8" -default_arch=i386 +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 - *.fr|*.de|*.uk) - rsyncurl=$eu_rsyncurl ;; + 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) - rsyncurl=$jp_rsyncurl ;; + fedora_url=$jp_fedora_url ; centos_url=$jp_centos_url ; epel_url=$jp_epel_url ;; *) - rsyncurl=$us_rsyncurl ;; + fedora_url=$us_fedora_url ; centos_url=$us_centos_url ; epel_url=$us_epel_url ;; esac -function usage () { - echo "Usage: $COMMAND [-n] [-v] [-c] [-r root] [-u rsyncurl|-e] [-f distroname|-F] [-a arch|-A]" - echo "Defaults to -r $root -u $rsyncurl -f $default_distroname -a $default_arch" - echo "Options:" - echo " -n : dry run" - echo " -v : verbose" - echo " -c : skips core repository" - echo " -r root (default is $root)" - echo " -u rsyncurl (default is $rsyncurl)" - echo " -e : uses European mirror $eu_rsyncurl" - echo " -f distroname - use vserver convention, e.g. fc6 and f7" - echo " -F : for distroname in $all_distronames" - echo " -a arch - use yum convention" - echo " -A : for arch in $all_archs" - exit 1 -} - 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-8]) + f*[7-9]|f1?) distroindex=$(echo $distroname | sed -e "s,f,,g") distro="Fedora" + rsyncurl=$fedora_url ;; - centos*[4-5]) + 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 "Unknown distribution $distroname - skipped" + echo "WARNING -- Unknown distribution $distroname -- skipped" + return 1 ;; esac @@ -74,15 +94,8 @@ function mirror_distro_arch () { 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 + echo ">>>>>>>>>>>>>>>>>>>> root=$root distroname=$distroname arch=$arch rsyncurl=$rsyncurl" + [ -n "$verbose" ] && echo "rsync options=$options" RES=1 paths="" @@ -94,52 +107,121 @@ function mirror_distro_arch () { paths="$paths core/updates/$distroindex/$arch/ extras/$distroindex/$arch/" RES=0 ;; - 7|8) + 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) + 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 "$distro $distroindex currently unsupported - skipped" + echo "DISTRIBUTION $distro $distroindex CURRENTLY UNSUPPORTED - skipped" 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 "===== $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] [-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 " -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 +} + +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 +} + function main () { distronames="" archs="" - while getopts "nvcr:u:ef:Fa:Ah" opt ; do + while getopts "nvlcCr:u:U:E:sejf:Fa:Ah" opt ; do case $opt in - n) dry_run=--dry-run ; verbose=--verbose ;; + n) dry_run=--dry-run ;; v) verbose=--verbose ;; + l) log=true ;; c) skip_core=true ;; + C) skip_core= ;; r) root=$OPTARG ;; - u) rsyncurl=$OPTARG ;; - e) rsyncurl=$eu_rsyncurl ;; + 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" ;; @@ -147,17 +229,19 @@ function main () { h|*) usage ;; esac done + shift $(($OPTIND-1)) + [[ -n "$@" ]] && usage [ -z "$distronames" ] && distronames=$default_distroname [ -z "$archs" ] && archs=$default_arch - RES=0 - for arch in $archs; do - for distroname in $distronames ; do - mirror_distro_arch "$distroname" "$arch" || RES=1 - done - done - - exit $RES + # auto log : if specified + if [ -n "$log" ] ; then + mkdir -p $LOGDIR + run &> $LOG + else + run + fi + exit $? } main "$@"