Lorsque NetworkManager s'exécute sur l’hôte, la configuration du service systemd-timesyncd.service n'est pas mise à jour, ce dernier n'utilise pas les serveurs NTP acquis via DHCP par NetworkManager.
En effet NetworkManager par défaut ne communique pas directement avec systemd-timesyncd.service.
Cependant la fonctionnalité NetworkManager dispatcher peut être utilisée pour mettre à jour la configuration de l'unité systemd-timesynd.service. solution largement utilisée consiste à placer un script dans /etc/NetworkManager/dispatcher.d
qui se charge de mettre en œuvre s se comportement pour systemd.
lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.3 LTS Release: 20.04 Codename: focal
systemd --version systemd 245 (245.4-4ubuntu3.13) +PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid
nmcli est le CLI de NetworkManager:
# Affiche les détails de configuration de la connexion # filtre les informations concernant les serveurs NTP nmcli connection show SFR_4380 | grep ntp_servers DHCP4.OPTION[7]: ntp_servers = 192.168.1.1 DHCP4.OPTION[17]: requested_ntp_servers = 1
La sortie obtenue indique bien que le serveur NTP est récupéré via DHCP. Si on affiche l'état de la synchronisation NTP:
timedatectl show-timesync --all LinkNTPServers= SystemNTPServers= FallbackNTPServers=ntp.ubuntu.com ServerName=ntp.ubuntu.com ServerAddress=(null) RootDistanceMaxUSec=5s PollIntervalMinUSec=32s PollIntervalMaxUSec=34min 8s PollIntervalUSec=0 Frequency=0 timedatectl status Local time: dim. 2022-01-09 11:48:41 CET Universal time: dim. 2022-01-09 10:48:41 UTC RTC time: dim. 2022-01-09 10:48:41 Time zone: Europe/Paris (CET, +0100) System clock synchronized: no NTP service: active RTC in local TZ: no
timesyncd n'utilise pas le serveur NTP retourné par DHCP, et malgré l'état actif du service NTP, l'horloge locale n'est pas synchronisée.
Passer le script exécutable:
chmod ug+x /etc/dhcp/dhclient-exit-hooks.d/timesyncd # Forcer le renouvellement du bail DHCP # Lister les connexions actives nmcli connection show --active # Redémarrer la connexion active souhaitée nmcli connection down SFR_4380 nmcli connection up SFR_4380
Les commandes ci-dessous permettent de créer les répertoires si nécessaire:
for r in "/etc/systemd/timesyncd.conf.d" "/etc/NetworkManager/dispatcher.d"; do if [ ! -d $r ]; then # Le repertoire n'existe pas : creation" mkdir $r fi done
Créer le script /etc/NetworkManager/dispatcher.d/10-update-timesyncd
#!/usr/bin/env bash [[ -z "$CONNECTION_UUID" ]] && exit 0 INTERFACE="$1" ACTION="$2" case $ACTION in up | dhcp4-change | dhcp6-change) [[ -n "$DHCP4_NTP_SERVERS" ]] || exit mkdir /etc/systemd/timesyncd.conf.d cat <<-THE_END >"/etc/systemd/timesyncd.conf.d/${CONNECTION_UUID}.conf" [Time] NTP=$DHCP4_NTP_SERVERS THE_END systemctl restart systemd-timesyncd.service ;; down) rm -f "/etc/systemd/timesyncd.conf.d/${CONNECTION_UUID}.conf" systemctl stop systemd-timesyncd.service ;; esac
Rendre le script exécutable pour root seulement:
chmod ug+x /etc/NetworkManager/dispatcher.d/10-update-timesyncd
S'assurer que NetworkManager Dispatcher est activé:
systemctl is-enabled NetworkManager-dispatcher.service
Après ces modifications, le serveur NTP de l'unité timesyncd.service est bien mis à jour par NetworkManager:
# Affiche le serveur NTP utilisé timedatectl show-timesync --all LinkNTPServers= SystemNTPServers=192.168.33.254 FallbackNTPServers=ntp.ubuntu.com ServerName=192.168.33.254 ServerAddress=192.168.33.254 RootDistanceMaxUSec=5s PollIntervalMinUSec=32s PollIntervalMaxUSec=34min 8s PollIntervalUSec=1min 4s NTPMessage={ Leap=0, Version=4, Mode=4, Stratum=3, Precision=-23, RootDelay=28.778ms, RootDispersion=36.071ms, Reference=5C4A08B, OriginateTimestamp=Sun 2022-01-09 17:27:27 CET, ReceiveTimestamp=Sun 2022-01-09 17:27:27 CET, TransmitTimestamp=Sun 2022-01-09 17:27:27 CET, DestinationTimestamp=Sun 2022-01-09 17:27:27 CET, Ignored=no PacketCount=2, Jitter=5.033ms } Frequency=6818847 # Affiche le status du service systemd-timesyncd timedatectl status Local time: dim. 2022-01-09 17:27:53 CET Universal time: dim. 2022-01-09 16:27:53 UTC RTC time: dim. 2022-01-09 16:27:53 Time zone: Europe/Paris (CET, +0100) System clock synchronized: yes NTP service: active RTC in local TZ: no
Le service indique bien que l'horloge du système local à été synchronisée au serveur de temps par les lignes System clock synchronized: yes
et NTP service: active
.