examples: add dispatcher for NTP servers from DHCP
Add new NM dispatcher script for NTP servers given by DHCP through NetworkManager in a similar way to how distributions have done in 11-dhclient, e.g. [1]. New NTP servers are written as entries to a file per-interface in /var/run/chrony-dhcp, which is re-read by chronyd upon executing `chronyc reload sources`. This provides a way for NTP server configuration to be carried over from NetworkManager DHCP events to chrony, for DHCP clients other than dhclient. Part of fixing integration where the NetworkManager internal client is used, e.g [2]. Paths to the chronyc executable and sources directory are set in variables, which may be overwritten by downstream packages, but should work for distributions for the most part. [1] https://src.fedoraproject.org/rpms/dhcp/blob/master/f/11-dhclient [2] https://bugzilla.redhat.com/show_bug.cgi?id=1800901
This commit is contained in:
parent
59cf4e0b96
commit
bf7f63eaed
1 changed files with 43 additions and 0 deletions
43
examples/chrony.nm-dispatcher.dhcp
Normal file
43
examples/chrony.nm-dispatcher.dhcp
Normal file
|
@ -0,0 +1,43 @@
|
|||
#!/bin/sh
|
||||
# This is a NetworkManager dispatcher script for chronyd to update
|
||||
# its NTP sources passed from DHCP options. Note that this script is
|
||||
# specific to NetworkManager-dispatcher due to use of the
|
||||
# DHCP4_NTP_SERVERS environment variable.
|
||||
|
||||
export LC_ALL=C
|
||||
|
||||
interface=$1
|
||||
action=$2
|
||||
|
||||
chronyc=/usr/bin/chronyc
|
||||
default_server_options=iburst
|
||||
server_dir=/var/run/chrony-dhcp
|
||||
|
||||
dhcp_server_file=$server_dir/$interface.sources
|
||||
# DHCP4_NTP_SERVERS is passed from DHCP options by NetworkManager.
|
||||
nm_dhcp_servers=$DHCP4_NTP_SERVERS
|
||||
|
||||
add_servers_from_dhcp() {
|
||||
rm -f "$dhcp_server_file"
|
||||
for server in $nm_dhcp_servers; do
|
||||
echo "server $server $default_server_options" >> "$dhcp_server_file"
|
||||
done
|
||||
$chronyc reload sources > /dev/null 2>&1 || :
|
||||
}
|
||||
|
||||
clear_servers_from_dhcp() {
|
||||
if [ -f "$dhcp_server_file" ]; then
|
||||
rm -f "$dhcp_server_file"
|
||||
$chronyc reload sources > /dev/null 2>&1 || :
|
||||
fi
|
||||
}
|
||||
|
||||
mkdir -p $server_dir
|
||||
|
||||
if [ "$action" = "up" ] || [ "$action" = "dhcp4-change" ]; then
|
||||
add_servers_from_dhcp
|
||||
elif [ "$action" = "down" ]; then
|
||||
clear_servers_from_dhcp
|
||||
fi
|
||||
|
||||
exit 0
|
Loading…
Reference in a new issue