sudo bash <<'BASH'
set -e
IP=10.3.2.10
echo "===== CHECK NTP ====="
python3 - "$IP" <<'PY'
import socket, sys, struct, time
ip = sys.argv[1]
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.settimeout(4)
try:
t1 = time.time()
s.sendto(b'\x1b' + bytes(47), (ip, 123))
d, addr = s.recvfrom(512)
t4 = time.time()
if addr != (ip, 123) or len(d) < 48 or d[0] & 7 != 4 or d[0] >> 6 == 3 or not 1 <= d[1] <= 15:
raise ValueError("Invalid NTP response")
sec, frac = struct.unpack("!II", d[40:48])
offset = sec - 2208988800 + frac / 2**32 - (t1+t4)/2
print(f"NTP OK | Stratum: {d[1]} | Offset: {offset:.2f} sec")
except Exception as e:
print("NTP FAILED:", e)
sys.exit(1)
finally:
s.close()
PY
echo "===== CONFIGURE NTP ====="
DIR=/etc/systemd/timesyncd.conf.d
FILE=$DIR/90-corporate-ntp.conf
mkdir -p "$DIR"
if [ -f "$FILE" ]; then
cp -a "$FILE" "$FILE.bak"
OLD=1
else
OLD=0
fi
printf '[Time]\nNTP=%s\nFallbackNTP=\n' "$IP" > "$FILE"
systemctl enable --now systemd-timesyncd
systemctl restart systemd-timesyncd
echo "===== VERIFY SYNC ====="
for i in $(seq 1 15); do
if [ "$(timedatectl show -p NTPSynchronized --value)" = yes ]; then
timedatectl
timedatectl timesync-status
echo "SUCCESS: NTP synchronized"
exit 0
fi
sleep 4
done
echo "ERROR: Synchronization failed. Restoring configuration."
if [ "$OLD" -eq 1 ]; then
mv "$FILE.bak" "$FILE"
else
rm -f "$FILE"
fi
systemctl restart systemd-timesyncd
exit 1
BASH