Vorschau

Proxmox: USB Passthrough für LXC Container (Z-Wave UZB1)

Proxmox: USB Passthrough an LXC Container (UZB-1 Z-Wave USB Stick)

Zusätzlich zum Proxmox und Proxmox: LXC Tutorial möchte ich heute gerne zeigen, wie man einen USB Stick zu einem Container durchreicht. Ich habe so meinen UZB1 Z-Wave USB Stick zu einer LXC mit Ubuntu und FHEM durchgereicht. Analog dazu kannst du jeden CUL oder andere USB-Geräte durchreichen.

Inhalt

Vorbereitungen in Proxmox

Als erster wählen wir uns über SSH in unseren Proxmox Server ein.

Nun stoppen wir den LXC Container, an den das USB-Gerät durchgereicht werden soll

Die Nummer enspricht deiner VM / LXC – ID in Proxmox. Diese findest du im Proxmox Webinterface heraus

Mit folgendem Befehl kannst du nun die verbundenen USB-Geräte auflisten. Es empfiehlt sich zuerst eine Auflistung ohne eingesteckten USB-Stick anzufertigen und dann nochmal, nachdem der Stick eingsteckt wurde

Wie du auf dem folgendem Screenshot erkennen kannst, heißt mein UZB1 Stick „Sigma Designs, Inc. und hat die BUS Nummer 1 und Device Nummer 18. Du hast vermutlich eine andere Nummer -> notiere dir diese.

Shell Screenshot

Mittels folgendem Befehl kannst du nun den DeviceTree anzeigen. Wichtig: Trage hier deine BUS und DEVICE Nummer ein

Es werden erneut zwei Zahlen ausgegeben, wobei nur die erste für uns relevant ist

crw-rw-r– 1 root root 189, 17 Jul 12 18:35 /dev/bus/usb/001/018

Die Nummer 189 notierst du dir ebenfalls. Als nächstes müssen wir die Konfigurationsdatei für den LXC Container finden und editieren. Höchstwahrscheinlich findest du deine Konfigurationsdatei unter /etc/pve/nodes/pve/lxc – Schaue dazu am besten noch im Proxmox Webinterface welche ID dein Container hat.

Mit folgendem Befehl wechselst du in den Ordner mit den Konfigurationsdateien

mit „ls“ kannst du dir dann den Ordnerinhalt anzeigen lassen

Shell Screenshot


Hier fügen wir folgende Zeilen am Ende der Datei ein

Trage hier entsprechend die BUS und Devicenummer, sowie die Nummer bei der Ausgabe von ls -l /dev/bus ….. ein

In meinem Fall mit dem UZB1 hat das aber noch nicht ausgereicht. Es wird ein Gerät mit dem Namen ttyACM0 angelegt. Dieses müssen wir ebenfalls durchreichen

Führe folgenden Befehl aus und notiere dir wieder die erste Nummer

Dann bearbeiten wir nochmal die LXC Konfig-Datei:

Und fügen am Ende nochmal zwei Zeilen hinzu

Am Ende sieht die Konfig-Datei in etwas so aus:

Dann statten wir das Gerät ttyACM0 noch mit den nötigen Rechten aus

Zuletzt starten wir den LXC Container erneut und können im nächsten Punkt überprüfen, ob alles soweit geklappt hat

Überprüfung im Container

Verbinde dich mittels SSH mit deinem LXC

mit „lsusb“ kannst du dir auch hier die USB-Geräte anzeigen lassen. Ob das Gerät ttyACM0 angelegt wurde erfährst du unter den Devices:

Shell Screenshot


Fazit

Zugegeben, ein wenig kompliziert ist es leider schon, allerdings funktioniert es wirklich einwandfrei. Wenn du dieses Tutorial auch bei anderen Geräte erfolgreich getestet hast würde ich mich über einen kurzen Kommentar freuen und könnte dies diesem Artikel hinzufügen.

Über den Author

Emanuel

teilt seine Begeisterung im Bereich Technik, DIY und Hausautomatisierung gerne auf seinem Blog coldcorner.de

Comments 17

  1. Hallo Emanuel, ich habe alles genau so gemacht wie beschrieben. Installiert habe ich Debian 9.3. Jetzt wollte ich einen USB Stick wie hier beschrieben durchreichen. Leider scheitert es schon an dem ersten Befehl „pct stop 102“. Es kommt dann „command not found.“ Auch der Befehl lsusb wird mit „command not found“ beantwortet. Hast du eine Idee woran es liegen könnte.

    1. Post
      Author

      Hey! Gibst du den Befehl pct stop 102 in der Proxmox Konsole ein? Ich schätze du bist in der falschen Shell, die beiden Befehle müssen funktionieren.
      lg

  2. Hallo,

    ich steige gerade vom Raspy auf einen Nuc8i3 um. Von diesem Blog inspiriert nutze ich Proxmox und LXC. Das hat soweit auch geklappt und fhem läuft bereits.

    Jetzt versuche ich den JeeLink vom Raspberry an den Nuc zu bekommen und bin dabei wie oben beschrieben vorgegangen. Leider stoße ich hier aber auf Probleme.

    lsusb funktioniert noch und bringt folgende Antwort

    Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Bus 001 Device 003: ID 8087:0aaa Intel Corp.
    Bus 001 Device 002: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

    Dabei ist der Future Technology Devices International der JeeLink

    Bei ls -la /dev/ttyACM* treten Probleme auf und ich bekomme folgende Antwort:

    ls: cannot access ‚/dev/ttyACM*‘: No such file or directory

    ls -la /dev/ttyUSB* sieht dann wieder besser aus:

    crw-rw—- 1 root dialout 188, 0 Feb 19 11:54 /dev/ttyUSB0

    Laut Anleitung benötige ich aber auch die Werte der ttyACM abfrage.

    Hast Du eine Idee weshalb bei mir hier die Fehlermeldung kommt und wie ich das Problem lösen kann?

    1. Hallo Andy,
      bist du weiter gekommen? Habe ein ähnliches Problem mit einem 3D-Drucker…

      Bzgl. fhem habe ich das so gelöst, dass ich fhem unter proxmox laufen habe und den CUL an einem Raspi mit Raspbian. Den CUL kannst du dann mit ser2net o.Ä. an die VM weiterreichen. Damit hast du dann die Performace der VW und den CUL trotzdem angebunden (ggf. sogar dezentral, das war bei mir der ausschlaggebende Punkt – großer Server steht im Keller und CUL aufgrund der Reichweite im Erdgeschoss).

      Viele Grüße
      Felix

    2. Hi,

      ich habe da ein ähnlich gelagertes Problem. Ich hatte testweise einen CUL von meinem (noch produktiven) Raspberry Pi abgezogen und mittels dieser Anleitung auch durchgereicht bekommen. Nun habe ich das gleiche (der CUL steckt inzwischen wieder im Raspi) mit einem Bluetooth-Stick probiert.
      Der BT-Stick hat die gleichen Daten, wie vorher der CUL (gleicher Steckplatz), in meinem Fall 002/002, nach Umstecken in einen anderen Port dann 002/003.

      root@pve:~# lsusb
      Bus 001 Device 002: ID 8087:8001 Intel Corp.
      Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
      Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
      Bus 002 Device 003: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
      Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

      ls -l /dev/bus/usb/002/003 liefert dann aber ein unerwartet Ergebnis:
      crw-rw-r– 1 root root 189, 130 Jun 6 08:22 /dev/bus/usb/002/003
      Hier werden also zwei Nummern ausgegeben, die 189 hatte ich auch beim CUL (und nur die) angezeigt bekommen. Daher habe ich mal vermutet, dass 130 hier die richtige Nummer wäre.

      DIe 100.conf sieht so aus:
      lxc.cgroup.devices.allow: c 130:* rwm
      lxc.mount.entry: /dev/bus/usb/002/003 dev/bus/usb/002/003 none bind,optional,create=file

      Aber ls -la /dev/ttyACM* liefert mir dann das gleiche Ergebnis wie bei Andy.

      1. Post
        Author

        Hallo Arne, sorry für die späte Antwort. Also mit einem Bluetooth-Dongle hatte ich auf meine Probleme, hab es dann letztendlich aufgegeben weil ich mehrfach gelesen habe dass es nicht geht 🙁
        Wenn du doch eine Lösung findest würde ich mich freuen
        lg

  3. Hallo,
    ich habe das gleiche Problem wie Andy, mit eine zigbee stick (von dresden eletronik).
    irgendwie komme ich nicht weiter. Habt ihr inzwischen eine Lösung gefunden?
    Gruß Stephan

  4. Hallo ich noch mal,
    ich bin noch nicht so richtig weiter gekommen. Das Thema Bluetooth habe ich erstmal dran gegeben, ist auch nicht so wichtig. Wichtig wäre mir aber, mehrere USB-Sticks durchzuschleifen. Neben einem zigbee2mqtt-Stiick muss da noch ein CUL dran.
    Ich kann mich drehen und wenden wie ich will, ALLE Sticks bekommen die gleiche Nummer (189) und unterscheiden sich nur durch das, was dahinter kommt (129; 132, 133).
    lsusb liefert:
    Bus 001 Device 002: ID 8087:8001 Intel Corp.
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Bus 002 Device 006: ID 03eb:204b Atmel Corp. LUFA USB to Serial Adapter Project
    Bus 002 Device 005: ID 03eb:204b Atmel Corp. LUFA USB to Serial Adapter Project
    Bus 002 Device 002: ID 0451:16a8 Texas Instruments, Inc.
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

    Im Moment sind sogar drei Sticks angeschlossen, einer davon kommt wieder raus.
    Mit ls -l /dev/bus/usb/002/00* erhalte ich
    root@pve:/etc/pve/nodes/pve/lxc# ls -l /dev/bus/usb/002/00*
    crw-rw-r– 1 root root 189, 128 Jun 11 14:04 /dev/bus/usb/002/001
    crw-rw-r– 1 root root 189, 129 Jul 15 11:14 /dev/bus/usb/002/002
    crw-rw-r– 1 root root 189, 132 Jul 15 11:57 /dev/bus/usb/002/005
    crw-rw-r– 1 root root 189, 133 Jul 15 11:58 /dev/bus/usb/002/006

    Da scheint noch der BT-Dongle bei zu sein, den habe ich aber schon wieder gezogen. Frage ist, kann ich mit den BEIDEN Zahlen irgendetwas anfangen? Nur die zweite Nummer zu verwenden bringt keinen Erfolg.

    LG,
    Arne

  5. Hallo,
    funktioniert sehr gut bei mir.
    Allerdings muss ich nach jedem Reboot vom Proxmox Server chmod o+rw /dev/ttyACM0 ausführen.
    Gibt es eine permanente Lösung?
    Gruß Arne

  6. hier ebenfalls DresdenElektronik Conbee Stick. Einschließlich hier gehts nicht weiter: chmod o+rw /dev/ttyACM0. Jemnd eine Lösng?

  7. Ich steige gerade vom einem Raspi auf einen Zotac mit Proxmox um.
    Bei mir funktioniert es so:
    wenn bei Euch ls -la /dev/ttyUSB* statt ls -la /dev/ttyACM* funktioniert, dann muss die letzte Zeile in der xxx.conf
    lxc.mount.entry: /dev/ttyUSB0 dev/ttyUSB0 none bind,optional,create=file
    statt
    lxc.mount.entry: /dev/ttyACM0 dev/ttyACM0 none bind,optional,create=file
    sein.
    So hat es zumindest bei mir funktioniert.
    lg

  8. Hi,

    danke für die Anleitung, funktioniert für meinen CC2531 sehr gut. Nach einem Reboot des Proxmox Hosts, muss ich jedoch die Rechte per CHMOD neu setzen.
    Weißt du wie ich das automatisch nach dem Reboot setzen kann?
    Gruß,
    Stefan

    1. Post
      Author

      Hi,

      leider hatte ich ähnliche Probleme, jedoch hat es bei mir die Rechte verloren nach einem Neustart. Ich konnte das Problem nicht lösen, daher läuft der Z-WAVE Stick bei mir wieder in einer VM ohne Probleme.

      lg

  9. Hi,

    Ich hab bei meinem Stick Aeon Lab S2 ein Problem, alle paar Tage verliert er im Container unter /dev/Zwavestick und ttyAMC seine rechte . Ich muss den Container dann Neustarten, danach funktioniert er wieder. Hast ähnliche Probleme beobachtet?

    1. Post
      Author

      Hi,

      leider hatte ich ähnliche Probleme, jedoch hat es bei mir die Rechte verloren nach einem Neustart. Ich konnte das Problem nicht lösen, daher läuft der Z-WAVE Stick bei mir wieder in einer VM ohne Probleme.

      lg

  10. Hallo Emanuel
    Bei mir läuft der Iobroker in einem Container unter Proxmox. Der ZigbeStick im Raspberry läuft super. Da ich mit dem System
    umziehe, habe ich alles nach deiner Anleitung gemacht. Scheint alles soweit geklappt zu haben, die Einträge habe ich auch in der 202.conf. Aber ttyACM0 wird unter /dev nicht erstellt.?? Da ich eher keine Ahnung von der Materie habe, weiss ich auch nicht wo ich suchen soll. Kannst du mir weiterhelfen?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.