Proposal about NTP in cnMaestro On-Premise
Context
During the installation and operation of cnMaestro On-Premise, the following error appears even though system time synchronization works correctly:
Failed to enable unit: Unit file /etc/systemd/system/ntp.service is masked.
This issue occurs on modern Linux distributions where Chrony is used instead of the legacy ntpd service.
Root Cause
-
The cnMaestro On-Premise installer explicitly expects the presence of the
ntp.serviceunit (used by the classic ntpd daemon). -
On recent Debian/Ubuntu versions, the Chrony package replaces
ntpdand masks thentp.serviceunit to prevent conflicts. -
As a result, cnMaestro cannot enable
ntp.service, even though Chrony is correctly installed, running, and synchronizing system time.
Workaround Implemented
-
Verified that Chrony was running and synchronized correctly:
systemctl status chronyd chronyc tracking chronyc sources -v ss -ulpn | grep chronyd→ Chrony was active, synchronized with external servers (e.g.,
time2.google.com), and listening on UDP port 123. -
Created a dummy compatibility service for
ntp.serviceso cnMaestro could detect an “NTP service” without interfering with Chrony:sudo bash -c 'cat > /etc/systemd/system/ntp.service <<EOF [Unit] Description=Compatibility NTP service (redirected to Chrony) After=network.target chrony.service Requires=chrony.service [Service] Type=oneshot ExecStart=/bin/true RemainAfterExit=yes [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable ntp systemctl start ntp '→ This allowed
systemctl enable ntpto succeed and prevented the “masked” error. -
Reactivated Chrony as the real NTP engine:
systemctl disable ntp systemctl stop ntp systemctl start chronyd systemctl enable chrony -
Outcome:
-
cnMaestro installer completes successfully (no more NTP enablement error).
-
Chrony continues handling time synchronization properly.
-
However, the cnMaestro web admin still reports “NTP not synchronized”, likely because it checks for
ntpdrather thanchronydor system time status.
-
Suggested Improvements for Cambium Networks
-
Update cnMaestro On-Premise’s NTP detection logic to:
-
Accept both
chronydandntpdas valid synchronization services. -
Query synchronization status using:
timedatectl show | grep NTPSynchronizedor
chronyc trackingwhenntpdis not present. -
Avoid hard-coded calls to
systemctl enable ntp.
-
-
Add an option during setup or in the admin UI to select the system time backend:
-
Use systemd-timesyncd -
Use chrony -
Use ntpd
-
-
Avoid masking/unmasking NTP-related services automatically during installation, as this may disrupt correctly configured time services on modern systems.
Final State after Workaround
| Component | Status | Notes |
|---|---|---|
chronyd |
Active (running) | Synchronizing with external NTP sources |
ntp.service |
Dummy service (active/exited) | Exists to satisfy cnMaestro installer |
| cnMaestro | Installer passes without error | Web UI still shows “Not synchronized” |
Summary:
cnMaestro On-Premise currently only recognizes ntpd as the system time service. Modern distributions use Chrony by default, leading to false synchronization errors and failed service enablement.
Updating cnMaestro to detect and support Chrony (or systemd-timesyncd) would improve compatibility and reliability on current Linux platforms.
thank you