Afin de définir l'heure de plusieurs hôtes (Linux) dans le réseau local isolé, nous avons décidé d'exécuter le serveur NTP sur l'un d'eux et de synchroniser l'heure avec le client NTP sur l'autre. Pour chaque hôte client, nous avons décidé de définir l'adresse du serveur NTP fournie par DHCP.
Les paramètres du serveur NTP et les paramètres de distribution des informations du serveur NTP par le serveur DHCP sont écrits à divers endroits. En revanche, les paramètres du client dépendent fortement de l'environnement et il a fallu du temps pour trouver les informations appropriées. Il semble que le traitement effectué par le client (Linux) au démarrage suit généralement la procédure suivante.
Ici, les dépendances d'environnement se produisent dans les ** clients DHCP (dhclient
(ISC-DHCP), dhcpcd
, le client dhcp interne de NetworkManager
, ...) et les clients NTP ( ntpd
, . C'est parce qu'il existe de nombreuses combinaisons ** d'openntpd
, chrony
, systemd-timesyncd
, ...). En fonction de la distribution Linux, les packages DHCP et NTP utilisés par défaut peuvent changer lors de la mise à niveau, et j'y suis accro si je ne le remarque pas. Si un client DHCP ou un package client NTP autre que celui par défaut (= non utilisé) est également installé, vous pouvez ** réécrire un fichier de configuration qui n'est pas utilisé et craindre qu'il ne fonctionne pas comme prévu **.
Dans le système d'exploitation Raspberry Pi (64 bits, basé sur Debian buster), le client DHCP par défaut = dhcpcd
, NTP client = systemd-timesyncd
. Les hooks appelés par DHCP sont comme / lib / dhcpcd / dhcpcd-hooks / 50-ntp.conf
. Ce fichier a une description pour ntpd
, ʻopenntpd,
chrony, mais pas de description pour
systemd-timesyncd. Sur la base des [informations sur le forum du site officiel](https://www.raspberrypi.org/forums/viewtopic.php?t=217832#p1340336), j'ai ajouté ce qui suit, et le serveur NTP a démarré dynamiquement lorsque le système a démarré. Il a été réglé et l'heure est réglée. ** Il existe un fichier appelé
/ etc / dhcp / dhclient-exit-hooks.d / timesyncd` qui contient une implémentation probable, mais sachez que cela n'est pas utilisé. ** **
/tmp/dhcpcd_ntp_conf(Partie de correction;sortie diff)
--- /etc/dhcpcd.conf.orig 2019-11-13 23:44:50.000000000 +0900
+++ /etc/dhcpcd.conf 2020-09-16 08:28:53.595999273 +0900
@@ -30,7 +30,7 @@ option classless_static_routes
option interface_mtu
# Most distributions have NTP support.
-#option ntp_servers
+option ntp_servers
# A ServerID is required by RFC2131.
require dhcp_server_identifier
/lib/dhcpcd/dhcpcd-hooks/50-ntp.conf(Postscript)
# Set NTP servers for systemd-timesyncd
confd=/run/systemd/timesyncd.conf.d
if [ -n "$new_ntp_servers" ] ; then
set_servers() {
mkdir -p "$confd"
( echo "# Created by dhcpcd hook";echo "[Time]"; echo "NTP=$new_ntp_servers" ) > "$confd/dhcp-ntp.conf"
# Tell timesyncd it has an updated configuration
systemctl try-reload-or-restart systemd-timesyncd
}
if $if_up; then
set_servers
fi
fi
D'ailleurs, dans le fichier de configuration par défaut de systemd-timesyncd
( / lib / systemd / system / systemd-timesyncd.service.d / disable-with-time-daemon.conf
), d'autres clients NTP et services VirtualBox Si le fichier exécutable de est présent, rien n'est fait, il est donc plus sûr d'ajouter 50-ntp.conf
au lieu de le remplacer.
Pour l'image de Raspberry Pi
(ʻubuntu-mate-20.04.1-beta2-desktop-arm64 + raspi.img), le client dhcp interne de
Network Manager et de
systemd-timesyncd sont utilisés. Cela semble être une combinaison de ". Par défaut, dhclient
est également installé, et / etc / dhcp / dhclient-exit-hooks.d / timesyncd
est également fourni, donc si vous exécutez manuellement dhclient
sur la ligne de commande, l'heure sera synchronisée. À. Par conséquent, j'ai pensé qu'il serait préférable d'ajouter dhcp = dhclient
à la section [main]
de / etc / NetworkManager / NetworkManager.conf
afin que dhclient
soit utilisé à la place du dhcp interne. En regardant le journal, dhclient
lève une erreur et le hook n'est pas appelé au moment souhaité.
J'ai renoncé à utiliser dhclient
parce que je n'avais pas le choix, et j'ai décidé de préparer un script Dispather pour Network Manager
en me référant à / etc / dhcp / dhclient-exit-hooks.d / timesyncd
. Modifiez les variables d'environnement et la chaîne de jugement selon le Manuel officiel et /etc/NetworkManager/dispatcher.d/90-dhcp- Créer timesyncd
.
/etc/NetworkManager/dispatcher.d/90-dhcp-timesyncd
#!/bin/sh
TIMESYNCD_CONF=/run/systemd/timesyncd.conf.d/01-dhclient.conf
timesyncd_servers_setup_remove() {
if [ -e $TIMESYNCD_CONF ]; then
rm -f $TIMESYNCD_CONF
systemctl try-restart systemd-timesyncd.service || true
fi
}
timesyncd_servers_setup_add() {
if [ ! -d /run/systemd/system ]; then
return
fi
old_ntp_servers=$(sed -ne 's/^NTP=//gp')
if [ -e $TIMESYNCD_CONF ] && [ "x$DHCP4_NTP_SERVERS" = "x$old_ntp_servers" ]; then
return
fi
if [ -z "${DHCP4_NTP_SERVERS}" ]; then
timesyncd_servers_setup_remove
return
fi
mkdir -p $(dirname ${TIMESYNCD_CONF})
cat <<EOF > ${TIMESYNCD_CONF}.new
# NTP server entries received from DHCP server
[Time]
NTP=$DHCP4_NTP_SERVERS
EOF
mv ${TIMESYNCD_CONF}.new ${TIMESYNCD_CONF}
systemctl try-restart systemd-timesyncd.service || true
}
logger -i -t "$0" "action=${NM_DISPATCHER_ACTION}:NTP=${DHCP4_NTP_SERVERS}"
case $NM_DISPATCHER_ACTION in
up|dhcp4-change)
timesyncd_servers_setup_add
;;
down)
timesyncd_servers_setup_remove
;;
*) :
;;
esac
Ce fichier doit appartenir à root et disposer des autorisations d'exécution.
% ls -l /etc/NetworkManager/dispatcher.d/90-dhcp-timesyncd
-rwxr-xr-x 1 root root 1140 Apr 2 02:55 /etc/NetworkManager/dispatcher.d/90-dhcp-timesyncd
En mettant ce script, l'heure est synchronisée.
Il semble que la version précédente d'Ubuntu utilise également une combinaison de Network Manager
et de systemd-time syncd
. Par conséquent, je pensais que cela fonctionnerait avec le même script que la section précédente (Ubuntu MATE 20.04 LTS), mais cela ne fonctionnait pas comme prévu. Il semble que la variable d'environnement $ NM_DISPATCHER_ACTION
ne soit pas définie, probablement à cause de la différence de version de networkmanager-dispatcher
. Par conséquent, à la place, le comportement attendu peut être obtenu en modifiant ce qui suit afin que le deuxième argument à l'exécution soit évalué.
NetworkManager-Prend en charge différentes versions de répartiteur
--- Ubuntu_MATE-20.04LTS/etc/NetworkManager/dispatcher.d/90-dhcp-timesyncd 2020-09-20 21:52:17.950941231 +0900
+++ JetPack-4.4/etc/NetworkManager/dispatcher.d/90-dhcp-timesyncd 2020-09-22 01:18:46.160691469 +0900
@@ -34,9 +34,9 @@ EOF
systemctl try-restart systemd-timesyncd.service || true
}
-logger -i -t "$0" "action=${NM_DISPATCHER_ACTION}:NTP=${DHCP4_NTP_SERVERS}"
+logger -i -t "$0" "action=${NM_DISPATCHER_ACTION:-${2}}:NTP=${DHCP4_NTP_SERVERS} $@"
-case $NM_DISPATCHER_ACTION in
+case ${NM_DISPATCHER_ACTION:-$2} in
up|dhcp4-change)
timesyncd_servers_setup_add
;;
En passant, le Network Manager
d'Ubuntu 18.04 LTS semble utiliser le dhclient
au lieu du client dhcp interne.
Il semble que ce soit une combinaison de clinet dhcp interne de systemd-networkd
et systemd-timesyncd
. Le serveur DHCP NTP est configuré sans aucune action spéciale. Je n'ai pas trouvé beaucoup d'informations sur systemd-networkd-dispatcher
, donc on ne sait pas comment l'adresse obtenue par DHCP est transmise à systemd-timesyncd
.
C'est une combinaison de «Network Manager» et de «chrony», et le serveur DHCP NTP est configuré sans rien faire. En passant, il semble que CentOS 7 utilise «dhclient» et que CentOS 8 utilise le client DHCP interne de «NetworkManager».
Recommended Posts