diff options
Diffstat (limited to 'init.d.Linux/clock')
-rwxr-xr-x | init.d.Linux/clock | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/init.d.Linux/clock b/init.d.Linux/clock new file mode 100755 index 00000000..596b18d2 --- /dev/null +++ b/init.d.Linux/clock @@ -0,0 +1,131 @@ +#!/sbin/runscript +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +opts="save" + +depend() { + case "${CLOCK_ADJTIME}" in + "") before *;; + /etc/*) need checkroot;; + *) need localmount;; + esac +} + +setupopts() { + case "${RC_SYS}" in + UML|VPS|XEN) + TBLURB="${RC_SYS}" + fakeit=1 + ;; + *) + case "$(uname -m)" in + s390*) + TBLURB="s390" + fakeit=1 + ;; + *) + if [ -e /proc/devices ] && grep -q " cobd$" /proc/devices ; then + TBLURB="coLinux" + fakeit=1 + elif [ "${CLOCK}" = "UTC" ] ; then + myopts="--utc" + TBLURB="UTC" + else + myopts="--localtime" + TBLURB="Local Time" + fi + ;; + esac + ;; + esac + [ ${fakeit} -eq 1 ] && return 0 + + if [ -z "${CLOCK_ADJTIME}" -o ! -w /etc ] ; then + myadj="--noadjfile" + else + myadj="--adjust" + fi + + [ "${SRM}" = "yes" ] && myopts="${myopts} --srm" + [ "${ARC}" = "arc" ] && myopts="${myopts} --arc" + myopts="${myopts} ${CLOCK_OPTS}" + + # Make sure user isn't using rc.conf anymore. + if grep -q "^CLOCK=" /etc/rc.conf ; then + ewarn $"CLOCK should not be set in /etc/rc.conf but in /etc/conf.d/clock" + fi + + # Make sure people set their timezone ... we do it here + # even though we don't actually use the variable so that + # people see the warning on boot. + if [ "${TIMEZONE-Factory}" = "Factory" ] ; then + ewarn "Your TIMEZONE in /etc/conf.d/clock is still set to Factory!" + fi +} + +start() { + local myopts= myadj= TBLURB= fakeit=0 errstr="" retval=0 + + if [ -x /sbin/hwclock ] ; then + [ -w "${CLOCK_ADJTIME}" ] && echo "0.0 0 0.0" > "${CLOCK_ADJTIME}" + fi + + setupopts + + if [ ${fakeit} -ne 1 -a -e /proc/modules -a ! -e /dev/rtc ] ; then + modprobe rtc 2>/dev/null || modprobe genrtc 2>/dev/null + fi + + ebegin "Setting system clock using the hardware clock" "[${TBLURB}]" + if [ ${fakeit} -eq 1 ] ; then + ret=0 + elif [ -x /sbin/hwclock ] ; then + # Since hwclock always exit's with a 0, need to check its output. + errstr="$(/sbin/hwclock ${myadj} ${myopts} 2>&1 >/dev/null)" + errstr="${errstr}$(/sbin/hwclock --hctosys ${myopts} 2>&1 >/dev/null)" + + if [ -n "${errstr}" ] ; then + ewarn "${errstr}" + ret=1 + else + ret=0 + fi + errstr="Failed to set clock" + else + ret=1 + errstr="/sbin/hwclock not found" + fi + eend ${ret} "${errstr}" "You will need to set the clock yourself" + + return 0 +} + +stop() { + # Don't tweak the hardware clock on LiveCD halt. + [ -n "${CDBOOT}" -o "${CLOCK_SYSTOHC}" != "yes" ] && return 0 + + local myopts= myadj= TBLURB= fakeit=0 errstr="" retval=0 + + setupopts + + ebegin "Setting hardware clock using the system clock" "[${TBLURB}]" + if [ ${fakeit} -eq 1 ] ; then + ret=0 + elif [ -x /sbin/hwclock ] ; then + [ -z "$(/sbin/hwclock --systohc ${myopts} 2>&1 >/dev/null)" ] + ret=$? + errstr="Failed to sync clocks" + else + ret=1 + errstr="/sbin/hwclock not found" + fi + eend ${ret} "${errstr}" +} + +save() { + CLOCK_SYSTOHC="yes" + stop +} + +# vim: set ts=4 : |