Proxmox - USB-Geräte in LXC-Container
Ich wurde jetzt schon mehrfach gefragt, wie man am besten die USB-Geräte (wie Zigbee-Sticks) in einen LXC-Container unter Proxmox durchreicht. Nun habe ich mir die Mühe gemacht, das Ganze in einem Video anhand von drei Beispielen zu dokumentieren. Als erstes reiche ich meinen 3D-Drucker an den OctoPrint-Container durch, danach die Webcam für die Timelapse-Erstellung und zum Schluss noch einen Zigbee-Stick für den ioBroker. Damit solltest Du erstmal alle Fälle erschlagen können. Falls nicht, gerne auf YouTube unter dem Video einen Kommentar da lassen. Alle Befehle und Infos findest Du hier im Beitrag.
Vom Prinzip wird immer per udev eine neue Datei angelegt, welche das Gerät genau identifiziert und keinen generischen Namen mehr hat. Und genau diese Datei wird dann in einen Container gemappt. Vom Prinzip eigentlich ganz einfach. Nur leider erlaubt die grafische Proxmox-Oberfläche das nicht direkt. Also muss die Shell ran. Aber auch das ist kein Problem, da ich Dir ja alle Schritte im Video zeige.
Video
3D-Drucker (Snapmaker)
Damit ich direkt aus OctoPrint drucken kann, brauche ich eine USB-Verbindung zum Drucker um die einzelnen Befehle dorthin senden zu können. Hier alle Befehle aus dem Video:
lsusb
dmesg -C
lsusb
demesg
Nachdem wir nun die VendorID und ProductID kennen, können wir eine Regel für udev anlegen. Diese kommt in folgende Datei:
nano /etc/udev/rules.d/99-usb-serial.rules
Der Inhalt sieht wie folgt aus:
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523" SYMLINK+="ttySNAPMAKER0"
KERNEL=="ttyUSB[0-9]*",MODE="0666"
Jetzt kann die neue Regel angewendet werden und wir überprüfen das Ergebnis:
udevadm trigger
ls -la /dev/tty*
Im nächsten Schritt wird die neu erstellte Datei in den Container gemappt:
cd /etc/pve/nodes/$(hostname)/lxc
ls -la
nano <id>.conf
In meinem Fall sieht der Eintrag wie folgt aus (bitte anpassen):
lxc.mount.entry: /dev/ttySNAPMAKER0 dev/ttyUSB0 none bind,optional,create=file
Nachdem der Container gestoppt und gestaret wurde, sollte alles funktionieren.
Fehlersuche
Wie Du im Video gesehen hast, hatte ich einen fehlerhaften Eintrag in der Container-Konfiguration. Mit diesen Befehlen bin ich der Sache auf den Grund gegangen:
lxc-start -n 104 -d --logfile 104-lxc.log -l debug
nano 104-lxc.log
systemctl status pve-container@104.service
Die ID des Containers muss natürlich entsprechend angepasst werden.
USB-Kamera
lsusb
dmesg -C
lsusb
demesg
udevadm info -a -n /dev/video0
Nachdem wir nun die VendorID und ProductID kennen, können wir eine Regel für udev anlegen. Diese kommt in folgende Datei:
nano /etc/udev/rules.d/99-usb-serial.rules
Der Inhalt sieht wie folgt aus:
SUBSYSTEM=="video4linux", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="0825" SYMLINK+="videoLOGITECH0"
KERNEL=="video[0-9]*",MODE="0666"
Jetzt kann die neue Regel angewendet werden und wir überprüfen das Ergebnis:
udevadm trigger
ls -la /dev/video*
Im nächsten Schritt wird die neu erstellte Datei in den Container gemappt:
cd /etc/pve/nodes/$(hostname)/lxc
ls -la
nano <id>.conf
In meinem Fall sieht der Eintrag wie folgt aus (bitte anpassen):
lxc.mount.entry: /dev/videoLOGITECH0 dev/video0 none bind,optional,create=file
Zigbee-Stick
lsusb
dmesg -C
lsusb
demesg
udevadm info -a -n /dev/ttyACM0
Nachdem wir nun die VendorID und ProductID kennen, können wir eine Regel für udev anlegen. Diese kommt in folgende Datei:
nano /etc/udev/rules.d/99-usb-serial.rules
Der Inhalt sieht wie folgt aus:
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55d4" SYMLINK+="ttyZIGBEE0"
KERNEL=="ttyACM[0-9]*",MODE="0666"
Jetzt kann die neue Regel angewendet werden und wir überprüfen das Ergebnis:
udevadm trigger
ls -la /dev/tty*
Im nächsten Schritt wird die neu erstellte Datei in den Container gemappt:
cd /etc/pve/nodes/$(hostname)/lxc
ls -la
nano <id>.conf
In meinem Fall sieht der Eintrag wie folgt aus (bitte anpassen):
lxc.mount.entry: /dev/ttyZIGBEE0 dev/ttyACM0 none bind,optional,create=file