141 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
| #!/sbin/runscript
 | |
| # Copyright 2007-2008 Roy Marples
 | |
| # All rights reserved
 | |
| 
 | |
| 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} 
 | |
| }
 |