c8c86db53d82789ca3d7fbc2fc59852116f88f20
[fuel.git] / build / f_isoroot / f_repobuild / select_ubuntu_repo.sh
1 #!/bin/bash
2
3 UBUNTU_DISTRO="xenial"
4 BLACKLIST="http://mirrors.se.eu.kernel.org/ubuntu/"
5 #BLACKLIST+=" http://foo.bar"
6
7 cleanup() {
8     rm -f $TMPFILE
9 }
10
11 debugmsg() {
12     test -n "$DEBUG" && echo "$@" >&2
13 }
14
15
16 # Check if url is blacklisted in this script
17 blacklisted () {
18   for blackurl in $BLACKLIST
19   do
20     if [ "$1" == "$blackurl" ]; then
21       return 0
22     fi
23   done
24   return 1
25 }
26
27
28 # Check mirror's integrity
29 check_mirror () {
30     mirror=$1
31     status=0
32     for packdir in dists/${UBUNTU_DISTRO}-updates/main/binary-amd64 \
33         dists/${UBUNTU_DISTRO}-updates/restricted/binary-amd64 \
34         dists/${UBUNTU_DISTRO}-updates/universe/binary-amd64 \
35         dists/${UBUNTU_DISTRO}-updates/multiverse/binary-amd64 \
36         dists/${UBUNTU_DISTRO}-security/main/binary-amd64 \
37         dists/${UBUNTU_DISTRO}-security/restricted/binary-amd64 \
38         dists/${UBUNTU_DISTRO}-security/universe/binary-amd64 \
39         dists/${UBUNTU_DISTRO}-security/multiverse/binary-amd64 \
40         dists/${UBUNTU_DISTRO}-proposed/main/binary-amd64 \
41         dists/${UBUNTU_DISTRO}-proposed/restricted/binary-amd64 \
42         dists/${UBUNTU_DISTRO}-proposed/universe/binary-amd64 \
43         dists/${UBUNTU_DISTRO}-proposed/multiverse/binary-amd64 \
44         dists/${UBUNTU_DISTRO}/main/binary-amd64 \
45         dists/${UBUNTU_DISTRO}/restricted/binary-amd64 \
46         dists/${UBUNTU_DISTRO}/universe/binary-amd64 \
47         dists/${UBUNTU_DISTRO}/multiverse/binary-amd64 \
48         dists/${UBUNTU_DISTRO}-backports/main/binary-amd64 \
49         dists/${UBUNTU_DISTRO}-backports/restricted/binary-amd64 \
50         dists/${UBUNTU_DISTRO}-backports/universe/binary-amd64 \
51         dists/${UBUNTU_DISTRO}-backports/multiverse/binary-amd64
52     do
53         for packfile in Release Packages.gz
54         do
55             if [ $status -ne 1 ]; then
56                 curl --output /dev/null --silent --head --fail \
57                     $mirror/$packdir/$packfile
58                 if [ $? -ne 0 ]; then
59                     debugmsg "$mirror: Faulty (at least missing $packdir/$packfile)"
60                     status=1
61                 fi
62             fi
63         done
64     done
65     return $status
66 }
67
68 if [ "$1" == "-d" ]; then
69     DEBUG=1
70 fi
71
72 # Hardcode for testing purposes
73 # DEBUG=1
74
75 TMPFILE=$(mktemp /tmp/mirrorsXXXXX)A
76 trap cleanup exit
77
78 # Generate a list of mirrors considered as "up"
79 curl -s  https://launchpad.net/ubuntu/+archivemirrors | \
80     grep -P -B8 "statusUP|statusONE|statusSIX" | \
81     grep -o -P "(f|ht)tp.*\""  | \
82     sed 's/"$//' | sort | uniq > $TMPFILE
83
84 # Iterate over "close" mirror, check that they are considered up
85 # and sane.
86 for url in $(curl -s http://mirrors.ubuntu.com/mirrors.txt)
87 do
88     if ! grep -q $url $TMPFILE; then
89         debugmsg "$url Faulty (detected by Ubuntu)"
90     elif blacklisted $url; then
91         debugmsg "$url blacklisted"
92     elif [ -z $BESTURL ]; then
93         if grep -q $url $TMPFILE && check_mirror $url; then
94             debugmsg "$url: OK (setting as primary URL)"
95             BESTURL=$url
96             test -z "$DEBUG" && break
97         fi
98     else
99         grep -q $url $TMPFILE && check_mirror $url && debugmsg "$url: OK"
100     fi
101 done
102
103 echo "$BESTURL"