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 : | 
