157 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
| #!/sbin/runscript
 | |
| # Copyright 2007 Roy Marples
 | |
| # All rights reserved
 | |
| 
 | |
| # Redistribution and use in source and binary forms, with or without
 | |
| # modification, are permitted provided that the following conditions
 | |
| # are met:
 | |
| # 1. Redistributions of source code must retain the above copyright
 | |
| #    notice, this list of conditions and the following disclaimer.
 | |
| # 2. Redistributions in binary form must reproduce the above copyright
 | |
| #    notice, this list of conditions and the following disclaimer in the
 | |
| #    documentation and/or other materials provided with the distribution.
 | |
| #
 | |
| # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 | |
| # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | |
| # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | |
| # ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 | |
| # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | |
| # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | |
| # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | |
| # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | |
| # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | |
| # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | |
| # SUCH DAMAGE.
 | |
| 
 | |
| extra_commands="save show"
 | |
| 
 | |
| description="Sets the local clock to UTC or Local Time." 
 | |
| description_save="Saves the current time in the BIOS."
 | |
| description_show="Displays the current time in the BIOS."
 | |
| 
 | |
| clock_adjfile=${clock_adjfile:-${CLOCK_ADJFILE}}
 | |
| clock_args=${clock_args:-${CLOCK_OPTS}}
 | |
| clock_systohc=${clock_systohc:-${CLOCK_SYSTOHC}}
 | |
| 
 | |
| clock=${clock:-${CLOCK:-UTC}}
 | |
| if [ "${clock}" = "UTC" ]; then
 | |
| 	utc="UTC"
 | |
| 	utc_cmd="--utc"
 | |
| else
 | |
| 	utc="Local Time"
 | |
| 	utc_cmd="--localtime"
 | |
| fi
 | |
| 
 | |
| depend() {
 | |
| 	if yesno ${clock_adjfile}; then
 | |
| 		use checkroot
 | |
| 	else
 | |
| 		before *
 | |
| 	fi
 | |
| }
 | |
| 
 | |
| setupopts() {
 | |
| 	case "${RC_SYS}" in
 | |
| 		UML|VPS|XENU)
 | |
| 			utc="${RC_SYS}"
 | |
| 			;;
 | |
| 		*)
 | |
| 			case "$(uname -m)" in
 | |
| 				s390*)
 | |
| 					utc="s390"
 | |
| 					;;
 | |
| 				*)
 | |
| 					if [ -e /proc/devices ] && grep -q " cobd$" /proc/devices; then
 | |
| 						utc="coLinux"
 | |
| 					fi
 | |
| 					;;
 | |
| 			esac
 | |
| 			;;
 | |
| 	esac
 | |
| 
 | |
| 	case "${utc}" in
 | |
| 		UTC|Local" "Time);;
 | |
| 		*) unset utc_cmd;;
 | |
| 	esac
 | |
| }
 | |
| 
 | |
| # hwclock doesn't always return non zero on error
 | |
| _hwclock() {
 | |
| 	local err="$(hwclock "$@" 2>&1 >/dev/null)"
 | |
| 
 | |
| 	[ -z "${err}" ] && return 0
 | |
| 	echo "${err}" >&2
 | |
| 	return 1
 | |
| }
 | |
| 
 | |
| start() {
 | |
| 	local retval=0 errstr=""
 | |
| 	setupopts
 | |
| 
 | |
| 	if [ -z "${utc_cmd}" ]; then
 | |
| 		ewarn "Not setting clock for ${utc} system"
 | |
| 		return 0
 | |
| 	fi
 | |
| 
 | |
| 	ebegin "Setting system clock using the hardware clock [${utc}]"
 | |
| 	if [ -e /proc/modules -a ! -e /dev/rtc ]; then
 | |
| 		modprobe -q rtc || modprobe -q genrtc
 | |
| 	fi
 | |
| 
 | |
| 	if [ -e /etc/adjtime ] && yesno ${clock_adjfile}; then
 | |
| 		_hwclock --adjust ${utc_cmd}
 | |
| 		retval=$((${retval} + $?))
 | |
| 	fi
 | |
| 	
 | |
| 	# If setting UTC, don't bother to run hwclock when first booting
 | |
| 	# as that's the default
 | |
| 	if [ "${PREVLEVEL}" != "N" -o \
 | |
| 		"${utc_cmd}" != "--utc" -o \
 | |
| 		-n "${clock_args}" ];
 | |
| 	then
 | |
| 		_hwclock --hctosys ${utc_cmd} ${clock_args}
 | |
| 		retval=$((${retval} + $?))
 | |
| 	fi
 | |
| 	
 | |
| 	eend ${retval} "Failed to set the system clock"
 | |
| 
 | |
| 	return 0
 | |
| }
 | |
| 
 | |
| stop() {
 | |
| 	# Don't tweak the hardware clock on LiveCD halt.
 | |
| 	[ -n "${CDBOOT}" ] && return 0
 | |
| 	yesno ${clock_systohc} || return 0
 | |
| 
 | |
| 	local retval=0 errstr=""
 | |
| 	setupopts
 | |
| 
 | |
| 	[ -z "${utc_cmd}" ] && return 0
 | |
| 
 | |
| 	ebegin "Setting hardware clock using the system clock" "[${utc}]"
 | |
| 
 | |
| 	if ! yesno "${clock_adjfile}"; then
 | |
| 		# Some implementations don't handle adjustments
 | |
| 		if LC_ALL=C hwclock --help | grep -q "\-\-noadjfile"; then
 | |
| 			utc_cmd="${utc_cmd} --noadjfile"
 | |
| 		fi
 | |
| 	fi
 | |
| 
 | |
| 	_hwclock --systohc ${utc_cmd} ${clock_args}
 | |
| 	retval=$?
 | |
| 
 | |
| 	eend ${retval} "Failed to sync clocks" 
 | |
| }
 | |
| 
 | |
| save() {
 | |
| 	clock_systohc="yes"
 | |
| 	stop
 | |
| }
 | |
| 
 | |
| show() {
 | |
| 	setupopts
 | |
| 	hwclock --show "${utc_cmd}" ${clock_args} 
 | |
| }
 | |
| 
 | |
| # vim: set ts=4 :
 |