#!/bin/sh PREFIX= . "$PREFIX/lib/libalpine.sh" zroot=/usr/share/zoneinfo usage() { cat <<__EOF__ usage: setup-timezone [-h] [-p posixtz format] [-z subfolder of $zroot] Sets the timezone for the system. options: -h Show this help -p Specify the timezone in PosixTZ format -z Specify the timezone as a subfolder of $zroot __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 ) } valid_tz() { find $zroot -type f -a -not -name '*.tab' -a -not -name 'Factory' \ | xargs posixtz | sort | uniq | grep -q -w "$1" } while getopts "hp:z:" opt; do case $opt in h) usage;; p) POSIXTZ="$OPTARG";; t) ZONEINFOFOLDER="$OPTARG";; esac done if ! apk info -q -e tzdata; then apk add -q tzdata && apkdel="tzdata" || exit 1 fi zonepath=$(cat /etc/TZ 2>/dev/null) [ -z "$zonepath" ] && zonepath="UTC" while true; do if [ -n "$POSIXTZ" ]; then echo $POSIXTZ > /etc/TZ || rm -f /etc/TZ break fi if [ -n "$ZONEINFOFOLDER" ]; then TZ=$(posixtz "$ZONEINFOFOLDER") || echo "Failed to convert '$ZONEINFOFOLDER' to POSIX TZ" if [ -n "$TZ" ]; then echo $TZ > /etc/TZ || rm -f /etc/TZ fi break fi echo -n "Which timezone are you in? ('?' for list) [$zonepath] " default_read zonepath "$zonepath" case "$zonepath" in "") continue;; "?") show_tz_list; continue;; esac while [ -d "$zroot/$zonepath" ]; do zone= echo -n "What sub-timezone of '$zonepath' are you in? ('?' for list) " default_read zone case "$zone" in "?") show_tz_list "$zonepath"; continue;; esac zonepath="$zonepath/$zone" done TZ= if valid_tz "$zonepath"; then TZ="$zonepath" elif [ -f "$zroot/$zonepath" ]; then TZ=$(posixtz "$zroot/$zonepath") \ || echo "Failed to convert '$zroot/$zonepath' to POSIX TZ" fi if [ -n "$TZ" ]; then echo $TZ > /etc/TZ || rm -f /etc/TZ break fi echo "'$zonepath' is not a valid timezone on this system" done if [ -n "$apkdel" ]; then apk del -q $apkdel fi