aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xadjtime.cron2
-rwxr-xr-xhwclock39
-rwxr-xr-xinstall.sh2
-rw-r--r--rc.conf8
-rwxr-xr-xrc.shutdown13
-rwxr-xr-xrc.sysinit27
6 files changed, 52 insertions, 39 deletions
diff --git a/adjtime.cron b/adjtime.cron
index a876506..dac8cea 100755
--- a/adjtime.cron
+++ b/adjtime.cron
@@ -10,6 +10,6 @@ case $HARDWARECLOCK in
*) HWCLOCK_PARAMS="";;
esac
-if [[ $HWCLOCK_PARAMS ]]; then
+if [[ $HWCLOCK_PARAMS && -f /var/run/daemons/hwclock ]]; then
/sbin/hwclock $HWCLOCK_PARAMS
fi
diff --git a/hwclock b/hwclock
new file mode 100755
index 0000000..d9de9e1
--- /dev/null
+++ b/hwclock
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+case $HARDWARECLOCK in
+ UTC) HWCLOCK_PARAMS="--utc";;
+ localtime) HWCLOCK_PARAMS="--localtime";;
+ *) HWCLOCK_PARAMS="";;
+esac
+
+case "$1" in
+ start)
+ if [[ $HWCLOCK_PARAMS ]]; then
+ status "Adjusting Hardware Clock" \
+ /sbin/hwclock --adjust
+ stat_busy "Setting System Clock"
+ /sbin/hwclock --hctosys $HWCLOCK_PARAMS || stat_die
+ stat_done
+ # Note: This also enables /etc/cron.hourly/adjtime
+ add_daemon hwclock
+ fi
+ ;;
+ stop)
+ if [[ $HWCLOCK_PARAMS ]]; then
+ stat_busy "Saving System Clock"
+ /sbin/hwclock --systohc $HWCLOCK_PARAMS || stat_die
+ stat_done
+ fi
+ rm_daemon hwclock
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
diff --git a/install.sh b/install.sh
index 2b2cbbc..8e6c3d7 100755
--- a/install.sh
+++ b/install.sh
@@ -15,7 +15,7 @@ done
install -D -m755 adjtime.cron ${DESTDIR}/etc/cron.hourly/adjtime
install -D -m644 functions ${DESTDIR}/etc/rc.d/functions || exit 1
-for i in network netfs; do
+for i in hwclock network netfs; do
install -D -m755 $i ${DESTDIR}/etc/rc.d/$i || exit 1
done
diff --git a/rc.conf b/rc.conf
index d2b0517..02bb1d7 100644
--- a/rc.conf
+++ b/rc.conf
@@ -11,6 +11,7 @@
# process. If set to 'no', the C locale will be used.
# HARDWARECLOCK: set to "UTC" or "localtime", any other value will result
# in the hardware clock being left untouched (useful for virtualization)
+# Note: Using "localtime" is discouraged.
# TIMEZONE: timezones are found in /usr/share/zoneinfo
# KEYMAP: keymaps are found in /usr/share/kbd/keymaps
# CONSOLEFONT: found in /usr/share/kbd/consolefonts (only needed for non-US)
@@ -19,7 +20,7 @@
#
LOCALE="en_US.UTF-8"
DAEMON_LOCALE="no"
-HARDWARECLOCK="localtime"
+HARDWARECLOCK="UTC"
TIMEZONE="Canada/Pacific"
KEYMAP="us"
CONSOLEFONT=
@@ -105,4 +106,7 @@ NETWORK_PERSIST="no"
# - prefix a daemon with a ! to disable it
# - prefix a daemon with a @ to start it up in the background
#
-DAEMONS=(syslog-ng network netfs crond)
+# If something other takes care of your hardware clock (ntpd, dual-boot...)
+# you should disable 'hwclock' here.
+#
+DAEMONS=(hwclock syslog-ng network netfs crond)
diff --git a/rc.shutdown b/rc.shutdown
index 499459f..f588058 100755
--- a/rc.shutdown
+++ b/rc.shutdown
@@ -35,21 +35,12 @@ fi
/bin/dd if=/dev/urandom of=$RANDOM_SEED count=1 bs=$POOL_SIZE &> /dev/null
stat_done
-stat_busy "Saving System Clock"
if [[ $TIMEZONE && -e /usr/share/zoneinfo/$TIMEZONE ]]; then
/bin/rm -f /etc/localtime
- /bin/cp "/usr/share/zoneinfo/$TIMEZONE" /etc/localtime
+ status "Saving Time Zone" \
+ /bin/cp "/usr/share/zoneinfo/$TIMEZONE" /etc/localtime
fi
-HWCLOCK_PARAMS="--systohc"
-case $HARDWARECLOCK in
- UTC) HWCLOCK_PARAMS="$HWCLOCK_PARAMS --utc";;
- localtime) HWCLOCK_PARAMS="$HWCLOCK_PARAMS --localtime";;
- *) HWCLOCK_PARAMS="";;
-esac
-[[ $HWCLOCK_PARAMS ]] && /sbin/hwclock $HWCLOCK_PARAMS
-stat_done
-
# removing psmouse module to fix some reboot issues on newer laptops
/sbin/modprobe -r psmouse >/dev/null 2>&1
diff --git a/rc.sysinit b/rc.sysinit
index 7c0b970..9d7c250 100755
--- a/rc.sysinit
+++ b/rc.sysinit
@@ -66,7 +66,7 @@ if [[ $HWCLOCK_PARAMS ]]; then
# configured timezone. Any new timezone put in rc.conf is copied over at
# a later time.
# This does *NOT* take into account a time adjustment file as /var may not be
- # mounted yet. A second set occurs later to match rc.conf.
+ # mounted yet. A second set may occur in rc.d/hwclock to match rc.conf.
if [[ -f /etc/localtime ]]; then
/sbin/hwclock $HWCLOCK_PARAMS --noadjfile
fi
@@ -304,28 +304,12 @@ status "Retrying failed UDev events" /sbin/udevadm trigger --action=add --type=f
status "Activating Swap" /sbin/swapon -a
-stat_busy "Configuring System Clock"
if [[ $TIMEZONE && -e /usr/share/zoneinfo/$TIMEZONE ]]; then
/bin/rm -f /etc/localtime
- /bin/cp "/usr/share/zoneinfo/$TIMEZONE" /etc/localtime
+ status "Configuring Time Zone" \
+ /bin/cp "/usr/share/zoneinfo/$TIMEZONE" /etc/localtime
fi
-clock_pid=""
-if [[ $HWCLOCK_PARAMS ]]; then
- # This time, we set the clock for real. Use the adjustment file now that
- # /var will definitely be available, and then set the system clock once
- # the hardware clock has been adjusted accordingly. The backgrounding magic
- # is due to the fact that the second call to hwclock will almost always
- # take ~1 second because of the clock granularity, and we might as well
- # stay busy.
- (
- /sbin/hwclock --adjust
- /sbin/hwclock $HWCLOCK_PARAMS
- ) &
- clock_pid=$!
-fi
-stat_done
-
RANDOM_SEED=/var/lib/misc/random-seed
if [[ -f $RANDOM_SEED ]]; then
stat_busy "Initializing Random Seed"
@@ -395,11 +379,6 @@ set_consolefont
/bin/dmesg >| /var/log/dmesg.log
-# final hwclock setting needs to be done at this point
-if [[ $clock_pid ]]; then
- wait $clock_pid
-fi
-
run_hook sysinit_end
# End of file