summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'init.d.Linux/clock')
-rwxr-xr-xinit.d.Linux/clock131
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 :