[oe] [meta-networking][PATCHv3] chrony: Versatile implementation of NTP

2016-06-15 Thread Henry Hallam
From: Henry Hallam <he...@pericynthion.org>

chrony is an alternative to ntpd.  In particular it may be useful
for quasi-realtime embedded systems that have a pulse-per-second
time reference available and need to rapidly synchronize to it after
boot, which appears to be unachievable with ntpd.

Signed-off-by: Henry Hallam <he...@pericynthion.org>
---
 .../recipes-support/chrony/chrony/chrony.conf  |  44 +++
 .../recipes-support/chrony/chrony/chronyd  |  58 ++
 .../recipes-support/chrony/chrony_2.4.bb   | 127 +
 3 files changed, 229 insertions(+)
 create mode 100644 meta-networking/recipes-support/chrony/chrony/chrony.conf
 create mode 100644 meta-networking/recipes-support/chrony/chrony/chronyd
 create mode 100644 meta-networking/recipes-support/chrony/chrony_2.4.bb

diff --git a/meta-networking/recipes-support/chrony/chrony/chrony.conf 
b/meta-networking/recipes-support/chrony/chrony/chrony.conf
new file mode 100644
index 000..8d226d3
--- /dev/null
+++ b/meta-networking/recipes-support/chrony/chrony/chrony.conf
@@ -0,0 +1,44 @@
+# Use public NTP servers from the pool.ntp.org project.
+# Please consider joining the pool project if possible by running your own
+# server(s).
+# If you are a vendor distributing a product using chrony, you *MUST*
+# read and comply with http://www.pool.ntp.org/vendors.html
+pool 0.openembedded.pool.ntp.org iburst
+
+# Use a local timeserver in preference to the pool, if it's reachable.
+#server 192.168.22.22 iburst minpoll 2 prefer
+
+# Sync to pulse-per-second from an onboard GPS.
+#refclock PPS /dev/pps0 poll 0 prefer
+# You'll want to enable CONFIG_PPS and CONFIG_PPS_CLIENT_GPIO in your kernel,
+# and an entry something like this in your device tree:
+#  pps {
+#  compatible = "pps-gpio";
+#  gpios = <_gpio_0 56 0>;
+#  };
+
+# In first three updates step the system clock instead of slew
+# if the adjustment is larger than 1 second.
+makestep 1.0 3
+
+# Record the rate at which the system clock gains/loses time,
+# improving accuracy after reboot
+driftfile /var/lib/chrony/drift
+
+# Enable kernel synchronization of the hardware real-time clock (RTC).
+rtcsync
+
+# Allow NTP client access from local network.
+#allow 192.168/16
+
+# Serve time even if not synchronized to any NTP server.
+#local stratum 10
+
+# Specify file containing keys for NTP authentication.
+#keyfile /etc/chrony.keys
+
+# Specify directory for log files.
+logdir /var/log/chrony
+
+# Select which information is logged.
+#log measurements statistics tracking
diff --git a/meta-networking/recipes-support/chrony/chrony/chronyd 
b/meta-networking/recipes-support/chrony/chrony/chronyd
new file mode 100644
index 000..04f1b68
--- /dev/null
+++ b/meta-networking/recipes-support/chrony/chrony/chronyd
@@ -0,0 +1,58 @@
+#! /bin/sh
+
+# System V init script for chrony
+# Adapted from the script already in meta-networking for ntpd
+
+### BEGIN INIT INFO
+# Provides:chrony
+# Required-Start:  $network $remote_fs $syslog
+# Required-Stop:   $network $remote_fs $syslog
+# Default-Start:   2 3 4 5
+# Default-Stop:
+# Short-Description: Start chrony time daemon
+### END INIT INFO
+
+PATH=/sbin:/bin:/usr/bin:/usr/sbin
+
+DAEMON=/usr/sbin/chronyd
+PIDFILE=/var/run/chronyd.pid
+
+test -x $DAEMON -a -r /etc/chrony.conf || exit 0
+
+# Source function library.
+. /etc/init.d/functions
+
+# Functions to do individual actions
+startdaemon(){
+   echo -n "Starting chronyd: "
+   start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE --startas 
$DAEMON -- "$@"
+   echo "done"
+}
+stopdaemon(){
+   echo -n "Stopping chronyd: "
+   start-stop-daemon --stop --quiet --oknodo -p $PIDFILE
+   echo "done"
+}
+
+case "$1" in
+  start)
+   startdaemon
+   ;;
+  stop)
+   stopdaemon
+   ;;
+  force-reload | restart | reload)
+   stopdaemon
+   startdaemon
+   ;;
+  status)
+   status /usr/sbin/chronyd;
+   exit $?
+   ;;
+  *)
+   echo "Usage: chronyd { start | stop | status | restart | reload }" >&2
+   exit 1
+   ;;
+esac
+
+exit 0
diff --git a/meta-networking/recipes-support/chrony/chrony_2.4.bb 
b/meta-networking/recipes-support/chrony/chrony_2.4.bb
new file mode 100644
index 000..aa37caa
--- /dev/null
+++ b/meta-networking/recipes-support/chrony/chrony_2.4.bb
@@ -0,0 +1,127 @@
+SUMMARY = "Versatile implementation of the Network Time Protocol"
+DESCRIPTION = "Chrony can synchronize the system clock with NTP \
+servers, reference clocks (e.g. GPS receiver), and manual input using \
+wristwatch and keyboard. It can also operate as an NTPv4 (RFC 5905) \
+server and peer to provide a time service to other computers in the \
+network. \
+\
+It is designed to perform well in a wide range of conditions, \
+including intermittent network con

[oe] [meta-networking][PATCHv3] chrony: Versatile implementation of NTP

2016-06-15 Thread Henry Hallam

Patch version 3:
- Move variable defs to appropriate places in the recipe, per Koen's feedback
- Correct location of drift file
- Add conflict with ntimed, and note about systemd-timesyncd

Thanks, Henry
-- 
___
Openembedded-devel mailing list
Openembedded-devel@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-devel


[oe] [meta-networking][PATCH v2] chrony: Versatile implementation of NTP

2016-06-14 Thread Henry Hallam
From: Henry Hallam <he...@pericynthion.org>

chrony is an alternative to ntpd.  In particular it may be useful
for quasi-realtime embedded systems that have a pulse-per-second
time reference available and need to rapidly synchronize to it after
boot, which appears to be unachievable with ntpd.

Signed-off-by: Henry Hallam <he...@pericynthion.org>
---
 .../recipes-support/chrony/chrony/chrony.conf  |  44 
 .../recipes-support/chrony/chrony/chronyd  |  58 ++
 .../recipes-support/chrony/chrony_2.4.bb   | 120 +
 3 files changed, 222 insertions(+)
 create mode 100644 meta-networking/recipes-support/chrony/chrony/chrony.conf
 create mode 100644 meta-networking/recipes-support/chrony/chrony/chronyd
 create mode 100644 meta-networking/recipes-support/chrony/chrony_2.4.bb

diff --git a/meta-networking/recipes-support/chrony/chrony/chrony.conf 
b/meta-networking/recipes-support/chrony/chrony/chrony.conf
new file mode 100644
index 000..95f5f81
--- /dev/null
+++ b/meta-networking/recipes-support/chrony/chrony/chrony.conf
@@ -0,0 +1,44 @@
+# Use public NTP servers from the pool.ntp.org project.
+# Please consider joining the pool project if possible by running your own
+# server(s).
+# If you are a vendor distributing a product using chrony, you *MUST*
+# read and comply with http://www.pool.ntp.org/vendors.html
+pool 0.openembedded.pool.ntp.org iburst
+
+# Use a local timeserver in preference to the pool, if it's reachable.
+#server 192.168.22.22 iburst minpoll 2 prefer
+
+# Sync to pulse-per-second from an onboard GPS.
+#refclock PPS /dev/pps0 poll 0 prefer
+# You'll want to enable CONFIG_PPS and CONFIG_PPS_CLIENT_GPIO in your kernel,
+# and an entry something like this in your device tree:
+#  pps {
+#  compatible = "pps-gpio";
+#  gpios = <_gpio_0 56 0>;
+#  };
+
+# Record the rate at which the system clock gains/loses time,
+# improving accuracy after reboot
+driftfile /var/lib/chrony.drift
+
+# In first three updates step the system clock instead of slew
+# if the adjustment is larger than 1 second.
+makestep 1.0 3
+
+# Enable kernel synchronization of the real-time clock (RTC).
+rtcsync
+
+# Allow NTP client access from local network.
+#allow 192.168/16
+
+# Serve time even if not synchronized to any NTP server.
+#local stratum 10
+
+# Specify file containing keys for NTP authentication.
+#keyfile /etc/chrony.keys
+
+# Specify directory for log files.
+logdir /var/log/chrony
+
+# Select which information is logged.
+#log measurements statistics tracking
diff --git a/meta-networking/recipes-support/chrony/chrony/chronyd 
b/meta-networking/recipes-support/chrony/chrony/chronyd
new file mode 100644
index 000..04f1b68
--- /dev/null
+++ b/meta-networking/recipes-support/chrony/chrony/chronyd
@@ -0,0 +1,58 @@
+#! /bin/sh
+
+# System V init script for chrony
+# Adapted from the script already in meta-networking for ntpd
+
+### BEGIN INIT INFO
+# Provides:chrony
+# Required-Start:  $network $remote_fs $syslog
+# Required-Stop:   $network $remote_fs $syslog
+# Default-Start:   2 3 4 5
+# Default-Stop:
+# Short-Description: Start chrony time daemon
+### END INIT INFO
+
+PATH=/sbin:/bin:/usr/bin:/usr/sbin
+
+DAEMON=/usr/sbin/chronyd
+PIDFILE=/var/run/chronyd.pid
+
+test -x $DAEMON -a -r /etc/chrony.conf || exit 0
+
+# Source function library.
+. /etc/init.d/functions
+
+# Functions to do individual actions
+startdaemon(){
+   echo -n "Starting chronyd: "
+   start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE --startas 
$DAEMON -- "$@"
+   echo "done"
+}
+stopdaemon(){
+   echo -n "Stopping chronyd: "
+   start-stop-daemon --stop --quiet --oknodo -p $PIDFILE
+   echo "done"
+}
+
+case "$1" in
+  start)
+   startdaemon
+   ;;
+  stop)
+   stopdaemon
+   ;;
+  force-reload | restart | reload)
+   stopdaemon
+   startdaemon
+   ;;
+  status)
+   status /usr/sbin/chronyd;
+   exit $?
+   ;;
+  *)
+   echo "Usage: chronyd { start | stop | status | restart | reload }" >&2
+   exit 1
+   ;;
+esac
+
+exit 0
diff --git a/meta-networking/recipes-support/chrony/chrony_2.4.bb 
b/meta-networking/recipes-support/chrony/chrony_2.4.bb
new file mode 100644
index 000..07d312e
--- /dev/null
+++ b/meta-networking/recipes-support/chrony/chrony_2.4.bb
@@ -0,0 +1,120 @@
+SUMMARY = "Versatile implementation of the Network Time Protocol"
+DESCRIPTION = "Chrony can synchronize the system clock with NTP \
+servers, reference clocks (e.g. GPS receiver), and manual input using \
+wristwatch and keyboard. It can also operate as an NTPv4 (RFC 5905) \
+server and peer to provide a time service to other computers in the \
+network. \
+\
+It is designed to perform well in a wide range of conditions, \
+including intermittent network con

[oe] [meta-networking][PATCH v2] chrony: Versatile implementation of NTP

2016-06-14 Thread Henry Hallam

Patch version 2:
- No longer hard-coding paths  
- Fix missing build dependencies, depending on PACKAGECONFIG features 
- Split off chronyc into separate output package
- Default config points to openembedded.pool.ntp.org rather than
  pool.ntp.org (which should never be shipped as a default)

I have applied for the above NTP pool vendor zone per
http://www.pool.ntp.org/en/vendors.html#vendor-zone

Thanks, Henry
-- 
___
Openembedded-devel mailing list
Openembedded-devel@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-devel


Re: [oe] [meta-networking][PATCH] chrony: Versatile implementation of NTP

2016-06-14 Thread Henry Hallam
On Tue, Jun 14, 2016 at 10:33 AM, Martin Jansa  wrote:
> Autodetects some dependencies:
>
> WARNING: chrony-2.4-r0 do_package_qa: QA Issue: chrony rdepends on nss,
> but it isn't a build dependency, missing nss in DEPENDS or
> PACKAGECONFIG? [build-deps]
> WARNING: chrony-2.4-r0 do_package_qa: QA Issue: chrony rdepends on
> libedit, but it isn't a build dependency, missing libedit in DEPENDS or
> PACKAGECONFIG? [build-deps]
>

Thanks Martin. It looks like those didn't show up for me because nss
and libedit are both optional dependencies which weren't present on my
system.  They are detected and used by chrony's `configure` script if
available and unused if not (e.g. chronyc can use either editline or
readline or neither, and if NSS is unavailable then chronyd gets built
without secure hash support).  What's the best practice here - should
I simply specify `configure` options to disable all these features for
minimal dependencies, or make them all optionally available via
PACKAGECONFIG?

Henry
-- 
___
Openembedded-devel mailing list
Openembedded-devel@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-devel


Re: [oe] [meta-networking][PATCH] chrony: Versatile implementation of NTP

2016-06-14 Thread Henry Hallam
On Mon, Jun 13, 2016 at 4:03 AM, Koen Kooi  wrote:
> That file hardcodes /etc, /var, etc
> ...
> While the recipe is well behaved and uses ${sysconfdir} and friends. You'll
> likely need to add a sed -i -e s:/var:${localstatedir}:g -e
> s:/etc/:${sysconfdir}:g -e  -e. to do_install to fix that up.

Thanks Koen, I will put out a V2 patch shortly that fixes those paths
as well as the ones in the SysVinit and systemd scripts.  I'm a little
surprised there isn't a more general way to do this since it must come
up a lot.

Henry
-- 
___
Openembedded-devel mailing list
Openembedded-devel@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-devel


Re: [oe] [meta-networking][PATCH] chrony: Versatile implementation of NTP

2016-06-09 Thread Henry Hallam
On Thu, Jun 9, 2016 at 12:06 PM, Henry Hallam <he...@kittyhawk.aero> wrote:
> chrony is an alternative to ntpd.  In particular it may be useful
> for quasi-realtime embedded systems that have a pulse-per-second
> time reference available and need to rapidly synchronize to it after
> boot, which appears to be unachievable with ntpd.

This is my first attempt to contribute to yocto/openembedded, so any
and all feedback (stylistic or otherwise) would be greatly
appreciated.

Thanks, Henry
-- 
___
Openembedded-devel mailing list
Openembedded-devel@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-devel