Package: systemd
Version: 232-22
Severity: normal

Dear Maintainers,

When NetworkManager is running /etc/dhcp/dhclient-exit-hooks.d/timesyncd and
other hooks in the directory are not triggered. See #537358 for a very
old report
involving other packages with DHCP hooks.

The widely adopted solution seems to be adding per-package scripts to
/etc/NetworkManager/dispatcher.d and the attached patch does that for systemd.

Cheers,
Balint

PS: The issue has been reported on Launchpad originally:
https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1685484

-- 
Balint Reczey
Debian & Ubuntu Developer
From 88d3488152bae8bbe4510fdbd9106b4270af5928 Mon Sep 17 00:00:00 2001
From: Balint Reczey <balint.rec...@canonical.com>
Date: Wed, 3 May 2017 17:44:05 +0200
Subject: [PATCH] Set timesyncd's NTP server from DHCP even with NetworkManager

LP: #1685484
---
 debian/extra/dhclient-exit-hooks.d/timesyncd |  2 +-
 debian/extra/dispatcher.d/timesyncd          | 12 ++++++++++++
 debian/systemd.install                       |  1 +
 3 files changed, 14 insertions(+), 1 deletion(-)
 create mode 100755 debian/extra/dispatcher.d/timesyncd

diff --git a/debian/extra/dhclient-exit-hooks.d/timesyncd b/debian/extra/dhclient-exit-hooks.d/timesyncd
index 3cde992..d567dd0 100644
--- a/debian/extra/dhclient-exit-hooks.d/timesyncd
+++ b/debian/extra/dhclient-exit-hooks.d/timesyncd
@@ -12,7 +12,7 @@ timesyncd_servers_setup_add() {
                 return
         fi
 
-        if [ -e $TIMESYNCD_CONF ] && [ "$new_ntp_servers" = "$old_ntp_servers" ]; then
+        if [ -e $TIMESYNCD_CONF ] && grep -q -F "NTP=$new_ntp_servers" $TIMESYNCD_CONF; then
                 return
         fi
 
diff --git a/debian/extra/dispatcher.d/timesyncd b/debian/extra/dispatcher.d/timesyncd
new file mode 100755
index 0000000..cc1f3bc
--- /dev/null
+++ b/debian/extra/dispatcher.d/timesyncd
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+# Call timesyncd DHCP hook on NetworkManager interface events
+
+if [ "$2" = "up" -a -n "${DHCP4_NTP_SERVERS:-}" ]; then
+    env reason="BOUND" \
+        new_ntp_servers="${DHCP4_NTP_SERVERS}" \
+        sh /etc/dhcp/dhclient-exit-hooks.d/timesyncd
+elif [ "$2" = "down" ]; then
+    env reason="STOP" \
+        sh /etc/dhcp/dhclient-exit-hooks.d/timesyncd
+fi
diff --git a/debian/systemd.install b/debian/systemd.install
index b3e0594..905600c 100644
--- a/debian/systemd.install
+++ b/debian/systemd.install
@@ -65,5 +65,6 @@ var/lib
 ../../extra/systemd-sysv-install lib/systemd/
 ../../extra/units/* lib/systemd/system/
 ../../extra/dhclient-exit-hooks.d/ etc/dhcp/
+../../extra/dispatcher.d/ etc/NetworkManager/
 ../../extra/kernel-install.d/* usr/lib/kernel/install.d
 ../../extra/pam.d etc/
-- 
2.7.4

Reply via email to