Gateway won't boot
A newly installed gateway, or one that was working and then rebooted, powers on but never shows Online in the cloud. No heartbeat ever lands. This page is for installers on-site with physical access (or out-of-band SSH) to the gateway.
Symptom
Any or all of the following:
- The gateway has power and, for wired models, a link light on the LAN port — but the cloud Gateways page still shows the gateway as Offline.
- SSH to the gateway fails or connects to an unexpected shell banner.
- SSH works, but
systemctl status novavms-gatewayreportsinactive (dead)orfailed. - The cloud never records a first heartbeat for a newly paired gateway.
Likely causes
- Disk is full. Systemd refuses to start services when the data partition is full. Clip spooling, local logs, or container images often fill small SD cards.
- Config file corrupted or missing. A malformed
gateway.yaml(truncated by a disk-full write, edited by hand with bad YAML) stops the process at startup. - Systemd unit failed. The service binary is missing (broken update), permissions changed, or a dependency is not met.
- Bootloader or kernel corrupted. The OS itself did not come up — SSH is impossible, no login prompt on a serial console. Common after a power-loss during an OS update.
- Hardware failure. On Raspberry Pi gateways, SD-card wear is the dominant cause. Over many months of constant writes the card becomes read-only or unreadable.
- RTC battery dead. On gateways with a real-time clock coin-cell (CR2032 on many Pi HATs and mini-PCs), a dead battery means the system boots with the epoch 1970 date. TLS handshakes to the cloud then fail because the server’s certificate is “not yet valid”. Replace the coin cell and force an NTP sync on boot.
Fixes
If the disk is full
SSH to the gateway and check disk usage:
df -hIf any filesystem is 100% full (usually / or /var), free space:
sudo journalctl --vacuum-size=100Msudo du -sh /var/lib/novavms-gateway/*If the clip upload spool is backed up, expire old clips:
sudo find /var/lib/novavms/clip-spool -type f -mtime +7 -deleteThen restart the service: sudo systemctl restart novavms-gateway.
If the config file is broken
Check the unit status for a YAML parse error:
sudo systemctl status novavms-gateway --no-pagersudo journalctl -u novavms-gateway -b --no-pager | tail -50If the log shows YAML parse errors, restore the file from your deployment playbook or re-run the pairing flow with a fresh config. The config lives at /etc/novavms/gateway.yaml on the default gateway image.
If the systemd unit itself failed
sudo systemctl status novavms-gateway --no-pagerLook for:
status=203/EXEC— binary missing or not executable. Reinstall the gateway package, or re-copy the binary from your deploy target.status=1/FAILURE— the process exited non-zero on startup. Readjournalctl -u novavms-gateway -bfor the actual error.- Missing dependency (for example
go2rtc.service) — start the dependency first.
If the OS itself won’t come up
No SSH, no login prompt on a connected monitor or serial console. Your options:
- Reflash the boot medium. On a Raspberry Pi, image a fresh SD card with the gateway OS and re-pair.
- Check power. Undersized PSUs on a Pi cause boot loops. Use the manufacturer-recommended PSU.
- Inspect the SD card / SSD. A card that throws
bad blockerrors when imaged from another machine has failed; replace it.
If the hardware has failed
Swap the gateway unit. Pair the replacement using the Zero-touch provisioning flow if your deployment supports it, or re-run the first gateway install.
Verify the fix
systemctl is-active novavms-gatewayreturnsactive.journalctl -u novavms-gateway -fshows heartbeats going out.- The cloud Gateways page shows this gateway green within 60 seconds.
- Any cameras behind it transition back to Online within two minutes.
Still stuck?
- Gateway cannot reach cloud — for when the service boots but cannot connect
- Wipe a gateway — last-resort clean reinstall
- First gateway install — start over with a replacement unit
- See Ports and protocols to confirm the gateway service is trying to bind the ports your firewall permits.