refine strategy to spot ip address, keep on calling guest_ipv4
[build.git] / fedora-mirror.sh
1 #!/bin/bash
2 # this can help you create/update your fedora mirror
3
4 COMMAND=$(basename $0)
5 LOGDIR=/var/log/fedora-mirror
6 DATE=$(date '+%Y-%m-%d-%H-%M')
7 LOG=${LOGDIR}/${DATE}.log
8
9 dry_run=
10 verbose=--verbose
11 log=
12 skip_core=true
13 root=/mirror/
14
15
16 us_fedora_url=rsync://mirrors.kernel.org/fedora
17 eu_fedora_url=rsync://mirror1.hs-esslingen.de/fedora/linux
18
19 default_distroname="f33"
20 all_distronames="f31 f33"
21
22 global_arch="x86_64"
23
24 # use EU mirror
25 fedora_url=$eu_fedora_url
26
27 function mirror_distro_arch () {
28     distroname=$1; shift
29     arch=$1; shift
30
31     distroname=$(echo $distroname | tr '[A-Z]' '[a-z]')
32     case $distroname in
33     f*)
34         distroindex=$(echo $distroname | sed -e "s,f,,g")
35         distro="Fedora"
36         rsyncurl=$fedora_url
37         ;;
38     *)
39         echo "WARNING -- Unknown distribution $distroname -- skipped"
40         return 1
41         ;;
42     esac
43
44     excludelist="debug/ iso/ ppc/ source/"
45     options=""
46     [ -n "$(rsync --help | grep no-motd)" ] && options="$options --no-motd"
47     options="$options $dry_run $verbose"
48     options="$options -aH --numeric-ids"
49     options="$options --delete --delete-excluded --delete-after --delay-updates"
50     for e in $excludelist; do
51         options="$options --exclude $e"
52     done
53
54     echo ">>>>>>>>>>>>>>>>>>>> distroname=$distroname arch=$arch rsyncurl=$rsyncurl"
55     [ -n "$verbose" ] && echo "rsync options=$options"
56
57     paths=""
58     [ -z "$skip_core" ] && paths="releases/$distroindex/Everything/$arch/os/"
59     if [ "$distroindex" -le 27 ]; then
60         paths="$paths updates/$distroindex/$arch/"
61         localpath=fedora
62     else
63         paths="$paths updates/$distroindex/Everything/$arch/ updates/$distroindex/Modular/$arch/"
64         localpath=fedora
65     fi
66
67     for repopath in $paths; do
68         echo "===== $distro -> $distroindex $repopath"
69         [ -z "$dry_run" ] && mkdir -p ${root}/${localpath}/${repopath}
70         command="rsync $options ${rsyncurl}/${repopath} ${root}/${localpath}/${repopath}"
71         echo $command
72         $command
73     done
74
75     echo "<<<<<<<<<<<<<<<<<<<< $distroname $arch"
76
77     return $RES
78 }
79
80 function usage () {
81     echo "Usage: $COMMAND [-n] [-v] [-l] [-c] [-e|-s|-u rsyncurl] [-f distroname|-F]"
82     echo "Options:"
83     echo " -n : dry run"
84     echo " -v : turn off verbose"
85     echo " -l : turns on autologging in $LOGDIR"
86     echo " -c : also sync core repository (releases)"
87     echo " -s : uses US mirror $us_fedora_url"
88     echo " -e : uses EU mirror $eu_fedora_url"
89     echo " -u <url> : use this (rsync) for fedora (default is $fedora_url)"
90     echo " -f distroname - default is $default_distroname"
91     echo " -F : do on all distros $all_distronames"
92     exit 1
93 }
94
95 function run () {
96     RES=0
97     for distroname in $distronames ; do
98         for arch in $archs; do
99             mirror_distro_arch "$distroname" "$arch" || RES=1
100         done
101     done
102     return $RES
103 }
104
105 function main () {
106     distronames=""
107     archs="$global_arch"
108     while getopts "nvlcu:sef:Fh" opt ; do
109     case $opt in
110         n) dry_run=--dry-run ;;
111         v) verbose= ;;
112         l) log=true ;;
113         c) skip_core= ;;
114         u) fedora_url=$OPTARG ;;
115         s) fedora_url=$us_fedora_url ;;
116         e) fedora_url=$eu_fedora_url ;;
117         f) distronames="$distronames $OPTARG" ;;
118         F) distronames="$distronames $all_distronames" ;;
119         h|*) usage ;;
120     esac
121     done
122     shift $(($OPTIND-1))
123     [[ -n "$@" ]] && usage
124     [ -z "$distronames" ] && distronames=$default_distroname
125
126     # auto log : if specified
127     if [ -n "$log" ] ; then
128         mkdir -p $LOGDIR
129         run &> $LOG
130     else
131         run
132     fi
133     if [ "$?" == 0 ]; then
134         # report to fedora's infra
135         # can't get the config right...
136         #/usr/bin/report_mirror
137         exit 0
138     else
139         exit 1
140     fi
141 }
142
143 main "$@"