setup-timezone.in 2.33 KB
Newer Older
1 2 3 4 5 6
#!/bin/sh

PREFIX=
. "$PREFIX/lib/libalpine.sh"


Natanael Copa's avatar
Natanael Copa committed
7
zroot=/usr/share/zoneinfo
8

9 10
usage() {
        cat <<__EOF__
11
usage: setup-timezone [-h] [-k|-i] [-z subdir of $zroot]
12 13 14 15 16

Sets the timezone for the system.

options:
 -h  Show this help
17 18
 -i  Install tzdata and symlink instead of making a copy
 -k  Keep previous copies of tzdata
19
 -z  Specify the timezone as a subdirectory of $zroot
20 21 22 23
__EOF__
        exit 1
}

Natanael Copa's avatar
Natanael Copa committed
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
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 )
}

42
setup_tz() {
43
	local zonepath="$1"
44
	mkdir -p "${ROOT}"etc/zoneinfo
45 46 47 48 49 50 51 52 53 54 55 56 57
	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/zoneinfo/localtime
	ln -s "$zonepath" "${ROOT}"etc/zoneinfo/localtime
Natanael Copa's avatar
Natanael Copa committed
58 59
}

60 61 62
INSTALL_TZDATA=false
KEEP_TZDATA=false
while getopts "hikz:" opt; do
63 64
        case $opt in
                h) usage;;
65 66
		i) INSTALL_TZDATA=true;;
		k) KEEP_TZDATA=true;;
67
		z) ZONEINFODIR="$OPTARG";;
68 69 70
        esac
done

71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
if $INSTALL_TZDATA; then
	pkg=tzdata
	apkdel=
else
	pkg="--virtual .setup-timezone tzdata"
	apkdel=".setup-timezone"
fi

apk add --quiet $pkg

if [ -L "${ROOT}"etc/zoneinfo/localtime ]; then
	zonepath=$(readlink "${ROOT}"etc/zoneinfo/localtime)
	zonepath=${zonepath#*/zoneinfo/}
else
	zonepath=UTC
Natanael Copa's avatar
Natanael Copa committed
86 87 88 89
fi


while true; do
90
	if [ -n "$ZONEINFODIR" ]; then
91
		setup_tz "$ZONEINFODIR"
92 93 94
		break
	fi

95
	echo -n "Which timezone are you in? ('?' for list) [$zonepath] "
Natanael Copa's avatar
Natanael Copa committed
96 97 98 99
	default_read zonepath "$zonepath"
	case "$zonepath" in
	"") continue;;
	"?") show_tz_list; continue;;
100
	esac
Natanael Copa's avatar
Natanael Copa committed
101 102

	while [ -d "$zroot/$zonepath" ]; do
Yves Schumann's avatar
Yves Schumann committed
103 104
		zone=
		echo -n "What sub-timezone of '$zonepath' are you in? ('?' for list) "
Natanael Copa's avatar
Natanael Copa committed
105 106 107 108 109 110 111
		default_read zone
		case "$zone" in
		"?") show_tz_list "$zonepath"; continue;;
		esac
		zonepath="$zonepath/$zone"
	done

112 113
	if [ -f "$zroot/$zonepath" ]; then
		setup_tz "$zroot/$zonepath"
Natanael Copa's avatar
Natanael Copa committed
114 115
		break
	fi
116
	echo "'$zonepath' is not a valid timezone on this system"
Natanael Copa's avatar
Natanael Copa committed
117 118 119
done

if [ -n "$apkdel" ]; then
120
	apk del --quiet $apkdel
121 122
fi