2.4 KiB
Cockpit: "Cannot refresh cache whilst offline" / PackageKit + NetworkManager Fix
Symptom
Cockpit's Updates page shows:
Loading available updates failed — Cannot refresh cache whilst offline
Yet the system has full internet connectivity — ping, curl, and apt update all work.
Root Cause
On Ubuntu Server, systemd-networkd handles networking, but PackageKit (Cockpit's backend for the updates page) checks NetworkManager's D-Bus state to determine if the system is online.
When NM is installed but has no connection profile configured (because systemd-networkd is doing the actual networking), NM reports:
STATE: disconnected CONNECTIVITY: none
PackageKit sees this and refuses to refresh the cache — even though the interface is up and routable via systemd-networkd.
Diagnosis
# NM says disconnected even though networking works
nmcli general status
# → STATE: disconnected CONNECTIVITY: none
# But systemd-networkd is fine
networkctl status
# → State: routable
# → Online state: partial
# PackageKit confirms it thinks we're offline
busctl get-property org.freedesktop.PackageKit /org/freedesktop/PackageKit org.freedesktop.PackageKit NetworkState
# 0 = Offline, 1 = Limited, 2 = Online
Fix
Since systemd-networkd is doing all the networking, NetworkManager is redundant. Stop and mask it:
sudo systemctl mask NetworkManager --now
Then restart PackageKit so it re-checks the network state without NM:
sudo systemctl restart packagekit
sleep 2
busctl get-property org.freedesktop.PackageKit /org/freedesktop/PackageKit org.freedesktop.PackageKit NetworkState
# → u 2 (Online)
After this, reload Cockpit's updates page — it should work.
Verification
# PackageKit should now report Online
busctl get-property org.freedesktop.PackageKit /org/freedesktop/PackageKit org.freedesktop.PackageKit NetworkState
# Expected: u 2
# Confirm networking still works
ping -c 1 8.8.8.8
curl -s --max-time 5 https://google.com -o /dev/null -w "%{http_code}"
Why This Happens
Ubuntu Server 24+ ships with both systemd-networkd and NetworkManager installed. The server installer configures networkd, not NM. But NM's service is still present and starts, sees no connections, and reports "offline." PackageKit only knows how to check NM — it has no fallback for systems that don't use NM.
Masking NM is safe and standard on systems where networkd handles all interfaces.