[Buildroot] [PATCH v5] package/ntp: sntp time sync script
Oscar Gomez Fuente
oscargomezf at gmail.com
Thu Jan 17 17:43:55 UTC 2019
Tested-by: Oscar Gomez Fuente <oscargomezf at gmail.com>
Óscar Gómez Fuente
Electronic Engineer & Degree in Physical Sciences
Mobile: 659.28.97.90
Email: oscargomezf at gmail.com
Website: www.oscargomezf.com
On Wed, 16 Jan 2019 at 13:23, Oscar Gomez Fuente <oscargomezf at gmail.com> wrote:
>
> Hi everyone,
>
> Do you want me to check again on my raspberry pi 3B+?
>
> Best regards.
>
> Oscar Gomez Fuente
> TST Sistemas
> www.tst-sistemas.es
>
> Óscar Gómez Fuente
> Electronic Engineer & Degree in Physical Sciences
> Mobile: 659.28.97.90
> Email: oscargomezf at gmail.com
> Website: www.oscargomezf.com
>
>
>
> On Wed, 16 Jan 2019 at 13:43, Matthew Weber <matthew.weber at collins.com> wrote:
> >
> > Arnout / Oscar,
> >
> >
> > On Tue, Dec 11, 2018 at 9:45 PM Matt Weber
> > <matthew.weber at rockwellcollins.com> wrote:
> > >
> > > This patch adds the installation of a startup script if the sntp
> > > utility is selected as an option. The utility is design to do a
> > > one time step/slew adjustment of the system time (similar to the
> > > ntpdate tool http://support.ntp.org/bin/view/Dev/DeprecatingNtpdate).
> > > One nice benefit over ntpdate is that sntp can run while ntpd is still
> > > running. However, ntpd may still need to be restarted if the time
> > > step was large enough.
> > >
> > > The script provides the ability to override the arguments as part of a
> > > /etc/defaults/sntp file.
> > >
> > > On a local LAN, the initial large step adjustment took less then
> > > one second to be retrieved and system time updated. If a user already
> > > has a RTC maintaining the time and the system was powered off for
> > > a long period of time, the script assumes a slew adjustment when
> > > +/- 128ms, rather then a time step(jump). This could be further
> > > tuned by a user with the /etc/defaults/sntp configuration file.
> > >
> > > One NTP pool server is being set as sntp uses all of the servers
> > > provided when the DNS is resolved as servers to attempt to retrieve
> > > time from before timing out. It looks like currently that is 4 servers
> > > per *pool.ntp.org hostname.
> > >
> > > Cc: Oscar Gomez Fuente <oscargomezf at gmail.com>
> > > Signed-off-by: Matthew Weber <matthew.weber at rockwellcollins.com>
> >
> > Arnout, merge? Oscar tested the v4 before I did the changes for
> > Carlos's style of script so I didn't carry over his reviewed-by as
> > enough was touched....
> >
> > > ---
> > > Changes
> > > v4 -> v5
> > > - Fixed permissions on S48sntp and S49ntp scripts
> > >
> > > [Arnout
> > > - Updated script to follow Carlos's recently merged syslog script
> > > refresh
> > > - Added kconfig help comment about the script
> > > - Added notes in S49sntp about behavior of the tool
> > > - shellcheck fixes
> > > - Moved touch of key database file into start function
> > >
> > > v3 -> v4
> > > - Updated S48sntp script to just use a single pool host which provides
> > > 4 NTP servers sntp will query before timing out
> > >
> > > v2 -> v3
> > > - Moved initial time set to a S48sntp script as originally suggested
> > > by Oscar and preferred by Arnout
> > > - Switched to sntp tool as it simplified the logic around when and
> > > how do we call the tool to perform this time sync (it handles
> > > when to slew/step and multiple servers at once)
> > >
> > > v1 -> v2
> > > [Arnout
> > > - Moved NTP_WAIT_DELAY above sourcing of configuration file
> > > - Switched to using unix time for current time check
> > > - Added comment on why redirection of stdout and stderr
> > > - Attempted to use the pid file but found it added more calls
> > > to the shell then using a variable, so switched back
> > > - Adjusted printout so the actual ntpd service start was aligned
> > > with the respecting Ok/Fail.
> > > - Dropped -g from the main service call as the "big" time jump
> > > should have already occurred with the one-shot ntpd -gq.
> > >
> > > v1
> > > Based on Oscar's v1 patch to add a ntpdate startup script.
> > > http://patchwork.ozlabs.org/patch/986852/
> > > ---
> > > package/ntp/Config.in | 7 ++++++-
> > > package/ntp/S48sntp | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++
> > > package/ntp/S49ntp | 0
> > > package/ntp/ntp.mk | 9 +++++++++
> > > 4 files changed, 70 insertions(+), 1 deletion(-)
> > > create mode 100644 package/ntp/S48sntp
> > > mode change 100755 => 100644 package/ntp/S49ntp
> > >
> > > diff --git a/package/ntp/Config.in b/package/ntp/Config.in
> > > index efd47e1..97d933b 100644
> > > --- a/package/ntp/Config.in
> > > +++ b/package/ntp/Config.in
> > > @@ -12,7 +12,12 @@ if BR2_PACKAGE_NTP
> > > config BR2_PACKAGE_NTP_SNTP
> > > bool "sntp"
> > > help
> > > - Simple network time protocol program
> > > + Simple network time protocol program (a replacement
> > > + for the ntpdate tool)
> > > +
> > > + A script is installed as S48sntp which will retrieve and
> > > + step the time if there is a large difference before ntpd
> > > + takes over the necessary slew adjustments in S49ntp.
> > >
> > > config BR2_PACKAGE_NTP_NTP_KEYGEN
> > > bool "ntp-keygen"
> > > diff --git a/package/ntp/S48sntp b/package/ntp/S48sntp
> > > new file mode 100644
> > > index 0000000..96d8d50
> > > --- /dev/null
> > > +++ b/package/ntp/S48sntp
> > > @@ -0,0 +1,55 @@
> > > +#!/bin/sh
> > > +
> > > +DAEMON="sntp"
> > > +# sntp uses all the IPs resolved for the hostname (i.e. pool.ntp.org has 4).
> > > +# It will try each until they either all timeout or time has been set. Thus
> > > +# default to only providing one NTP pool host.
> > > +SNTP_SERVERS="pool.ntp.org"
> > > +# Step if time delta is greater then 128ms, otherwise slew
> > > +SNTP_ARGS="-Ss -M 128"
> > > +SNTP_KEY_CACHE="/tmp/kod"
> > > +
> > > +# shellcheck source=/dev/null
> > > +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON"
> > > +
> > > +start() {
> > > + printf 'Starting %s: ' "$DAEMON"
> > > + # Create key cache file to prevents warning that file is missing
> > > + touch $SNTP_KEY_CACHE
> > > + # shellcheck disable=SC2086 # we need the word splitting
> > > + /usr/bin/$DAEMON $SNTP_ARGS -K $SNTP_KEY_CACHE $SNTP_SERVERS
> > > + # sntp behavior
> > > + # - Does not background
> > > + # - Does not infinitely block
> > > + # - Time-out w/o network = ~2 sec
> > > + # - Time-out w/ network = ~5sec * # of servers
> > > + status=$?
> > > + if [ "$status" -eq 0 ]; then
> > > + echo "OK"
> > > + else
> > > + echo "FAIL"
> > > + fi
> > > + return "$status"
> > > +}
> > > +
> > > +stop() {
> > > + echo "Nothing to do, $DAEMON is not a daemon."
> > > +}
> > > +
> > > +restart() {
> > > + stop
> > > + sleep 1
> > > + start
> > > +}
> > > +
> > > +reload() {
> > > + echo "Nothing to do, $DAEMON does not support reload."
> > > +}
> > > +
> > > +case "$1" in
> > > + start|stop|restart|reload)
> > > + "$1";;
> > > + *)
> > > + echo "Usage: $0 {start|stop|restart|reload}"
> > > + exit 1
> > > +esac
> > > diff --git a/package/ntp/S49ntp b/package/ntp/S49ntp
> > > old mode 100755
> > > new mode 100644
> > > diff --git a/package/ntp/ntp.mk b/package/ntp/ntp.mk
> > > index af3c1aa..aad1cdd 100644
> > > --- a/package/ntp/ntp.mk
> > > +++ b/package/ntp/ntp.mk
> > > @@ -93,9 +93,18 @@ define NTP_INSTALL_TARGET_CMDS
> > > $(INSTALL) -m 644 package/ntp/ntpd.etc.conf $(TARGET_DIR)/etc/ntp.conf
> > > endef
> > >
> > > +# This script will step the time if there is a large difference
> > > +# before ntpd takes over the necessary slew adjustments
> > > +ifeq ($(BR2_PACKAGE_NTP_SNTP),y)
> > > +define NTP_INSTALL_INIT_SYSV_SNTP
> > > + $(INSTALL) -D -m 755 package/ntp/S48sntp $(TARGET_DIR)/etc/init.d/S48sntp
> > > +endef
> > > +endif
> > > +
> > > ifeq ($(BR2_PACKAGE_NTP_NTPD),y)
> > > define NTP_INSTALL_INIT_SYSV
> > > $(INSTALL) -D -m 755 package/ntp/S49ntp $(TARGET_DIR)/etc/init.d/S49ntp
> > > + $(NTP_INSTALL_INIT_SYSV_SNTP)
> > > endef
> > >
> > > define NTP_INSTALL_INIT_SYSTEMD
> > > --
> > > 1.9.1
> > >
More information about the buildroot
mailing list