diff options
author | Lars Wirzenius <lars.wirzenius@codethink.co.uk> | 2013-08-29 15:27:46 +0000 |
---|---|---|
committer | Lars Wirzenius <lars.wirzenius@codethink.co.uk> | 2013-08-30 12:35:26 +0000 |
commit | 0cbca4c5ddd57bb6201b9547a9e1fd3cd75b2008 (patch) | |
tree | be41eb72d49fe1e110a91b8a7b259fae51268c1b | |
parent | 2e836dffc909b6534ef80af405f27f1aae2c7e4e (diff) | |
download | busybox-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.morph | 17 | ||||
-rwxr-xr-x | scripts/ntpd-set.sh | 31 | ||||
-rwxr-xr-x | scripts/run-ntpd-with-config | 23 | ||||
-rw-r--r-- | systemd-units/ntpd-boot.service.in | 10 | ||||
-rw-r--r-- | systemd-units/ntpd.service.in | 10 |
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 |