summaryrefslogtreecommitdiff
path: root/init.d.Linux/clock
blob: e5b70390fd84170285e14e84221513fbd328cf31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/sbin/runscript
# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

opts="save show"

description="Sets the local clock to UTC or Local Time." 
description_save="Saves the current time in the BIOS."

depend() {
	if [ "${CLOCK_ADJFILE}" = "yes" ]; then
		use checkroot
	else
		before *
	fi
}

setupopts() {
	utc=
	case "${RC_SYS}" in
		UML|VPS|XEN)
			TBLURB="${RC_SYS}"
			;;
		*)
			case "$(uname -m)" in
				s390*)
					TBLURB="s390"
					;;
				*)
					if [ -e /proc/devices ] && grep -q " cobd$" /proc/devices ; then
						TBLURB="coLinux"
					elif [ "${CLOCK}" = "UTC" ] ; then
						utc="--utc"
						TBLURB="UTC"
					else
						utc="--localtime"
						TBLURB="Local Time"
					fi
					;;
			esac
			;;
	esac
	[ -n "${utc}" ] || return 0
	
	# Make sure user isn't using rc.conf anymore.
	if [ -e /etc/rc.conf ] && \
	[ -n "$(unset CLOCK; . /etc/rc.conf; echo "${CLOCK}")" ] ; 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 [ -z "${CDBOOT}" -a "${TIMEZONE-Factory}" = "Factory" ] ; then
		ewarn "Your TIMEZONE in /etc/conf.d/clock is still set to Factory!"
	fi
}

start() {
	local utc= TBLURB= errstr="" retval=0
	
	setupopts

	ebegin "Setting system clock using the hardware clock [${TBLURB}]"
	if [ -n "${utc}" ]; then
		if [ -e /proc/modules -a ! -e /dev/rtc ] ; then
			modprobe -q rtc || modprobe -q genrtc
		fi

		# Since hwclock always exit's with a 0, need to check its output.
		if [ -e /etc/adjtime -a "${CLOCK_ADJFILE}" = "yes" ]; then
			errstr="$(hwclock --adjust ${utc} 2>&1 >/dev/null)"
		fi
		# If setting UTC, don't bother to run hwclock when first booting
		# as that's the default
		if [ "${PREVLEVEL}" != "N" -o "${utc}" != "--utc" -o -n "${CLOCK_OPTS}" ]; then
			errstr="${errstr}$(hwclock --hctosys ${utc} ${CLOCK_OPTS} 2>&1 >/dev/null)"
		fi
	fi
	if [ -n "${errstr}" ]; then
		ewarn "${errstr}"
		retval=1
	fi
	errstr="Failed to set clock"
	eend ${retval} "${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 utc= TBLURB= errstr="" retval=0

	setupopts

	ebegin "Setting hardware clock using the system clock" "[${TBLURB}]"
	if [ -n "${utc}" ]; then
		if [ "${CLOCK_ADJFILE}" != "yes" ]; then
			# If we have adjtimex then we're probably busybox
			if ! type adjtimex >/dev/null 2>&1; then
				utc="${utc} --noadjfile"
			fi
		fi
		errstr="$(LC_ALL=C hwclock --systohc ${utc} ${CLOCK_OPTS} 2>&1 >/dev/null)"
	fi
	if [ -n "${errstr}" ] ; then
		ewarn "${errstr}"
		retval=1
	fi
	errstr="Failed to sync clocks"
	eend ${retval} "${errstr}"
}

save() {
	CLOCK_SYSTOHC="yes"
	stop
}

show() {
	local utc= TBLURB=
	setupopts
	/sbin/hwclock --show "${utc}" ${CLOCK_OPTS}
}

# vim: set ts=4 :