diff options
-rwxr-xr-x | builder/modules.d/slx-clock/scripts/ntp-sync.sh | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/builder/modules.d/slx-clock/scripts/ntp-sync.sh b/builder/modules.d/slx-clock/scripts/ntp-sync.sh new file mode 100755 index 00000000..887d5b13 --- /dev/null +++ b/builder/modules.d/slx-clock/scripts/ntp-sync.sh @@ -0,0 +1,55 @@ +#!/bin/ash +# Sync time via network + +. /etc/openslx + +ntp_sync() { + # Try to merge with servers from DHCP. Prefer DHCP, skip duplicates + for SERVER in $SLX_NTP_SERVER; do + if ! echo "$SLX_DHCP_NTP" | grep -wq "$SERVER"; then + SLX_DHCP_NTP="$SLX_DHCP_NTP $SERVER" + fi + done + local SUCCESS= + for SERVER in $SLX_DHCP_NTP; do + if ntpdate -u -p 2 "$SERVER"; then + echo "Successfully queried $SERVER for time." + if [ "x$SLX_BIOS_CLOCK" = "xlocal" ]; then + usleep 100000 + hwclock -l -w || echo "... but could not set BIOS clock to localtime" + elif [ "x$SLX_BIOS_CLOCK" = "xutc" ]; then + usleep 100000 + hwclock -u -w || echo "... but could not set BIOS clock to UTC" + fi + SUCCESS=1 + break + fi + echo "Error querying $SERVER for current time." + done + if [ -z "$SUCCESS" ]; then + echo "No NTP server reachable" + # See if we have a timestamp in our server-config - should only be a few seconds off by now + if [ -n "$SLX_NOW" ] && [ "$SLX_NOW" -gt 1234567890 ]; then + TTS="$SLX_NOW" + if [ -n "$CONFIG_DOWNLOAD_TIME" ]; then + NOW_TIME=$(sed -r 's/^([0-9]+)\.([0-9]+).*$/\1\2/' /proc/uptime) + if [ "$CONFIG_DOWNLOAD_TIME" -gt 0 ] && [ "$NOW_TIME" -gt 0 ]; then + TTS=$(( TTS + ( NOW_TIME - CONFIG_DOWNLOAD_TIME ) / 100 )) + fi + fi + echo "Setting time to SLX_NOW ($SLX_NOW, corrected $TTS)" + date -s "@$TTS" + else + echo "No fallback option for timesync available, relying on correct RTC setup" + if [ "x$SLX_BIOS_CLOCK" = "xlocal" ]; then + # Linux defaults to RTC = UTC, so read again in this case + hwclock -l -s + fi + fi + fi +} + +ntp_sync & + +true + |