summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <lars.wirzenius@codethink.co.uk>2013-08-29 15:27:46 +0000
committerLars Wirzenius <lars.wirzenius@codethink.co.uk>2013-08-30 12:35:26 +0000
commit0cbca4c5ddd57bb6201b9547a9e1fd3cd75b2008 (patch)
treebe41eb72d49fe1e110a91b8a7b259fae51268c1b
parent2e836dffc909b6534ef80af405f27f1aae2c7e4e (diff)
downloadbusybox-baserock/liw/S8704-always-ntpd.tar.gz
Make NTP run continuouslybaserock/liw/S8704-always-ntpd
With these changes: * NTP is run at boot time, once, to set the system clock. This allows the rest of the boot to continue as soon as time is set, which should happen as soon as there is networking. This is necessary because there's parts of the system that need to wait for the system clock to be set. * NTP is then also started as a daemon, which runs continuously, until stopped by the user, to keep system clock synchronised. The two systemd units need to be separate, otherwise we can't have network.target depend on a unit that finishes quickly: the daemon unit doesn't exit until there's an error.
-rw-r--r--busybox.morph17
-rwxr-xr-xscripts/ntpd-set.sh31
-rwxr-xr-xscripts/run-ntpd-with-config23
-rw-r--r--systemd-units/ntpd-boot.service.in10
-rw-r--r--systemd-units/ntpd.service.in10
5 files changed, 52 insertions, 39 deletions
diff --git a/busybox.morph b/busybox.morph
index 188edf4dc..f92f4ff0e 100644
--- a/busybox.morph
+++ b/busybox.morph
@@ -57,8 +57,10 @@ configure-commands:
build-commands:
- make
- |
- for f in ifup@.service ntpd.service crond.service; do
- sed -e 's|@rootprefix@||g' "systemd-units/$f.in" >"systemd-units/$f";
+ for fin in systemd-units/*.in
+ do
+ f=$(echo "$fin" | sed 's/\.in$//')
+ sed -e 's|@rootprefix@||g' "$fin" >"$f";
done
install-commands:
@@ -91,5 +93,12 @@ install-commands:
- cp examples/udhcp/simple.script "$DESTDIR$PREFIX"/share/udhcpc/default.script
# Set up NTP
- - cp scripts/ntpd-set.sh "$DESTDIR$PREFIX"/bin/ntpd-set.sh
- - chmod 6755 "$DESTDIR$PREFIX"/bin/ntpd-set.sh
+ - install scripts/run-ntpd-with-config "$DESTDIR$PREFIX"/sbin/.
+ - install -d "$DESTDIR/etc"
+ - |
+ cat << EOF > "$DESTDIR/etc/ntpd.conf"
+ server 0.pool.ntp.org
+ server 1.pool.ntp.org
+ server 2.pool.ntp.org
+ server 3.pool.ntp.org
+ EOF
diff --git a/scripts/ntpd-set.sh b/scripts/ntpd-set.sh
deleted file mode 100755
index d6fd8f25b..000000000
--- a/scripts/ntpd-set.sh
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/sh
-max_attempts=4
-
-# This script takes a list of ntp servers and passes them to ntpd to set the
-# system time. If a /etc/ntpd.conf file exists, the servers there are used,
-# if not, some default values are passed
-set_time() {
- # -q flag makes ntpd exit after setting the time once
- ntpd -q -n -p "$1"
-}
-
-check_time() {
- for attempt in $(seq "$max_attempts"); do
- for arg ; do
- echo $arg
- if set_time "$arg" ; then
- return 0
- fi
- done
- sleep 2
- done
- return 1
-}
-
-if [ -f /etc/ntpd.conf ]; then
- server_list=`cat /etc/ntpd.conf | sed ':a;N;$!ba;s/\n/ /g;s/server//g'`
- check_time $server_list
-else
- # Use a default list if there's no config
- check_time 0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org 3.pool.ntp.org
-fi
diff --git a/scripts/run-ntpd-with-config b/scripts/run-ntpd-with-config
new file mode 100755
index 000000000..24d9cc165
--- /dev/null
+++ b/scripts/run-ntpd-with-config
@@ -0,0 +1,23 @@
+#!/bin/sh
+#
+# Invoke the Busybox ntpd with servers listed in /etc/ntpd.conf, if it
+# exists. The servers should be listed one per line, with the first
+# word in the line being "server". Any lines that don't start with
+# "server" as the first word are ignored. The server name should be
+# the second word. Anything else on the line is ignored.
+#
+# If the config file does not exist, no default servers are used.
+
+set -eu
+
+parse_servers()
+{
+ awk '$1 == "server" { for (i=2; i <= NF; ++i) print "-p", $i }' "$1"
+}
+
+if [ -e /etc/ntpd.conf ]
+then
+ exec ntpd $(parse_servers /etc/ntpd.conf) "$@"
+else
+ exec ntpd "$@"
+fi
diff --git a/systemd-units/ntpd-boot.service.in b/systemd-units/ntpd-boot.service.in
new file mode 100644
index 000000000..17318c667
--- /dev/null
+++ b/systemd-units/ntpd-boot.service.in
@@ -0,0 +1,10 @@
+[Unit]
+Description=Set clock at boot with NTP
+Before=network.target
+Before=ntpd.service
+
+[Service]
+Type=oneshot
+ExecStart=/usr/sbin/run-ntpd-with-config -n -q
+Restart=on-failure
+RestartSec=15
diff --git a/systemd-units/ntpd.service.in b/systemd-units/ntpd.service.in
index 96ce5ac99..7226c872a 100644
--- a/systemd-units/ntpd.service.in
+++ b/systemd-units/ntpd.service.in
@@ -1,8 +1,10 @@
[Unit]
-Description=Network Time Protocol client
+Description=Keep clock synchronised with NTP
Before=network.target
+After=ntpd-boot.service
[Service]
-Type=oneshot
-ExecStart=/usr/bin/ntpd-set.sh
-RemainAfterExit=true
+Type=simple
+ExecStart=/usr/sbin/run-ntpd-with-config -n
+Restart=on-failure
+RestartSec=15