home *** CD-ROM | disk | FTP | other *** search
- #! /bin/sh
- #
- # Copyright (c) 2001-2002 SuSE Linux AG, Nuernberg, Germany.
- # All rights reserved.
- #
- # /etc/init.d/boot.clock
- #
- ### BEGIN INIT INFO
- # Provides: boot.clock
- # Required-Start: boot.rootfsck
- # Should-Start: boot.localfs
- # Default-Start: B S
- # Default-Stop:
- # Description: Read or set hardware clock
- ### END INIT INFO
-
- . /etc/rc.status
- . /etc/sysconfig/clock
- rc_reset
-
- case "$1" in
- start|restart)
- #
- # mkinitrd will set this variable if the system time was older than
- # the mkinitrd.rpm build time.
- if test "$SYSTEM_TIME_INCORRECT" != "" ; then
- echo -n "The system time was incorrect: '$SYSTEM_TIME_INCORRECT'"
- rc_status -s
- rc_exit
- fi
- # Set and adjust the hardware clock
- #
- if test "$HOSTTYPE" = "s390" -o "$HOSTTYPE" = "s390x" ; then
-
- echo -n Setting up the system clock
-
- # On s390 the hwclock is set outside Linux currently. The kernel
- # always assumes it to be set to UTC. So if it is set to local
- # time, we have to compensate for that. We might achieve this
- # using this special settimeofday(2) linux feature:
- # Under Linux there is some peculiar `warp clock' semantics
- # associated to the settimeofday system call if on the very
- # first call (after booting) that has a non-NULL tz argu-
- # ment, the tv argument is NULL and the tz_minuteswest field
- # is nonzero. In such a case it is assumed that the CMOS
- # clock is on local time, and that it has to be incremented
- # by this amount to get UTC system time. No doubt it is a
- # bad idea to use this feature. (settimeofday(2) man page)
- # But unless someone complains we simply will use date(1) to shift
- # the system time by the difference between UTC and local time, if
- # the system clock is set to local time. This will introduce a
- # minimal shift due to the delay between gettimeofday and
- # settimeofday, and it only works as long as $0 is executed
- # exactly once, at boot.
-
- if test "$HWCLOCK" != "-u"; then
- date $(date -u +'%m%d%H%M%Y.%S')
- rc_status
- fi
- #
- # Let zic set timezone - if present.
- #
- if test -n "$TIMEZONE" -a -x /usr/sbin/zic ; then
- echo -n Setting up timezone data
- /usr/sbin/zic -l $TIMEZONE
- rc_status
- fi
-
- rc_status -v -r
- else
-
- echo -n Setting up the hardware clock
-
- if test "$SYSTOHC" = "yes" ; then
- #
- # We write back the system time later at
- # reboot/shutdown time.
- #
- if test ! -f /etc/adjtime ; then
- echo "0.0 0 0" > /etc/adjtime
- echo "0" >> /etc/adjtime
- case "$HWCLOCK" in
- *-u*) echo "UTC" >> /etc/adjtime ;;
- *-l*) echo "LOCAL" >> /etc/adjtime ;;
- esac
- fi
- /sbin/hwclock --adjust $HWCLOCK
- rc_status
- /sbin/hwclock --hctosys $HWCLOCK
- rc_status
- else
- /sbin/hwclock --hctosys --noadjfile $HWCLOCK
- fi
-
- rc_status -v -r
- fi
- ;;
- stop)
- if test "$HOSTTYPE" != "s390" -a "$HOSTTYPE" != "s390x" ; then
- if test "$SYSTOHC" = "yes" ; then
- echo -n "Set Hardware Clock to the current System Time"
- #
- # Write back to hardware clock and calculate adjtime
- #
- /sbin/hwclock --systohc $HWCLOCK
- rc_status -v -r
- fi
- fi
- ;;
- status)
- rc_failed 4
- rc_status -v
- ;;
- *)
- echo "Usage: $0 {start|stop|status|restart}"
- exit 1
- ;;
- esac
-
- rc_exit
-