reviewed options:
[build.git] / vbuild-fedora-mirror.sh
1 #!/bin/bash
2 # this can help you create/update your fedora mirror
3 # $Id$
4
5 COMMAND=$(basename $0)
6
7 dry_run=
8 verbose=
9 skip_core=
10 root=/data/fedora/linux
11 rsyncurl=rsync://mirrors.kernel.org/fedora
12 distroname=f8
13 arch=i386
14
15
16 function usage () {
17     echo "Usage: $COMMAND [-n] [-v] [-c] [-r root] [-u rsyncurl] [-f distroname] [-a arch]"
18     echo "Defaults to -r $root -u $rsyncurl -f $distroname -a $arch"
19     echo "Use vserver conventions for distroname, e.g. fc6 and f7"
20     echo "Options:"
21     echo " -n : dry run"
22     echo " -v : verbose"
23     echo " -c : skips core repository"
24     exit 1
25 }
26
27 while getopts "nvcr:u:f:a:h" opt ; do
28     case $opt in
29         n) dry_run=--dry-run ;;
30         v) verbose=--verbose ;;
31         c) skip_core=true ;;
32         r) root=$OPTARG ;;
33         u) rsyncurl=$OPTARG ;;
34         f) distroname=$OPTARG ;;
35         a) arch=$OPTARG ;;
36         h|*) usage ;;
37     esac
38 done
39
40 case $distroname in
41     fc*[1-6])
42         distroindex=$(echo $distroname | sed -e "s,fc,,g")
43         distro="Fedora Core"
44         ;;
45     f*[7-8])
46         distroindex=$(echo $distroname | sed -e "s,f,,g")
47         distro="Fedora"
48         ;;
49     centos*[4-5])
50         distroindex=$(echo $distroname | sed -e "s,centos,,g")
51         distro="CentOS"
52         ;;
53     *)
54         echo "Unknown redhat distribution $distroname - exiting"
55         RES=1
56         ;;
57 esac
58
59 excludelist="debug/ iso/ ppc/ source/"
60 options="--archive --compress --delete --delete-excluded $dry_run $verbose"
61 for e in $excludelist; do
62   options="$options --exclude $e"
63 done
64
65 if [ -n "$verbose" ] ; then 
66     echo "root=$root"
67     echo "distro=$distroname"
68     echo "distroname=$distroname"
69     echo "distroindex=$distroindex"
70     echo "arch=$arch"
71     echo rsyncurl="$rsyncurl"
72     echo "rsync options=$options"
73 fi
74
75 RES=1
76 paths=""
77 case $distro in
78     [Ff]edora*)
79         case $distroindex in
80             2|4|6)
81                 [ -z "$skip_core" ] && paths="core/$distroindex/$arch/os/"
82                 paths="$paths core/updates/$distroindex/$arch/ extras/$distroindex/$arch/"
83                 RES=0
84                 ;;
85             7|8)
86                 [ -z "$skip_core" ] && paths="releases/$distroindex/Everything/$arch/os/"
87                 paths="$paths updates/$distroindex/$arch/"
88                 RES=0
89                 ;;
90         esac
91         ;;
92     
93     CentOS*)
94         case $distroindex in
95             5)
96                 [ -z "$skip_core" ] && paths="$distroindex/os/$arch/"
97                 paths="$paths $distroindex/updates/$arch/"
98                 RES=0
99                 ;;
100         esac
101         ;;
102
103 esac
104
105 if [ "$RES" = 1 ] ; then
106     echo "$distro $distroindex currently unsupported - exiting"
107 else
108     for repopath in $paths; do
109         echo "============================== $distro -> $distroindex $repopath"
110         [ -z "$dry_run" ] && mkdir -p ${root}/${repopath}
111         command="rsync $options ${rsyncurl}/${repopath} ${root}/${repopath}"
112         echo $command
113         $command
114     done
115 fi
116
117 exit $RES