Bug Report – NTP daemon not running on GLKVM firmware 1.8
Summary
On GLKVM devices (GL-RM1 / Comet) just updated with firmware v1.8, the NTP daemon (ntpd) is no longer started automatically despite the start file /etc/init.d/S49ntp.
This results in incorrect system time after boot, which breaks time-sensitive services such as WireGuard.
In firmware v1.7.x, ntpd was running by default and system time was synchronized correctly.
Impact
System clock remains incorrect after boot
WireGuard tunnels fail (handshakes rejected due to time skew)
Any TLS/time-dependent services may be affected
Device requires manual NTP sync to restore correct behavior
Observed Behavior (v1.8)
After boot:
[root@glkvm:~]# date
Thu Jan 1 00:01:42 UTC 1970
[root@glkvm:~]# ps -A | grep ntp
[root@glkvm:~]#
→ No output (ntpd not running)
[root@glkvm:~]# ss -uapn | grep ':123'
[root@glkvm:~]#
→ No output (no NTP socket)
System time is incorrect until manually synced.
Expected Behavior
As in firmware v1.7.x:
[root@glkvm:/etc]# ps aux | grep ntpd
Shows:
root (...) /usr/sbin/ntpd -g
And system time is automatically synchronized at boot.
I have seen this behavior before where NTPD will not sync when it automatically reboots after firmware update. Once manually rebooted, it works correctly.
While investigating NTP synchronization issues at boot, I observed that ntpd is restarted multiple times by the led_event_controller process. Due to this behavior, ntpd does not reliably remain running after boot, and even when running, it does not synchronize time unless additional workarounds are applied.
Detailed observations
Multiple restarts triggered by led_event_controller
By analyzing the system logs, I observed that ntpd is repeatedly restarted by led_event_controller during the boot sequence.
Final restart does not restart ntpd
For reasons that are currently unclear, during the last call to
/etc/init.d/S49ntp restart
initiated by led_event_controller, ntpd is stopped but not restarted, leaving the daemon inactive at the end of the boot process.
Workaround to keep ntpd running
To prevent ntpd from being stopped permanently, I modified /etc/init.d/S49ntp by adding:
exit 0
as the first instruction of the restart logic.
This change makes the restart operation inop and prevents repeated stop/start cycles. With this modification, ntpd remains running after boot.
Time synchronization still fails despite -g / -G
Even after ensuring that ntpd stays running, time synchronization does not occur at boot, despite starting ntpd with the -g (and even -G) options. The system clock remains at 1970.
Final workaround: explicit time bootstrap
Adding an explicit call to ntpdate as the first instruction of the start logic in /etc/init.d/S49ntp resolves the issue:
ntpdate immediately steps the clock once the network becomes available
ntpd can then operate normally and maintain synchronization
With this change in place, time synchronization works reliably after boot.
Expected behavior
ntpd should not be restarted destructively multiple times during boot.
A final restart should always result in ntpd running.
Time synchronization should succeed at boot without requiring manual intervention.
Actual behavior
ntpd is restarted multiple times by led_event_controller.
The last restart leaves ntpd stopped.
Even when running, ntpd does not synchronize time at boot without an explicit ntpdate call.
Notes
This issue appears to be a combination of:
aggressive restart behavior in led_event_controller
ntpd being started before the network stack is fully ready
Actually, NTPD is working very abnormally. It does not listen to changes in the network interface, and its time synchronization uses exponential backoff. Without manually restarting it, it simply won't sync time. This thing is poorly implemented, so we have to use the led_controller to manually restart it. Let me say it again: this thing is poorly designed. It can only function properly when paired with the led_controller
On this Buildroot-based ARMv7 system, I replaced the bundled time service with a statically linked BusyBox with the ntpd applet, and time synchronization now works reliably.
BusyBox ntpd correctly syncs once the network is up and behaves as expected on embedded systems. No hacks or manual restarts needed.
[root@glkvm:~]# ls -l /bin/ntpd
lrwxrwxrwx 1 root root 19 Feb 2 18:23 /bin/ntpd -> /bin/busybox-armv7l
[root@glkvm:~]# head -n10 /etc/init.d/S49ntp
#! /bin/sh
NAME=ntpd
#DAEMON=/usr/sbin/$NAME
DAEMON=/bin/$NAME
[root@glkvm:~]# date
Mon Feb 2 18:32:25 UTC 2026
Since you are already using busybox, may be you can consider this solution.
Same behavior I have observed with 1.8.0. NTP does not sync after firmware upgrade. Manually rebooting NTP starts to sync, but I disable the LED status daemon via a start script