[arch-projects] [PATCH] Make hwclock --adjust as well as --systohc optional (FS#13684)
Kurt J. Bosch
kjb-temp-2009 at alpenjodel.de
Mon Mar 28 09:34:22 EDT 2011
This turns all hardware clock write access (setting and adjusting) the
into an optional daemon. (FS#13684)
Should fix issues when using ntpd (kernel 11-minute-mode) and also in
case of dual-boot.
Further more the out of box HARDWARECLOCK setting is changed to "UTC"
and "localtime" is discouraged because it can really mess up things
especially with 'hwclock --adjust'.
For previous discussion see https://bugs.archlinux.org/task/13684
From 39d86d1d831210aca9f592eed5555389b2216d7c Mon Sep 17 00:00:00 2001
From: Kurt J. Bosch <kjb-temp-2009 at alpenjodel.de>
Date: Mon, 28 Mar 2011 15:01:43 +0200
Subject: [PATCH] Make hwclock --adjust as well as --systohc optional
(FS#13684)
---
adjtime.cron | 2 +-
hwclock | 39 +++++++++++++++++++++++++++++++++++++++
install.sh | 2 +-
rc.conf | 8 ++++++--
rc.shutdown | 13 ++-----------
rc.sysinit | 27 +++------------------------
6 files changed, 52 insertions(+), 39 deletions(-)
create mode 100644 hwclock
diff --git a/adjtime.cron b/adjtime.cron
index a876506..7691aa5 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/daemons/hwclock ]]; then
/sbin/hwclock $HWCLOCK_PARAMS
fi
diff --git a/hwclock b/hwclock
new file mode 100644
index 0000000..d584276
--- /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 clock
+ fi
+ ;;
+ stop)
+ if [[ $HWCLOCK_PARAMS ]]; then
+ stat_busy "Saving System Clock"
+ /sbin/hwclock --systohc $HWCLOCK_PARAMS || stat_die
+ stat_done
+ fi
+ rm_daemon clock
+ ;;
+ 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 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
--
1.7.0.3
More information about the arch-projects
mailing list