summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xadjtime.cron2
-rwxr-xr-xhwclock39
-rwxr-xr-xinstall.sh2
-rw-r--r--rc.conf5
-rwxr-xr-xrc.shutdown13
-rwxr-xr-xrc.sysinit27
6 files changed, 50 insertions, 38 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..0b0a818 100644
--- a/rc.conf
+++ b/rc.conf
@@ -105,4 +105,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 0acca49..fef1117 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 9797611..e949180 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"
@@ -398,11 +382,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