initial commit
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user