Files
hermes-config/skills/devops/server-health-check/references/cockpit-offline-packagekit-fix.md
T
2026-07-12 10:17:17 -04:00

74 lines
2.4 KiB
Markdown

# 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
```bash
# 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:
```bash
sudo systemctl mask NetworkManager --now
```
Then restart PackageKit so it re-checks the network state without NM:
```bash
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
```bash
# 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.