Proxmox LXC Container bei USB-Busänderung automatisch neu starten

Begonnen von betateilchen, 22 November 2025, 21:05:03

Vorheriges Thema - Nächstes Thema

betateilchen

Für Flightradar24 betreibe ich hier einen ADSB-Feeder in einem LXC-Container unter Proxmox.
Dazu habe ich ein USB-Passthrough für den verwendeten SDR-Stick eingerichtet

dev0: /dev/bus/usb/001/010,mode=0666
So weit, so gut. Nun kommt es aber vor, dass sich durch Neustart oder Änderungen an den USB Geräten am Host die Bus-Zuordnung ändert und der SDR-Stick dann einfach nicht mehr verfügbar ist. Das ist nicht ohne weiteres erkennbar. Nachdem man die Zuordnung dann korrigiert und den Container dann neu gestartet hat, funktioniert alles wieder - bis zur nächsten Änderung.

Dazu habe ich mir jetzt ein Skript zur Überwachung und automatischen Korrektur gebaut:

#!/bin/bash

USB=`lsusb |grep RTL2832U|awk '{print "dev0: /dev/bus/usb/" $2 "/" $4 ",mode=0666"}'|sed s/:,/,/`
DEV=`cat /etc/pve/lxc/110.conf |grep dev0`

if [ "$DEV" != "$USB" ];
then
 sed -i /dev0/d /etc/pve/lxc/110.conf
 echo $USB >>   /etc/pve/lxc/110.conf
 /usr/sbin/pct reboot 110
fi

#

Wird per cronjob regelmäßig aufgerufen und prüft, ob sich Container-config und USB-Bus-Liste unterscheiden. Wenn ja, wird die config angepasst und der Container neu gestartet.

Hat sich bisher gut bewährt, vielleicht kann es ja jemand gebrauchen. Das Prinzip läßt sich natürlich auch für andere USB Geräte verwenden :)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Ralli

Gruß,
Ralli

Proxmox 9 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte OpenCCU (3.83.6.20251025) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

betateilchen

#2
Hätte man vielleicht machen können.

Aber Proxmox hat halt seit 8.x die Einbindung von USB Geräten prinzipiell stark vereinfacht, indem man ein Gerät einfach als Ressource vom Host auf den Container mappen kann. In vielen Fällen funktioniert das auch problemlos und eindeutig, insbesondere bei Datenträgern und seriellen ports (z.B. zigbee). Dort kann man einfach beispielsweise /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_987dce184bbeed11b7ab642e38a92db5-if00-port0 als Ressource angeben und es ist egal, in welchem USB port der Stick steckt.

Bei dem SDR Stick ist es halt so, dass der von Haus aus nicht als Gerät unter "/dev/irgendwas..." auftaucht und es gibt die zusätzliche Herausforderung, dass die zugehörigen Kernelmodule nicht benutzt werden dürfen, wenn man ihn für das Szenario "FR24 feeder" einsetzen möchte.

Man muss eben mit dem Manko leben, dass man für den Stick den usb-port genau als Ressource angeben muss und dass sich die Nummerierung der ports zwischendurch mal ändern kann. Da fand ich das kurze Bash-Skript die schnellere Lösung, als sich mit udev rumschlagen zu müssen, was man ja mit dem ressourcen-Mapping genau umgehen wollte.

Das Skript automatisiert lediglich die beiden Schritte "ermitteln der Bus-Position" und "Mappen der Bus-Position in den Container", die man ansonsten von Hand machen würde.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!