Well, here is what I ended up with. I've already packaged it. The reson for writing this script is, that the user don't have to deal with the userunfriendly posixtz format.
The problem is that I can't figure out how to write the posixtz value to /etc/config/timezone using a UCI function. Probably writing to config files with a UCI function isn't implemented (I didn't get an answer from nbd on IRC) config_set doesn't seem to work. If anyone know how to fix this reply here.
Listing the timezones with '/etc/init.d/timezone list' and setting it with 'uci set timezone.cfg1.zoneinfo=Europe/Berlin' and writing to /etc/TZ with '/etc/init.d/timezone start' works well.
Index: packages/utils/timezone/files/usr/lib/timezones.csv
===================================================================
--- packages/utils/timezone/files/usr/lib/timezones.csv (revision 0)
+++ packages/utils/timezone/files/usr/lib/timezones.csv (revision 0)
@@ -0,0 +1,114 @@
+#timezone group timezone cities timezone config string zoneinfo
+#revision: 2007f
+# it is not exact for the "cities list" but it enables to remember
+# the selection and to synchronize TZs with the standard zoneinfo
+Australia Melbourne,Canberra,Sydney EST-10EST,M10.5.0,M3.5.0/3 Australia/Melbourne
+Australia Perth WST-8 Australia/Perth Perth
+Australia Brisbane EST-10 Australia/Brisbane
+Australia Adelaide CST-9:30CST,M10.5.0,M3.5.0/3 Australia/Adelaide
+Australia Darwin CST-9:30 Australia/Darwin
+Australia Hobart EST-10EST,M10.1.0,M3.5.0/3 Australia/Hobart
+
+Europe Amsterdam,Netherlands CET-1CEST,M3.5.0,M10.5.0/3 Europe/Amsterdam
+Europe Athens,Greece EET-2EEST,M3.5.0/3,M10.5.0/4 Europe/Athens
+Europe Berlin,Germany CET-1CEST,M3.5.0,M10.5.0/3 Europe/Berlin
+Europe Brussels,Belgium CET-1CEST,M3.5.0,M10.5.0/3 Europe/Brussels
+Europe Bratislava,Slovakia CET-1CEST,M3.5.0,M10.5.0/3 Europe/Bratislava
+Europe Budapest,Hungary CET-1CEST,M3.5.0,M10.5.0/3 Europe/Budapest
+Europe Copenhagen,Denmark CET-1CEST,M3.5.0,M10.5.0/3 Europe/Copenhagen
+Europe Dublin,Ireland GMT0IST,M3.5.0/1,M10.5.0 Europe/Dublin
+Europe Helsinki,Finland EET-2EEST,M3.5.0/3,M10.5.0/4 Europe/Helsinki
+Europe Kyiv,Ukraine EET-2EEST,M3.5.0/3,M10.5.0/4 Europe/Kiev
+Europe Lisbon,Portugal WET0WEST,M3.5.0/1,M10.5.0 Europe/Lisbon
+Europe London,GreatBritain GMT0BST,M3.5.0/1,M10.5.0 Europe/London
+Europe Madrid,Spain CET-1CEST,M3.5.0,M10.5.0/3 Europe/Madrid
+Europe Oslo,Norway CET-1CEST,M3.5.0,M10.5.0/3 Europe/Oslo
+Europe Paris,France CET-1CEST,M3.5.0,M10.5.0/3 Europe/Paris
+Europe Prague,CzechRepublic CET-1CEST,M3.5.0,M10.5.0/3 Europe/Prague
+Europe Roma,Italy CET-1CEST,M3.5.0,M10.5.0/3 Europe/Rome
+Europe Moscow,Russia MSK-3MSD,M3.5.0,M10.5.0/3 Europe/Moscow
+Europe Stockholm,Sweden CET-1CEST,M3.5.0,M10.5.0/3 Europe/Stockholm
+Europe Zurich,Switzerland CET-1CEST,M3.5.0,M10.5.0/3 Europe/Zurich
+
+New Zealand Auckland, Wellington NZST-12NZDT,M10.1.0,M3.3.0/3 Pacific/Auckland
+
+USA & Canada Hawaii Time HST10 Pacific/Honolulu
+USA & Canada Alaska Time AKST9AKDT,M3.2.0,M11.1.0 America/Anchorage
+USA & Canada Pacific Time PST8PDT,M3.2.0,M11.1.0 America/Los_Angeles
+USA & Canada Mountain Time MST7MDT,M3.2.0,M11.1.0 America/Denver
+USA & Canada Mountain Time (Arizona, no DST) MST7 America/Phoenix
+USA & Canada Central Time CST6CDT,M3.2.0,M11.1.0 America/Chicago
+USA & Canada Eastern Time EST5EDT,M3.2.0,M11.1.0 America/New_York
+
+Atlantic Bermuda AST4ADT,M3.2.0,M11.1.0 Atlantic/Bermuda
+
+Asia (UTC+1) Anadyr ANAT-12ANAST,M3.5.0,M10.5.0/3 Asia/Anadyr
+
+Asia (UTC+2) Amman EET-2EEST,M3.5.4/0,M10.5.5/1 Asia/Amman
+Asia (UTC+2) Beirut EET-2EEST,M3.5.0/0,M10.5.0/0 Asia/Beirut
+Asia (UTC+2) Damascus EET-2EEST,J91/0,J274/0 Asia/Damascus
+Asia (UTC+2) Gaza EET-2EEST,J91/0,M10.3.5/0 Asia/Gaza
+Asia (UTC+2) Jerusalem GMT-2 Asia/Jerusalem
+Asia (UTC+2) Nicosia EET-2EEST,M3.5.0/3,M10.5.0/4 Asia/Nicosia
+
+Asia (UTC+3) Aden AST-3 Asia/Aden
+Asia (UTC+3) Baghdad AST-3ADT,J91/3,J274/4 Asia/Baghdad
+Asia (UTC+3) Bahrain AST-3 Asia/Bahrain
+Asia (UTC+3) Kuwait AST-3 Asia/Kuwait
+Asia (UTC+3) Qatar AST-3 Asia/Qatar
+Asia (UTC+3) Riyadh AST-3 Asia/Riyadh
+
+Asia (UTC+3:30) Tehran IRST-3:30 Asia/Tehran
+
+Asia (UTC+4) Baku AZT-4AZST,M3.5.0/4,M10.5.0/5 Asia/Baku
+Asia (UTC+4) Dubai GST-4 Asia/Dubai
+Asia (UTC+4) Muscat GST-4 Asia/Muscat
+Asia (UTC+4) Tbilisi GET-4 Asia/Tbilisi
+Asia (UTC+4) Yerevan AMT-4AMST,M3.5.0,M10.5.0/3 Asia/Yerevan
+
+Asia (UTC+4:30) Kabul AFT-4:30 Asia/Kabul
+
+Asia (UTC+5) Aqtobe AQTT-5 Asia/Aqtobe
+Asia (UTC+5) Ashgabat TMT-5 Asia/Ashgabat
+Asia (UTC+5) Dushanbe TJT-5 Asia/Dushanbe
+Asia (UTC+5) Karachi PKT-5 Asia/Karachi
+Asia (UTC+5) Oral ORAT-5 Asia/Oral
+Asia (UTC+5) Samarkand UZT-5 Asia/Samarkand
+Asia (UTC+5) Tashkent UZT-5 Asia/Tashkent
+Asia (UTC+5) Yekaterinburg YEKT-5YEKST,M3.5.0,M10.5.0/3 Asia/Yekaterinburg
+
+Asia (UTC+5:30) Calcutta IST-5:30 Asia/Calcutta
+Asia (UTC+5:30) Colombo IST-5:30 Asia/Colombo
+
+Asia (UTC+6) Almaty ALMT-6 Asia/Almaty
+Asia (UTC+6) Bishkek KGT-6 Asia/Bishkek
+Asia (UTC+6) Dhaka BDT-6 Asia/Dhaka
+Asia (UTC+6) Novosibirsk NOVT-6NOVST,M3.5.0,M10.5.0/3 Asia/Novosibirsk
+Asia (UTC+6) Omsk OMST-6OMSST,M3.5.0,M10.5.0/3 Asia/Omsk
+Asia (UTC+6) Qyzylorda QYZT-6 Asia/Qyzylorda
+Asia (UTC+6) Thimphu BTT-6 Asia/Thimphu
+
+Asia (UTC+7) Jakarta WIT-7 Asia/Jakarta
+Asia (UTC+7) Bangkok ICT-7 Asia/Bangkok
+Asia (UTC+7) Vientiane ICT-7 Asia/Vientiane
+Asia (UTC+7) Phnom Penh ICT-7 Asia/Phnom_Penh
+
+Asia (UTC+8) Chongqing CST-8 Asia/Chongqing
+Asia (UTC+8) Hong Kong HKT-8 Asia/Hong_Kong
+Asia (UTC+8) Shanghai CST-8 Asia/Shanghai
+Asia (UTC+8) Singapore SGT-8 Asia/Singapore
+Asia (UTC+8) Urumqi CST-8 Asia/Urumqi
+Asia (UTC+8) Taiwan CST-8 Asia/Taipei
+Asia (UTC+8) Ulaanbaatar ULAT-8 Asia/Ulaanbaatar
+
+Asia (UTC+9) Dili TLT-9 Asia/Dili
+Asia (UTC+9) Jayapura EIT-9 Asia/Jayapura
+Asia (UTC+9) Pyongyang KST-9 Asia/Pyongyang
+Asia (UTC+9) Seoul KST-9 Asia/Seoul
+Asia (UTC+9) Tokyo JST-9 Asia/Tokyo
+Asia (UTC+9) Yakutsk YAKT-9YAKST,M3.5.0,M10.5.0/3 Asia/Yakutsk
+
+Central and South America Sao Paulo,Brazil BRT3BRST,M11.1.0/0,M2.5.0/0 America/Sao_Paulo
+Central and South America Argentina ART3 America/Argentina/Buenos_Aires
+# no offense, just something in the center
+Central and South America Central America (no DST) CST6 America/Guatemala
Index: packages/utils/timezone/files/etc/config/timezone
===================================================================
--- packages/utils/timezone/files/etc/config/timezone (revision 0)
+++ packages/utils/timezone/files/etc/config/timezone (revision 0)
@@ -0,0 +1,4 @@
+config timezone
+ option posixtz ''
+ option zoneinfo ''
+ option etctz '/etc/TZ'
Index: packages/utils/timezone/files/etc/init.d/timezone
===================================================================
--- packages/utils/timezone/files/etc/init.d/timezone (revision 0)
+++ packages/utils/timezone/files/etc/init.d/timezone (revision 0)
@@ -0,0 +1,56 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2006 OpenWrt.org
+START=11
+
+EXTRA_COMMANDS="list"
+EXTRA_HELP=" list Lists available time zones"
+
+TIMEZONE_TABLE=/usr/lib/timezones.csv
+
+get_posix_timezone () {
+ awk -v timezoneinfo="$zoneinfo" 'BEGIN { FS = " " }
+ /^(#.*)?$/ { next }
+ { list_timezone = $4; if ( list_timezone == timezoneinfo ) { print $3 } }
+ END { }' < $TIMEZONE_TABLE 2>/dev/null
+}
+
+list_available_timezones () {
+ awk 'BEGIN { FS = " "; last_group="" }
+ /^(#.*)?$/ { next }
+ $1 != last_group { last_group=$1; print "\n" $1 }
+ { list_timezone = $4; print " " list_timezone }
+ END { }' < $TIMEZONE_TABLE 2>/dev/null
+}
+
+start_service () {
+ local section="$1"
+ config_get posixtz "$section" posixtz
+ config_get zoneinfo "$section" zoneinfo
+ config_get etctz "$section" etctz
+
+ if [ ! -h "$etctz" ]; then
+ ln -sf /tmp/TZ "$etctz"
+ fi
+ [ -n "$zoneinfo" ] && get_posix_timezone "$zoneinfo" > "$etctz" || echo "UTC+0" > "$etctz"
+
+ # config_set
+ # posixtz=get_posix_timezone "$zoneinfo"
+
+ config_set "timezone" "posixtz" "foobar"
+}
+
+start () {
+ config_load "timezone"
+ config_foreach start_service timezone
+}
+
+restart () {
+ start
+}
+
+list () {
+ echo "Available time zones"
+ echo "--------------------"
+
+ list_available_timezones
+}
Index: packages/utils/timezone/Makefile
===================================================================
--- packages/utils/timezone/Makefile (revision 0)
+++ packages/utils/timezone/Makefile (revision 0)
@@ -0,0 +1,43 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+# $Id$
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=timezone
+PKG_VERSION:=1.0
+PKG_RELEASE:=1
+
+PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/timezone
+ SECTION:=utils
+ CATEGORY:=Base system
+ TITLE:=Configure the time zone
+endef
+
+define Build/Prepare
+endef
+
+define Build/Configure
+endef
+
+define Build/Compile
+endef
+
+define Package/timezone/install
+ $(INSTALL_DIR) $(1)/etc/config
+ $(INSTALL_CONF) ./files/etc/config/timezone $(1)/etc/config
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_BIN) ./files/etc/init.d/timezone $(1)/etc/init.d
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(INSTALL_DATA) ./files/usr/lib/timezones.csv $(1)/usr/lib
+endef
+
+$(eval $(call BuildPackage,timezone))