]> git.pld-linux.org Git - packages/tzdata.git/blobdiff - timezone.init
do not own tzdata dir by two packages; refs 2141fdb
[packages/tzdata.git] / timezone.init
old mode 100644 (file)
new mode 100755 (executable)
index 2b4759a..716a1fd
@@ -3,9 +3,7 @@
 # timezone     Set time zone information.
 # chkconfig:   2345 10 90
 # description: This script is setting time zone information for your machine.
-# Author:      Pawel Wilk <siefca@pld-linux.org>
 #
-# $Id$
 
 [ -f /etc/sysconfig/timezone ] || exit 0
 
@@ -20,42 +18,55 @@ if [ -n "$ZONE_INFO_SCHEME" -a "$ZONE_INFO_SCHEME" != "posix" ]; then
        ZONE_FILE="$ZONE_FILE/$ZONE_INFO_SCHEME"
 fi
 
-if [ -n "$ZONE_INFO_AREA" ]; then
-       ZONE_FILE="$ZONE_FILE/$ZONE_INFO_AREA"
-fi
-
-ZONE_FILE="$ZONE_FILE/$TIME_ZONE"
+ZONE_FILE="$ZONE_FILE/$TIMEZONE"
 
 [ -L /etc/localtime ] && [ "$(resolvesymlink /etc/localtime)" = "$ZONE_FILE" ] && exit 0
 
 start() {
-       if [ ! -f /var/lock/subsys/timezone ]; then
-               if [ -f "$ZONE_FILE" ]; then
-                       rm -f /etc/localtime
-
-                       if [ -n "$ZONE_INFO_AREA" ]; then
-                               MESSAGE="`nls 'Setting time zone information (%s, %s)' "$ZONE_INFO_AREA" "$TIME_ZONE"`"
-                       else
-                               MESSAGE="`nls 'Setting time zone information (%s)' "$TIME_ZONE"`"
-                       fi
-                       run_cmd "$MESSAGE" cp -af $ZONE_FILE /etc/localtime
-                       RETVAL=$?
-               fi
+       if [ -f /var/lock/subsys/timezone ]; then
+               msg_already_running timezone
+               return
+       fi
+
+       if [ -f "$ZONE_FILE" ]; then
+               rm -f /etc/localtime
 
-               [ $RETVAL -eq 0 ] && touch /var/lock/subsys/timezone
+               MESSAGE=$(nls 'Setting time zone information (%s)' "$TIMEZONE")
+
+               if [ -n "$(awk '$2 == "/usr" { print $2 }' /proc/mounts 2> /dev/null)" ]; then
+                       run_cmd "$MESSAGE" cp -af "$ZONE_FILE" /etc/localtime
+               else
+                       run_cmd "$MESSAGE" ln -sf "$ZONE_FILE" /etc/localtime
+               fi
+               RETVAL=$?
+               restorecon /etc/localtime >/dev/null 2>&1
+       else
+               show "Missing %s file" "$ZONE_FILE"
+               fail
+               RETVAL=2
        fi
+
+       [ $RETVAL -eq 0 ] && touch /var/lock/subsys/timezone
 }
 
 stop() {
-       if [ -f /var/lock/subsys/timezone ]; then
-               rm -f /var/lock/subsys/timezone
-       fi
+       rm -f /var/lock/subsys/timezone >/dev/null 2>&1
 }
 
 disable() {
        run_cmd "Unsetting time zone information" rm -f /etc/localtime
 }
 
+# return true if FILE1 and FILE2 are identical
+identical() {
+       local crc1 crc2
+       test -f "$1" || return 1
+       test -f "$2" || return 1
+       crc1=$(cksum "$1" | awk '{print $1}')
+       crc2=$(cksum "$2" | awk '{print $1}')
+       [ "$crc1" = "$crc2" ]
+}
+
 RETVAL=0
 # See how we were called.
 case "$1" in
@@ -63,7 +74,7 @@ case "$1" in
        start
        ;;
   stop)
-       stop
+       stop
        ;;
   restart|try-restart|reload|force-reload)
        stop
@@ -73,10 +84,13 @@ case "$1" in
        disable
        ;;
   status)
-       if [ -n "$ZONE_INFO_AREA" ]; then
-               nls 'Time zone configured to (%s, %s)' "$ZONE_INFO_AREA" "$TIME_ZONE"
-       else
-               nls 'Time zone configured to (%s)' "$TIME_ZONE"
+       nls 'Timezone is configured to %s' "$TIMEZONE"
+       if [ ! -f "$ZONE_FILE" ]; then
+               nls "Missing %s file" "$ZONE_FILE"
+               exit 1
+       elif ! identical "$ZONE_FILE" /etc/localtime; then
+               nls 'Current time zone differs from %s' "$TIMEZONE"
+               exit 1
        fi
        ;;
   *)
This page took 0.035014 seconds and 4 git commands to generate.