Jump to content

Probleme mit LXC Plugin und USB durchreichen / passthrough


FlorianHE
Go to solution Solved by ich777,

Recommended Posts

Hallo. Ich habe die Tage ein wenig mit dem LXC Plugin herumprobiert und bin auf ein Problem gestoßen wo ich nicht weiter komme. 

Mein Plan ist später mal meine Hausautomation komplett in einen LXC Container umzulagern. Um aber erstmal zu wissen wie so ein LXC Container Funktioniert wollte ich meinen Repetier Server aus der VM in so einen Container umlagern. 

 

Dazu habe ich einen Debian Container erstellt und den Repetier Server installiert. Das hat soweit wunderbar geklappt. Jetzt müssen nurnoch meine Drucker im Container ankommen. Und da komme ich gerade nicht weiter. 

 

Meine 3 Drucker hängen in meinem Büro an einem RaspberryPi der als USBIP Host dient und ich reiche die Drucker dann mithilfe des USB Manager Plugins an meine VM weiter. 

Und das wollte ich jetzt mit dem Container genau so machen. 

 

Eigentlich ist das ja ganz einfach: 

meine 3 Drucker sind unter: /dev/bus/usb/005/006 /dev/bus/usb/005/007 und /dev/bus/usb/005/008 verfügbar. Und auch als ttyUSB1 ttyUSB2 und ttyUSB3

 

der Befahl "ls -l /dev/bus/usb/005" sagt mit das ich die gerätekennung "189" erlauben muss. 

 

lxc.cgroup.devices.allow = c 189:* rwm

 

und dann muss ich ja nurnoch die 3 Geräte durchreichen
 

lxc.mount.entry = /dev/bus/usb/005/006 dev/bus/usb/005/006 none bind,optional,create=file
lxc.mount.entry = /dev/bus/usb/005/007 dev/bus/usb/005/007 none bind,optional,create=file
lxc.mount.entry = /dev/bus/usb/005/008 dev/bus/usb/005/008 none bind,optional,create=file

 

aber leider werden die Drucker nicht erkannt. 

 

Ich habe auch mal testweise mal noch ttyUSB 1-3 durchgereicht. Das hat leider auch nix gebracht. 

lxc.cgroup.devices.allow = c 188:* rwm
lxc.mount.entry = /dev/ttyUSB1 dev/ttyUSB1 none bind,optional,create=file
lxc.mount.entry = /dev/ttyUSB2 dev/ttyUSB2 none bind,optional,create=file
lxc.mount.entry = /dev/ttyUSB3 dev/ttyUSB3 none bind,optional,create=file

 

Dann dachte ich doch das es eventuell an den rechten liegt. Deswegen habe ich noch mit dem Befehl "chmod o+rw /dev/ttyUSB1" die Rechte geändert. aber auch das brachte keinen erfolg. 

 

Da ich in meiner Repetier Server VM Die Drucker per "dev/serial/by-path/" anspreche habe ich auch das mal probiert. Aber auch das hat nicht Funktioniert.

lxc.cgroup.devices.allow = c 188:* rwm
lxc.mount.entry = /dev/serial/by-path/platform-vhci_hcd.0-usb-0:1:1.0-port0 dev/serial/by-path/pci-0000:00:07.1-usb-0:1:1.0-port0 none bind,optional,create=file
lxc.mount.entry = /dev/serial/by-path/platform-vhci_hcd.0-usb-0:2:1.0-port0 dev/serial/by-path/pci-0000:00:07.1-usb-0:2:1.0-port0 none bind,optional,create=file
lxc.mount.entry = /dev/serial/by-path/platform-vhci_hcd.0-usb-0:3:1.0-port0 dev/serial/by-path/pci-0000:00:07.1-usb-0:3:1.0-port0 none bind,optional,create=file

 

 

Ich habe diese 3 Anleitungen gefunden die ich probiert habe. Aber alle 3 brachten keinen Erfolg. 

https://forums.unraid.net/topic/123935-plugin-lxc-plugin/
https://homematic-forum.de/forum/viewtopic.php?t=48361
https://coldcorner.de/2018/07/12/proxmox-usb-passthrough-fuer-lxc-container-z-wave-uzb1/

 

Kann das eventuell sein das man USBIP geräte nicht an einen LXC Container durchreichen kann ? 

 

config tvserver-v2-diagnostics-20231217-2102.zip

Link to comment
  • Solution
15 minutes ago, FlorianHE said:
lxc.cgroup.devices.allow = c 189:* rwm

Unraid nutzt cgroup v2 nicht cgroup v1 also müsste es heißen (im support Thread ist das jetzt mittlerweile veraltet da früher cgroupv1 verwendet wurde und mit der umstellung auf 6.11.0 dann cgroupv2 als Standard gesetzt wurde) :

lxc.cgroup2.devices.allow = ...

 

Hab die posts im support thread mal angepasst.

 

Bei deinen Beispielen musst du sicherstellen wenn ud den container normal startest das auch der Pfad vorhanden ist wo deine mounts hinzeigen weil nur die Datei selbst erstellt wird.

 

Du kannst deinen container auch im "Vordergrund" von einem Unraid Terminal aus starten und dann siehst was nicht passt bzw. bekommst du eine Fehlermeldung warum er nicht startet:

lxc-start -F <CONTAINERNAME>

 

 

Beim mir hier läuft zB Homeassistant komplett im LXC und bin wesentlich zufriedener als mit den Docker container die verfügbar sind, der Zigbee Stick bei mir hängt an einem RockPi E auf dem Zigbee2MQTT läuft und das wird wiederum in Homeassistant eingebunden.

Link to comment

 

4 hours ago, ich777 said:
lxc.cgroup2.devices.allow = ...

Vielen Dank. Das war das Problem. 

 

komischerweise hat das durchreichen des pfades "/dev/bus/usb/005........" nicht funtioniert.

 

Dafür habe 2 Wege gefunden wie ich meine Drucker zum laufen bekommen habe. Ich poste gleich mal die Vorgehensweise. Bevor ichs wieder vergesse :)

 

VARIANTE 1:

Schritt 1: USB Gerät herausfinden: 

 - Das geht am einfachsten über den USB Manager: 

USB-Manager.thumb.PNG.e74bf395bf03a6f33e893d3bc659c3d8.PNG

klickt man auf das Blattsymbol vom USB Gerät öffnet sich eine Ausgabe in der man das USB Gerät ablesen kann 

Ausgabe.PNG.0d01d3c77f36a66e68ee755bc928477e.PNG

 

Schritt 2: USB-Gerät rechte ändern: 

chmod o+rw /dev/ttyUSB1

 

Schritt 3: ID herausfinden: 

z.b. für ttyUSB1:

ls -l /dev/ttyUSB1

1421678900_gertenummer.PNG.786c70c6458df94c1b3c9d8289ef1399.PNG

 

in meinem Fall ist das dann die "188"

 

Schritt 4: Config vom LXC Container anpassen:

#USB configuration
lxc.cgroup2.devices.allow = c 188:* rwm
lxc.mount.entry = /dev/ttyUSB1 dev/ttyUSB1 none bind,optional,create=file

 

VARIANTE 2:

- Da immerwieder die zuordnung der Drucker anders ist (Drucker 1 ist mal ttyUSB1 und dann mal ttyUSB2) habe ich einen 2. Weg versucht der die Drucker Eindeutig zuordnet indem eigene Devices erzeugt werden über eine udev Regel

 

Schritt 1: USB Gerät herausfinden: Genau so wie bei Variante 1

Schritt 2: Filter heraussuchen: 

- für die Regel müssen Filter definiert werden dazu muss in der Konsole des hosts folgender Befehl eingegeben werden:

udevadm info --name=/dev/ttyUSB1 --attribute-walk

 

in der Ausgabe müssen jetzt Filter gesucht werden die die Geräte eindeutig idendifizieren. z.b. diese:

ATTRS{idVendor}=="1b1f" 
ATTRS{idProduct}=="c020" 
ATTRS{serial}=="3014***************"

 

bei mir war das aber leider so das 2 Drucker genau die gleiche "idProduct" und "serial" hatte und somit auch nicht eindeutig idendifiziert werden konnte. Deswegen musste ich anstatt "idProduct" "devpath" verwenden. Da ich die Drucker an meinem Raspi USBIP Host nie umstecke hoffe ich mal das das immer gleich bleibt. 

 

Schritt 3: udev Regel erstellen :

-dazu muss auf dem Host unter /etc/udev/rules.d/  die Regeldatei angelegt werden. z.b. so: 

nano /etc/udev/rules.d/99-usb-serial.rules

 

jetzt müssen in der Datei die Regeln eingetragen werden: 

 

#USB1
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{devpath}=="1", ATTRS{serial}=="0001", SYMLINK+="print-usb1"

#USB2
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{devpath}=="2", ATTRS{serial}=="5282b3e8f3b6e7119058b350d4b43ea0", SYMLINK+="print-usb2"

#USB3
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{devpath}=="3", ATTRS{serial}=="0001", SYMLINK+="print-usb3"

 

Schritt 4: Regeln Aktivieren:

mit diesem Befehl werden die neuen Regeln angewendet.

udevadm trigger

 

jetzt sollten die neuen USB Geräte auftauchen. Das Anpassen der Rechte ist nicht erforderlich

linkNeu.PNG.01e3b6d47e7a1c1eb57e3d475f833dfc.PNG

 

 Schritt 5: ID herausfinden: 

hier muss die gleiche ID herausgefunden werden wie bei Variante 1 z.b. für ttyUSB1:

ls -l /dev/ttyUSB1

1421678900_gertenummer.PNG.786c70c6458df94c1b3c9d8289ef1399.PNG

 

Schritt 6: Config vom LXC Container anpassen:

#USB configuration
lxc.cgroup2.devices.allow = c 188:* rwm
lxc.mount.entry = /dev/print-usb1 dev/ttyUSB1 none bind,optional,create=file

 

 

Variante 2 hat mir geholfen die 3 Drucker immer gleich zu zuordnen auch wenn sie in unterschiedlicher Reihenfolge per USBIP eingebunden werden. 

Was ich noch nicht genau weis ob die Regel Datei vorhanden bleibt wenn der Unraid Server neu gestartet wurde. 

 

Kleiner Hinweis: Änderungen in der config werden nur wirksam wenn der Container gestoppt wird und dann wieder gestartet. Ein reiner neustart reicht nicht aus.

Link to comment
5 hours ago, FlorianHE said:

Variante 2 hat mir geholfen die 3 Drucker immer gleich zu zuordnen auch wenn sie in unterschiedlicher Reihenfolge per USBIP eingebunden werden. 

Was ich noch nicht genau weis ob die Regel Datei vorhanden bleibt wenn der Unraid Server neu gestartet wurde. 

Sorry aber ist das nicht over engineered? :D

Warum installierst du dir nicht im LXC einfach USBIP und bindest dann dort die Geräte ein, das wäre doch viel, viel, viel einfacher...

 

5 hours ago, FlorianHE said:

Kleiner Hinweis: Änderungen in der config werden nur wirksam wenn der Container gestoppt wird und dann wieder gestartet. Ein reiner neustart reicht nicht aus.

Du meinst über die WebGUI? Eigentlich sollte das keinen Unterschied machen weil die WebGUI macht einfach ein lxc-stop und dann ein lxc-start, hab ich aber ehrlich gesagt noch nie probiert.

Link to comment
1 hour ago, ich777 said:

Warum installierst du dir nicht im LXC einfach USBIP und bindest dann dort die Geräte ein, das wäre doch viel, viel, viel einfacher...

 

 

Das hatte ich auch versucht bevor ich diesen request gestartet habe. Leider hat das nicht funktioniert.

Wenn man das Kernel Modul laden möchte mit 

modprobe vhci-hcd

modprobe vhci-hcd

 kommt der Fehler das modprobe nicht gefunden wird. 

 

Das abfragen hat zwar funktioiert: 

usbip list -r mein-rechner

 

aber wenn ich dann mit: 

usbip attach -r mein-rechner -b 1-1

 ein USB Gerät einbinden möchte kommt ein Fehler. 

Ich vermute mal weil das Kernel Modul nicht geladen ist. 

 

Ich erkläre mir das so das ja der LXC Container direkt auf den Kernel vom Unraid zugreift und deswegen ja kein Kernel modul im LXC Container geladen werden kann.  

Link to comment
1 minute ago, FlorianHE said:

modprobe vhci-hcd

Weil es am Host geladen werden muss und geladen sein muss.

 

1 minute ago, FlorianHE said:

 ein USB Gerät einbinden möchte kommt ein Fehler. 

Welcher? Ich habe mich mit USBIP in LXC noch nicht beschäftigt und mir fehlt momentan auch die Zeit dazu muss ich zugeben.

Link to comment

Da ich meine Drucker und das Raspberry gerade aus geschaltet habe musste ich improvisieren und hab von meinem 2. unriad server mal das Bluetooth interface geteilt. 

Unter Unraid konnte ich das gerät einbinden. aber im LXC Container nicht. Wie auf dem Bild zu erkennen ist habe ich das vhci-hcd modul im Host aktiviert. 

 

fehler.thumb.PNG.f9303d0042de068c4911fbeb7dbe1218.PNG

Link to comment
On 12/19/2023 at 10:01 AM, ich777 said:

Du müsstest mich bitte immer quoten, ich sehe nicht immer überall rein und folge allen Threads sonst würde ich kein Leben mehr haben.

 

Bin aber froh das du es gefunden hast... :)

 

Ich habe mal noch eine Frage. 

Ich hatte eigentlich vor den Backup Ordner der LXC Container mit Syncthing zwischen 2 Unraid Servern Snchron zu halten. So dass meine Hausautomations Backups zur not automatisch gleich auf dem 2. Server verfügbar sind,

 

Jetzt ist mir aber aufgefallen das die backups auf dem 2. Server zwar angelegt werden aber in der UI im backup reiter nicht auftauchen. Das gleiche auch umgekehrt.

Das gleiche passiert auch wenn ich den einen angelgten Container lösche und die liste leer ist. Dann verschwindet der Backup tab. Ein Restore ist dann nicht möglich.

 

Wie bekomme ich den restore jetzt wieder hin? 

Edited by FlorianHE
Link to comment
6 hours ago, FlorianHE said:

Jetzt ist mir aber aufgefallen das die backups auf dem 2. Server zwar angelegt werden aber in der UI im backup reiter nicht auftauchen.

Hast du denn einen gleichnamigen Container auf dem Backup system? Wenn ja, sind die Pfade auch richtig zu den Backups angegeben wo du hinsynchronisierst?

 

6 hours ago, FlorianHE said:

Das gleiche passiert auch wenn ich den einen angelgten Container lösche und die liste leer ist. Dann verschwindet der Backup tab.

Das ist auch so gewollt, ein Backup ist ein Backup vom Container und kein Snapshot.

 

6 hours ago, FlorianHE said:

Ein Restore ist dann nicht möglich.

Das stimmt so nicht, mach ein Unraid Terminal auf und dann gib mal:

lxc-autobackup

ein, das ist eine Funktion die ich geschrieben habe und nur auf Unraid verfügbar ist. Diese Funktion ermöglicht es dir automatisch Backups zu erstellen und auch wiederherzustellen.

 

Die Anzeige in der GUI ist nur bereits für bestehende Container gedacht von denen du Backups erstellst, selbst wenn du einen Container löschen solltest, das Backup bleibt bestehen und wird nicht gelöscht (weil es eben ein Backup ist) das du dann vom Terminal wiederherstellen kannst.

Wenn du die Anzeige im GUI willst legst dir einfach einen leeren, gleichnamigen Container auf dem Backup system an und syncst dann dort in das Verzeichnis das du dort angegeben hast.

grafik.thumb.png.6d0b6d48a45e3146137de3ce7a9d5c16.png

(bitte beachte hier die Usage und ob du die global config verwendest oder nicht)

Link to comment

 

3 hours ago, ich777 said:
lxc-autobackup

Okay. Das hat Funktioniert. Konnte meine gesyncten Backups auf dem Zweitsystem wiederherstellen. Ich hab mir schon fast gedacht das man irgendwie über die Konsole den Restore starten kann. Man muss halt nur wissen was man eingeben muss ;)

Ich hatte auch von dem autobackup script im Forum gelesen. Bin aber davon ausgegangen das das veraltet ist bzw durch die Backup Funktion der GUI abgelöst wurde. 

 

Vielen Dank. 

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...