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
43 lines
1.1 KiB
Bash
43 lines
1.1 KiB
Bash
#!/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
|