VM-Guest-Agent Self-Update kaputt: CTs laufen in qemu-Fallback (config does not exist) + Gast lädt Binary vom unerreichbaren Backend statt vom Node-Agent (9101) + FreeBSD curl/wget #52
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Symptom
VM-Guest-Agent-Self-Update schlägt fehl — zwei verschiedene Fehlerpfade:
CTs (108/109/112):
FreeBSD (VM 100):
Root Cause (alles im Node-Agent)
Ablauf:
vm.self_update_all→update_one(Node-Agent/src/vm_self_update.rs). TCP-Relayvm.self_updatean den Gast; sonstqemu_fallback.qemu_fallback: Wennlatest_versionleer ist oder kein Reconnect in 25 s kommt, läuftupdate_oneinqemu_fallback, derqm::qm_agent_osinfo/qm_agent_execnutzt → Pfad/nodes/<node>/**qemu**/<vmid>/.... Für einen LXC existiert das nicht → „qemu-server/.conf does not exist".qemu_fallbackist CT-unaware.send_fire_and_forgetübergibt alsserver_urldie Backend-HTTP-Base (http_base, 172.16.1.14:8765). Isolierte Gäste (z. B. pfSense/FreeBSD) haben keine Route dorthin →fetchTimeout. Dabei serviert der Node-Agent Binaries selbst auf Port 9101 (vm_binaries.rs,HTTP_PORT=9101) — und den erreicht der Gast (er ist ja auf 9100 mit ihm verbunden).curl/wget(gibt's auf FreeBSD-Base nicht) — nurfetchist vorhanden.Fix
1. Binary vom Node-Agent servieren, nicht vom Backend (#49 revidieren)
send_fire_and_forget/update_onealsserver_urldie eigene 9101-Base des Node-Agents übergeben (die Adresse, über die der Gast den Agent ohnehin erreicht), nichthttp_base(Backend). Der 9101-Cache wird ja bereits perspawn_refresh_loopvom Backend befüllt. → behebt den FreeBSD-Timeout und ist robust für alle isolierten Gäste.2.
qemu_fallbackCT-aware machenVor dem qemu-Pfad prüfen, ob
vmidein LXC ist (proxmox::get_cts()enthält ihn /pct configerfolgreich). Wenn CT → Update viapct exec <vmid> -- sh -c "…"(Kanal 1) stattqm_agent_exec. Für LXC nie den qemu-Pfad. (Gemeinsameris_ct(vmid)-Helper mit #51 sinnvoll — gleiche Wurzel.)3. FreeBSD-Downloader
Im FreeBSD-Self-Update-Pfad
fetch -o <ziel> <url>verwenden (curl/wget nicht voraussetzen); Reihenfolge z. B.command -v fetch && fetch …vor curl/wget.4.
latest_versionprüfenWenn
_read_vm_agent_latest_version()leer zurückgibt, läuft alles in den Fallback (siehe #28-Umfeld). Sicherstellen, dass die Version sauber ermittelt wird, damit der TCP-Pfad verifizieren kann und CTs gar nicht erst in den qemu-Fallback müssen.Akzeptanz
fetch— kein Timeout, kein curl/wget-Fehler.cargo buildgrün (FreeBSD-Target mit beachten).Bezug
Teilt die CT-/qemu-Pfad-Wurzel mit #51 (dort Paket-Update, hier Agent-Self-Update) — gemeinsamer
is_ct/pct-exec-Helper.Branch
fix/vm-agent-self-update-ct-and-binary-source