blob: 833b4045002749582a39f78d30850f92c1ef0f40 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
#!/bin/sh
PROGRAM=setup-apkrepos
PREFIX=
. $PREFIX/lib/libalpine.sh
echo -n "Fetching mirrors list... "
MIRRORS=`wget -qO - http://www.alpinelinux.org/alpine/MIRRORS.txt 2>&1 || (echo "failed." && exit 1)`
echo "done."
echo -n "Finding fastest mirror... "
mirror_lowest_rtt=-1
for mirror in $MIRRORS; do
mirror_hostname=`echo $mirror | awk -F '://' '{print $2}' | awk -F '/' '{print $1}'`
tmp_mirror_nslookup=`nslookup $mirror_hostname | grep "Non-authoritative answer"`
if [ ${#tmp_mirror_nslookup} -gt 0 ]; then
tmp_mirror_time="`(time wget -qO - $mirror) 2>&1 || echo "E_MIRROR_FAILED"`"
tmp_mirror_time_failed=`echo $tmp_mirror_time | grep "E_MIRROR_FAILED"`
if [ ${#tmp_mirror_time_failed} -eq 0 ]; then
tmp_mirror_rtt=`echo "$tmp_mirror_time" | grep -E "^real" | sed -r "s/^real[ ]+[0-9]+m[ ]+([0-9]+)\.([0-9]+)s$/\1\2/"`
if [ $mirror_lowest_rtt -eq -1 ]; then
mirror_lowest_rtt=$tmp_mirror_rtt
mirror_lowest_rtt_hostname=$mirror_hostname
else
if [ $tmp_mirror_rtt -lt $mirror_lowest_rtt ]; then
mirror_lowest_rtt=$tmp_mirror_rtt
mirror_lowest_rtt_hostname=$mirror_hostname
fi
fi
fi
fi
done
echo "done."
echo "Selected mirror: $mirror_lowest_rtt_hostname"
# Get URL for lowest-RTT mirror (will be $mirror)
for mirror in $MIRRORS; do
tmp_mirror_lowest_rtt_url="`echo $mirror | grep $mirror_lowest_rtt_hostname`"
if [ ${#tmp_mirror_lowest_rtt_url} -gt 0 ]; then
break
fi
done
# Retrieve version from alpine-release if available
if [ -e /etc/alpine-release ]; then
release=$(cut -f1 /etc/alpine-release)
case "$release" in
*_git*) repo="edge";;
[0-9]*.[0-9]*.[0-9]*)
# release in x.y.z format, cut last digit
repo=v${release%.[0-9]*};;
esac
echo "Using current repository: $repo"
else
while true; do
printf "Enter repository branch from list below [v2.2]: \n"
# Retrieve list of versions available on mirror 2.0 and above
wget "$mirror" > /dev/null 2>&1
availablerepos=""
for version in `links ./index.html -dump | grep "v[2-9]" | awk -F '/' '{print $1}'`; do
availablerepos="$availablerepos $version"
done
rm index.html
availablerepos="$availablerepos edge"
for i in `echo $availablerepos`; do
printf "$i\n"
done
default_read repo "v2.2"
if [ $repo ]; then
break
fi
done
fi
echo -n "Updating /etc/apk/repositories... "
APKREPOS=`cat /etc/apk/repositories`
new_repos=
main_repo_exists=0
testing_repo_exists=0
# Update existing repositories to the new mirror selection
for apkrepo in $APKREPOS; do
case "$apkrepo" in
*${repo}/main*)
new_repo="${mirror}${repo}/main"
main_repo_exists=1
;;
*${repo}/testing*)
new_repo="${mirror}${repo}/testing"
testing_repo_exists=1
;;
*)
new_repo="$apkrepo"
;;
esac
if [ ${#new_repos} -eq 0 ]; then
new_repos="$new_repo"
else
new_repos=`echo -e "$new_repos\n$new_repo"`
fi
done
# Add main repo if not found
if [ $main_repo_exists -eq 0 ]; then
new_repo="${mirror}${repo}/main"
if [ ${#new_repos} -eq 0 ]; then
new_repos="$new_repo"
else
new_repos=`echo -e "$new_repos\n$new_repo"`
fi
fi
# Add (commented out) testing repo if not found
if [ $testing_repo_exists -eq 0 ]; then
new_repo="#${mirror}${repo}/testing"
if [ ${#new_repos} -eq 0 ]; then
new_repos="$new_repo"
else
new_repos=`echo -e "$new_repos\n$new_repo"`
fi
fi
# Update repositories file
echo "$new_repos" > /etc/apk/repositories || (echo "failed." && exit 1)
echo "done."
echo -n "Updating repository indexes... "
apkupdate_errors=`apk update 2>&1 | grep -E "^(WARNING|ERROR)" | sed -r "s/(WARNING|ERROR)/\n\1/g"`
if [ ${#apkupdate_errors} -gt 0 ]; then
echo "$apkupdate_errors"
else
echo "done."
fi
|