summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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