blob: 5c5b139db56feb59303a7514f02e56c256a0692b (
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
|
#!/bin/sh
PREFIX=@PREFIX@
: ${LIBDIR=$PREFIX/lib}
. "$LIBDIR/libalpine.sh"
zroot="$ROOT"/usr/share/zoneinfo
usage() {
cat <<-__EOF__
usage: setup-timezone [-h] [-k|-i] [TIMEZONE]
Sets the timezone for the system.
options:
-h Show this help
-i Install tzdata and symlink instead of making a copy
-k Keep previous copies of tzdata
TIMEZONE is relative $zroot.
If TIMEZONE is not specified user will be prompted.
__EOF__
exit $1
}
show_tz_list() {
local i z= list=
local path="$zroot/$1"
[ -d "$path" ] || return 1
for i in $(find $path -maxdepth 1); do
case $i in
*.tab|*/) continue;;
esac
if [ -d "$i" ]; then
z="$z ${i##*/}/"
else
z="$z ${i##*/}"
fi
done
( cd $path && ls --color=never -Cd $z )
}
setup_tz() {
local zonepath="$1"
mkdir -p "${ROOT}"etc/zoneinfo
if ! $INSTALL_TZDATA; then
local zone="${zonepath#*/zoneinfo/}"
local zdir="${zonepath%/*}"/
zdir="${zdir#*/zoneinfo/}"
if ! $KEEP_TZDATA; then
rm -r "${ROOT}"/etc/zoneinfo
fi
mkdir -p "${ROOT}"etc/zoneinfo/$zdir
cp "$zonepath" "${ROOT}"etc/zoneinfo/$zdir/
zonepath=/etc/zoneinfo/$zone
fi
rm -f "${ROOT}"etc/localtime
ln -s "$zonepath" "${ROOT}"etc/localtime
}
INSTALL_TZDATA=false
KEEP_TZDATA=false
while getopts "hikz:" opt; do
case $opt in
h) usage 0;;
i) INSTALL_TZDATA=true;;
k) KEEP_TZDATA=true;;
z) ZONE="$OPTARG";; # backwards compat
'?') usage "1" >&2;;
esac
done
shift $(( $OPTIND - 1))
if [ -z "$ZONE" ]; then
ZONE="$1"
fi
if [ "$ZONE" = "none" ]; then
exit 0
fi
if $INSTALL_TZDATA; then
pkg=tzdata
apkdel=
else
pkg="--force --virtual .setup-timezone tzdata"
apkdel=".setup-timezone"
fi
$MOCK apk add --quiet $pkg
if [ -L "${ROOT}"etc/zoneinfo/localtime ]; then
default_timezone=$(readlink "${ROOT}"etc/zoneinfo/localtime)
default_timezone=${timezone#*/zoneinfo/}
else
default_timezone=UTC
fi
while true; do
if [ -n "$ZONE" ]; then
setup_tz "$zroot"/"$ZONE"
break
fi
ask "Which timezone are you in? ('?' for list)" "$default_timezone"
timezone="$resp"
case "$timezone" in
"") continue;;
"?") show_tz_list; continue;;
esac
while [ -d "$zroot/$timezone" ]; do
ask "What sub-timezone of '$timezone' are you in? ('?' for list)"
zone="$resp"
case "$zone" in
"?") show_tz_list "$timezone"; continue;;
esac
default_timezone="$timezone"
timezone="$timezone/$zone"
done
if [ -f "$zroot/$timezone" ]; then
setup_tz "$zroot/$timezone"
break
fi
echo "'$timezone' is not a valid timezone on this system"
done
if [ -n "$apkdel" ]; then
$MOCK apk del --quiet $apkdel
fi
|