blob: 75910808943e2f7c50bda8a7f749b59fedc7cdb6 (
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
128
129
130
131
132
133
134
135
136
137
|
#!/sbin/runscript
# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
opts="save"
description="Sets the local clock to UTC or Local Time."
description_save="Saves the current time in the BIOS."
depend() {
case "${CLOCK_ADJTIME}" in
""|no) before *;;
/etc/*|yes) need checkroot;;
*) need localmount;;
esac
}
setupopts() {
myopts=
case "${CLOCK_ADJTIME}" in
no) CLOCK_ADJTIME=;;
yes) CLOCK_ADJTIME="/etc/adjtime";;
esac
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
[ -w /etc -a -n "${CLOCK_ADJTIME}" ] || myopts="${myopts} --noadjfile"
[ "${SRM}" = "yes" ] && myopts="${myopts} --srm"
[ "${ARC}" = "arc" ] && myopts="${myopts} --arc"
myopts="${myopts} ${CLOCK_OPTS}"
# 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 myopts= myadj= TBLURB= fakeit=0 errstr="" retval=0
setupopts
if [ ${fakeit} -ne 1 -a -e /proc/modules -a ! -e /dev/rtc ] ; then
modprobe -q rtc || modprobe -q genrtc
fi
ebegin "Setting system clock using the hardware clock [${TBLURB}]"
if [ ${fakeit} -eq 1 ] ; then
retval=0
elif [ -x /sbin/hwclock ] ; then
# Don't call hwclock unless we need to
if [ "${TBLURB}" != "UTC" -o "${myopts#*--noadjfile}" = "${myopts}" ] ; then
# Since hwclock always exit's with a 0, need to check its output.
[ -n "${CLOCK_ADJTIME}" ] && errstr="$(/sbin/hwclock --adjust 2>&1 >/dev/null)"
errstr="${errstr}$(/sbin/hwclock --hctosys ${myopts} 2>&1 >/dev/null)"
if [ -n "${errstr}" ] ; then
ewarn "${errstr}"
retval=1
fi
errstr="Failed to set clock"
fi
else
retval=1
errstr="/sbin/hwclock not found"
fi
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 myopts= myadj= TBLURB= fakeit=0 errstr="" retval=0
setupopts
ebegin "Setting hardware clock using the system clock" "[${TBLURB}]"
if [ ${fakeit} -eq 1 ] ; then
retval=0
elif [ -x /sbin/hwclock ] ; then
errstr="$(LC_ALL=C /sbin/hwclock --systohc ${myopts} 2>&1 >/dev/null)"
if [ -n "${errstr}" ] ; then
ewarn "${errstr}"
retval=1
fi
errstr="Failed to sync clocks"
else
retval=1
errstr="hwclock not found"
fi
eend ${retval} "${errstr}"
}
save() {
CLOCK_SYSTOHC="yes"
stop
}
# vim: set ts=4 :
|