Werde Wahnsinnig LXC Passthough

Guybrush

Active Member
Jul 23, 2019
54
4
28
43
Germany
Hi,

ich versuche schon seit TAGEN zwei USB Smartreader in einen LXC Container durchzuschleifen.
Das kann doch nicht sein, es geht überhaupt nichts.

Code:
root@Proxmox:~# ls /dev/ttyUSB*
/dev/ttyUSB0  /dev/ttyUSB1

Code:
root@Proxmox:~# usb-devices

T:  Bus=01 Lev=03 Prnt=14 Port=00 Cnt=01 Dev#= 15 Spd=12  MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0403 ProdID=6001 Rev=04.00
S:  Manufacturer=Argolis BV
S:  Product=Smartreader plus
S:  SerialNumber=Reader02
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
I:  If#=0x0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=ftdi_sio

T:  Bus=01 Lev=03 Prnt=14 Port=02 Cnt=02 Dev#= 16 Spd=12  MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0403 ProdID=6001 Rev=06.00
S:  Manufacturer=FTDI
S:  Product=FT232R USB UART
S:  SerialNumber=AL007UD2
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=90mA
I:  If#=0x0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=ftdi_sio

Kann jemand helfen. Bin echt am verzweifeln.
Überhaupt finde ich dieses Konzept sowas von unkomfortabel :-(
 
Überhaupt finde ich dieses Konzept sowas von unkomfortabel :-(

Verwende gleich eine "richtige" VM. Ich habe auch schon das ein oder andere Gerät durchschleifen wollen und nach vielen, vielen frustrierenden Stunden hab ich es direkt als QEMU/KVM gemacht und dort hat es immer auf Anhieb geklappt. Mittlerweile gehe ich nur noch den Weg und spare mit die Lebenszeit es mit LXC dann doch nicht hinzubekommen.
 
  • Like
Reactions: Guybrush
Nichts einfacher als das.
Folgendes in deine config des LXC eintragen:

lxc.cgroup.devices.allow: c 188:* rwm
lxc.cgroup.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/ttyUSB0 dev/ttyUSB0 none bind,optional,create=file

Für einen zweiten Reader die letzte Zeile halt duplizieren und anpassen.
 
Dankeschön. Zusätzlich musste ich hiermit die Rechte setzen
Code:
chown 100000:100000 /dev/ttyUSB0

Darf ich fragen... warum dieses hier und wir kommt man auf die Werte??? :)

Code:
lxc.cgroup.devices.allow: c 10:200 rwm
 
Das brauchst du nicht, ist mir beim copy/paste mit reingerutscht.
Aber zur Erklärung, das erlaubt das anlegen von TUN Devices im LXC.
 
Soweit klappt alles. Nur immer wenn ich neu starte, muss ich zuerst...

Code:
chown 100000:100000 /dev/Reader01

in der Console eingeben. Sonst kann ich auf dem Reader nicht zugreifen "Permission denied"
Wie habt ihr das gelöst? :)

Edit: So sieht es im LXC Container aus wenn ich neu starte

Code:
root@Debian1 ~ > ls -l /dev/ | grep Reader
crw-rw---- 1 nobody nogroup 188, 0 Aug 17 13:12 Reader01
 
Last edited:
Soweit klappt alles. Nur immer wenn ich neu starte, muss ich zuerst...

Code:
chown 100000:100000 /dev/Reader01

in der Console eingeben. Sonst kann ich auf dem Reader nicht zugreifen "Permission denied"
Wie habt ihr das gelöst? :)

Edit: So sieht es im LXC Container aus wenn ich neu starte

Code:
root@Debian1 ~ > ls -l /dev/ | grep Reader
crw-rw---- 1 nobody nogroup 188, 0 Aug 17 13:12 Reader01
Genau dasselbe Problem hab ich hier auch mit einem anderen /dev/ttyUSB0 Gerät. Funktioniert alles soweit super, aber sobald ich den Proxmox Server neustarte sind die Permissions zurückgesetzt. Hat das was mit udev zu tun oder wo wird festgelegt, wie die Rechte für /dev/ttyUSB0 etc. nach dem Neustart sein sollen (ich habe jetzt kein chown gemacht sondern ein chmod o+rw, aber auch das wird nach dem Reboot zurückgesetzt)?
 
Genau dasselbe Problem hab ich hier auch mit einem anderen /dev/ttyUSB0 Gerät. Funktioniert alles soweit super, aber sobald ich den Proxmox Server neustarte sind die Permissions zurückgesetzt. Hat das was mit udev zu tun oder wo wird festgelegt, wie die Rechte für /dev/ttyUSB0 etc. nach dem Neustart sein sollen (ich habe jetzt kein chown gemacht sondern ein chmod o+rw, aber auch das wird nach dem Reboot zurückgesetzt)?

Ich habe eine udev-Regel erstellt, welche die Rechte automatisch setzt.
Die Datei /etc/udev/rules.d/50-usb.rules anlegen mit z.b. diesen Eintrag:
===>
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="AL006U35", GROUP="users", MODE="0666"
<===

Die idVendor und idProduct kann mit dem Befehl "lsusb" ausgelesen werden:
root@pve:~# lsusb
Bus 001 Device 007: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC

Die serial erhält man mit diesem Befehl, hier als Beispiel auf ttyUSB0:
root@pve:~# udevadm info -a -n /dev/ttyUSB0 | grep '{serial}' | head -n1
ATTRS{serial}=="AL006U35"

Nachdem die Datei angelegt wurde, den udev-Dienst neu starten und den USB-Bus neu triggern, anschliessen sollten die Rechte automatisch gesetzt sein, damit die LXC darauf zugreifen kann. Bei einem Neustart wird das natürlich automatisch gemacht.

/etc/init.d/udev restart
udevadm trigger
 
Hallo,

bin ein Newbie und kämpfe seit 2 Tagen einen Smartreader an einen LXC-Container durchzureichen und bekomme es nicht hin. In einer VM klappte es sofort.
Ich habe mich grundsätzlich an diese Anleitung gehalten.

Am Host-System:
Code:
root@pve:~# usb-devices

T:  Bus=01 Lev=02 Prnt=02 Port=03 Cnt=01 Dev#=  4 Spd=12  MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0403 ProdID=6001 Rev=04.00
S:  Manufacturer=Argolis BV
S:  Product=Smartreader plus
S:  SerialNumber=123456
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
I:  If#=0x0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=ftdi_sio

Code:
root@pve:~# lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC
Bus 001 Device 002: ID 0424:2514 Microchip Technology, Inc. (formerly SMSC) USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Code:
root@pve:~# ls -l /dev/bus/usb/001/004
crw-rw-r-- 1 root root 189, 3 Nov  4 21:22 /dev/bus/usb/001/004

Code:
root@pve:~# ls /dev/serial/by-id/
usb-Argolis_BV_Smartreader_plus_123456-if00-port0

Code:
root@pve:~# ls -l /dev/ttyUSB0
crw-rw-rw- 1 root dialout 188, 0 Nov  4 21:22 /dev/ttyUSB0

in /etc/pve/lxc/101.conf hinzugefügt
Code:
lxc.cgroup2.devices.allow: c 189:* rwm
lxc.mount.entry: usb-Argolis_BV_Smartreader_plus_123456-if00-port0 dev/serial/by-id/usb-Argolis_BV_Smartreader_plus_123456-if00-port0 none bind,optional,create=file
lxc.cgroup2.devices.allow: c 188:* rwm
lxc.mount.entry: /dev/ttyUSB0 dev/ttyUSB0 none bind,optional,create=file

Berechtigung vergeben:
Code:
chmod o+rw /dev/ttyUSB0

Code:
root@pve:~# ls -l /dev/ttyUSB0
crw-rw-rw- 1 root dialout 188, 0 Nov  4 21:22 /dev/ttyUSB0

Container neustarten:
Code:
pct stop 101
pct start 101

Gast-System:
Code:
root@container:~# lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC
Bus 001 Device 002: ID 0424:2514 Microchip Technology, Inc. (formerly SMSC) USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Code:
root@container:~# usb-devices

T:  Bus=01 Lev=02 Prnt=02 Port=03 Cnt=01 Dev#=  4 Spd=12  MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0403 ProdID=6001 Rev=04.00
S:  Manufacturer=Argolis BV
S:  Product=Smartreader plus
S:  SerialNumber=123456
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
I:  If#=0x0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=ftdi_sio

Schaut also nicht schlecht aus, jedoch "Couldn't open device"

Code:
root@container:~# lsusb -vs 001:004

Bus 001 Device 004: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC
Couldn't open device, some information will be missing
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0         8
  idVendor           0x0403 Future Technology Devices International, Ltd
  idProduct          0x6001 FT232 Serial (UART) IC
  bcdDevice            4.00
  iManufacturer           1 Argolis BV
  iProduct                2 Smartreader plus
  iSerial                 3 123456

Code:
root@container:~/oscam-svn/build/utils# ./list_smargo
Looking for smartreader compatible devices...
couldn't open device 001:004

Binde ich den Smartreader in die VM ein, bekomme ich dort den gewünschten Output.

Hat jemand eine Idee?
 
Last edited:
Gibt es das tty-Gerät im Container? Falls ja, was ist der Fehler wenn du darauf zugreifst?

Code:
root@container:~# ls -la /dev/ttyUSB0
c--------- 0 nobody nogroup 188, 0 Nov  4 23:27 /dev/ttyUSB0
sollen die Berechtigungen so sein? Ich vermute dass hier das Problem ist.

Code:
root@container:~# udevadm info -a -p  $(udevadm info -q path -n /dev/ttyUSB0) | grep product
    ATTRS{product}=="Smartreader plus"
    ATTRS{product}=="xHCI Host Controller"
 
Last edited:
sollen die Berechtigungen so sein? Ich vermute dass hier das Problem ist.
Ja, das habe ich vermutet. Versuche zuerst mal die von Hand umzusetzen, z.B.

Code:
chmod 666 /dev/ttyUSB0

Dann versuche mal davon zu lesen:

Code:
cat /dev/ttyUSB0

(Falls er hängt, mit STRG+C abbrechen, dann war der Test gut verlaufen, kommt ein I/O Fehler haben wir den nächsten Anhaltspunkt).
 
Hallo LnxBil,

ich inzwischen noch noch udev-Rules am host konfiguriert (SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", GROUP="users", MODE="0666") und inzwischen folgende Berechtigung.
Code:
root@container:~# ls -l /dev/ttyUSB0
crw-rw-rw- 1 nobody nogroup 188, 0 Nov 10 17:36 /dev/ttyUSB0

(klappt aber trotzdem nicht)

cat /dev/ttyUSB0 gibt viele Leerzeilen aus, keine Fehlermeldung.
 
Last edited:
cat /dev/ttyUSB0 gibt viele Leerzeilen aus, keine Fehlermeldung.
Somit hat das USB-Passthrough für das Gerät jetzt geklappt und dein Fehler liegt wohl irgendwo anders. Der nächste Schritt wäre es jetzt wohl mit strace anzufangen, den Prozess, der auf das Gerät zugreift zu debuggen und zu schauen was genau dieser erwartet und nicht was nicht da ist. Alternativ natürlich den Code durchforsten und schauen was der macht. Dank OpenSource ist das möglich, aber ob man das will wenn man keine Ahnung davon hat ist eine andere Frage.

Ich würde - falls du nicht in den Fuchsbau klettern willst - jetzt auf eine VM wechseln. Ich hatte in #2 ja bereits geschrieben.
 
Davon habe ich leider zu wenig Ahnung. Danke trotzdem für deine Hilfe und ich werde wohl auf eine VM wechseln müssen.
 
Bei mir hat es gerade erst geklappt, als ich statt relativer absolute Pfade angegeben habe:
In deinem Fall: Versuche doch mal, ob du mit
Code:
lxc.mount.entry: /dev/serial/by-id/usb-Argolis_BV_Smartreader_plus_123456-if00-port0 dev/serial/by-id/usb-Argolis_BV_Smartreader_plus_123456-if00-port0 none bind,optional,create=file
weiter kommst!
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!