74 lines
2.4 KiB
Markdown
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.
|