]> 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 cb31fd1..716a1fd
@@ -1,16 +1,15 @@
 #!/bin/sh
 #
 # timezone     Set time zone information.
-# chkconfig:   2345 10 70
+# 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
 
 # Source function library.
 . /etc/rc.d/init.d/functions
 
-[ ! -f /etc/sysconfig/timezone ] && exit 0
 . /etc/sysconfig/timezone
 
 ZONE_FILE="$ZONE_INFO_DIR"
@@ -19,36 +18,53 @@ 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 -a "`resolvesymlink /etc/localtime`" = "$ZONE_FILE" ] && exit 0
+[ -L /etc/localtime ] && [ "$(resolvesymlink /etc/localtime)" = "$ZONE_FILE" ] && exit 0
 
 start() {
-       if [ ! -f /var/lock/subsys/timezone ]; then
+       if [ -f /var/lock/subsys/timezone ]; then
+               msg_already_running timezone
+               return
+       fi
+
+       if [ -f "$ZONE_FILE" ]; then
                rm -f /etc/localtime
-               if [ -f "$ZONE_FILE" ]; then
-                       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
 
-               [ $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
-               run_cmd "Unsetting time zone information" rm -f /etc/localtime
-               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
@@ -58,17 +74,28 @@ case "$1" in
        start
        ;;
   stop)
-       stop
+       stop
        ;;
-  restart|reload)
+  restart|try-restart|reload|force-reload)
        stop
        start
        ;;
+  disable)
+       disable
+       ;;
+  status)
+       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
+       ;;
   *)
-       echo "Usage: $0 {start|stop|restart|reload}"
+       msg_usage "$0 {start|stop|restart|try-restart|reload|force-reload|disable|status}"
        exit 3
 esac
 
-unset ZONE_FILE ZONE_INFO_DIR ZONE_INFO_SCHEME ZONE_INFO_AREA TIME_ZONE MESSAGE
-
 exit $RETVAL
This page took 0.0317 seconds and 4 git commands to generate.