# 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
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 -afc $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
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
+ ;;
*)
- msg_usage "$0 {start|stop|restart|reload|disable}"
+ msg_usage "$0 {start|stop|restart|try-restart|reload|force-reload|disable|status}"
exit 3
esac