USB Device an LXC durchreichen

skyacer

Member
Nov 25, 2020
17
0
21
42
Hallo,

ich versuche jetzt seit einigen Tagen ein USB Device ( Dallas 1-Wire adapter DS9490R) an einen nicht-privilegierten durchzureichen. In einer Konstellation klappt es wie ich es will und meine Sensoren werden erkannt. Diese Konstellation ist aber nicht reboot sicher und auch ein umstecken läuft nicht ohne händisches eingreifen.

Zum derzeitigen Aufbau wie es funktioniert.
Hostsystem:
- Mit "lsusb" gucken an welchem Port sich das USB Device befindet -> Bus 001 Device 002.
- In meine LXC Config trage ich den Mount Entry wie folgt ein:
lxc.cgroup.devices.allow: c 189:* rwm
lxc.mount.entry: /dev/bus/usb/001/002 dev/bus/usb/001/002 none bind,optional,create=file
- Anschließend ein "chown 100000:100000 /dev/bus/usb/001/002" damit im LXC das Device auch root Rechte hat.
- LXC starten

LXC System:
- "lsusb" zeigt mir hier auch, dass das Device wie beim Host am gleichen Port hängt.
- Mit "ls -l /dev/bus/usb/001/002" sehe ich auch das die Rechte soweit passen -> "crw-rw-r-- 1 root root 189, 3 Jan 2 11:41 /dev/bus/usb/001/004"

In der gezeigten Konstellation geht es wunderbar und ich sehe meine Sensoren. Stecke ich jetzt allerdings das Device um oder reboote dann kann die Portzuordnung sich geändert haben und die Sensoren werden nicht mehr angezeigt.

Jetzt dachte ich mir ich versuche einfach mal über eine udev Regel den USB Port zu binden im Host mit folgenden Einstellungen:
# etc/udev/rules.de/60-owfs.rules
SUBSYSTEMS=="usb", ATTRS{idVendor}=="04fa", ATTRS{idProduct}=="2490", SYMLINK+="test"

Ein "ls -l /dev" ergibt bei mir folgende Rückmeldung -> lrwxrwxrwx 1 root root 15 Jan 2 11:57 test -> bus/usb/001/004
Siehe da wenn ich das Device umstecke sehe ich das sich die Zuordnung am Port ändert aber er immer unter dem gleichen Link zu erreichen ist.

Den Link habe ich dann auch in meine LXC Config eingetragen und den LXC danach gestartet:
lxc.mount.entry: /dev/test dev/test none bind,optional,create=file

Ein "chown 100000:100000 /dev/test" gibt dem Device wieder Rootrechte. Was ich auch im LXC beobachten kann.

Im LXC sehe ich jetzte folgendes:
- "lsusb" zeigt mir hier auch, dass das Device wie beim Host am gleichen Port hängt.
- Mit "ls -l /dev/test" sehe ich auch das die Rechte soweit passen -> "crw-rw-r-- 1 root root 189, 4 Jan 2 11:58 /dev/test"

Soweit so gut dachte ich. Aber ich habe jetzt das Problem das ich meine Sensoren nicht sehen kann. Warum auch immer und ich weiß echt nicht mehr weiter wo ich da noch suchen soll. Direkt scheinet es ja zu funktionieren aber nicht mit einem Link.
Weiß jemand was ich noch machen kann das ich auch hier die Sensoren sehen kann?

Grüße
Jascha
 

Attachments

  • lsusb_host.PNG
    lsusb_host.PNG
    18.9 KB · Views: 21
  • lsusb_lxc.PNG
    lsusb_lxc.PNG
    15.4 KB · Views: 19
  • lxc_config_direkt.PNG
    lxc_config_direkt.PNG
    15.8 KB · Views: 20
Ja da stimmt so. Sorry ist nen Copypaste beim schreiben gewesen. Die Zuorndung Host /LXC war immer gleich.

Grüße
 
der gelinkte muss immer noch die richtige permissions haben (symlink permissions sind irrelevant)
 
Welche permission muss ich ihm den mitgeben? Ich dachte ein chown 100000:100000 sollte ausreichend Rechte geben.
 
was siehst du denn mit ls -l /dev/bus/usb/001/002 im PVE?
chown 100000:100000 sollte ausreichend Rechte geben.
ja sollte passen
 
ja dann ist falsch, muss 100000 sein
 
Bevor wir aneinander vorbei reden. Also ohne Symlink mit /dev/bus/usb/001/00x jeweils im Host und in der Config vom LXC. Dann klappt es ja.
Mit Symlink /dev/test hab ich folgende Berechtigungen:
Host: lrwxrwxrwx 1 root root 15 Jan 5 14:49 /dev/test -> bus/usb/001/002
LXC: crw-rw-r-- 1 root root 189, 1 Jan 5 14:49 /dev/test

Ich seh das die Rechte im LXC leicht anders sind. Abr mit chown 100000:100000 bleiben die Rechte gleich.
Also was muss ich machen?
 
wie gesagt, du musst den owner der USB device setzen, nicht des symlinks.

d.h. chown 100000:100000 /dev/usb/001/00x und nicht auf dem symlink.

mit deinem jetzigen setup hat der symlink zwar die richtige permissions, aber die resolved device hat immer noch uid=0 und deswegen funktioniert es nicht

in deiner udev regel kannst du sowas hinzufuegen: OWNER="100000", GROUP="100000"

alternativ koenntest du den ganzen ordner /dev/bus/usb/001/ bindmounten, und die owners auf 100000 setzen
 
Okay. Ich bin nicht ganz so Linuxfest. Also bitte entschuldige meine Nachfragen.
Ich habe jetzt im Host in der in meiner udev-Regel folgendes stehen:
ATTRS{idVendor}=="04fa", ATTRS{idProduct}=="2490", SYMLINK+="test" OWNER="100000", GROUP="100000"
Ist das Korrekt?
Dies ergibt nach einem Neustart folgendes mit ls -l /dev/
Host - lrwxrwxrwx 1 root root 15 Jan 5 15:47 /dev/test -> bus/usb/001/002 bzw. crw-rw-r-- 1 100000 100000 189, 1 Jan 5 15:47 /dev/bus/usb/001/002
LXC - crw-rw-r-- 1 root root 189, 1 Jan 5 15:47 /dev/test

Bei dem zweiten Alternativvorschlag brauch ich noch was Hilfe:
So? lxc.mount.entry: /dev/bus/usb/001/ dev/test1 none bind,optional,create=file
Wie gebe ich Ihm jetzt die Berechtigung mit?

Grüße und vielen Dank
 
Ist das Korrekt?
Dies ergibt nach einem Neustart folgendes mit ls -l /dev/
Host - lrwxrwxrwx 1 root root 15 Jan 5 15:47 /dev/test -> bus/usb/001/002 bzw. crw-rw-r-- 1 100000 100000 189, 1 Jan 5 15:47 /dev/bus/usb/001/002
LXC - crw-rw-r-- 1 root root 189, 1 Jan 5 15:47 /dev/test
ja, schaut gut aus. so sollte es funktionieren, geht es nicht?



Bei dem zweiten Alternativvorschlag brauch ich noch was Hilfe:
nicht noetig wenn die erste empfehlung funktioniert, aber nur zum wissen:
lxc.mount.entry: /dev/bus/usb/001/ dev/test1 none bind,create=dir

und danach chown -R 100000:100000 /dev/bus/usb/001/

die erste methode wuerde ich besser empfehlen, da so musst du nicht den ganzen ordner bindmounten.
 
Also die erste Variante geht nicht bzw. Sehe ich weiterhin keine Sensoren. Bei der zweiten bekomme ich folgenden Fehler beim starten des CT:
vm 100 - unable to parse config: chown -R 100000:100000 /dev/bus/usb/001/
 
chown -R 100000:100000 /dev/bus/usb/001/
sorry, das musst du beim host ausfuehren, nicht in die config schreiben :)

Also die erste Variante geht nicht bzw. Sehe ich weiterhin keine Sensoren.
irgendwelche errors im LXC? journal, syslog?

kannst du nochmal bitte deine LXC config posten?
 
LXC Config: arch: amd64 cores: 1 hostname: 1-wire memory: 512 nameserver: 10.10.40.253 net0: name=eth0,bridge=vmbr0,firewall=1,hwaddr=00:20:20:20:20:06,ip=dhcp,tag=50,type=veth ostype: ubuntu rootfs: local-lvm:vm-100-disk-0,size=8G searchdomain: vlan50.home.arpa swap: 512 unprivileged: 1 lxc.cgroup.devices.allow: c 189:* rwm lxc.mount.entry: /dev/test dev/test none bind,optional,create=file lxc.mount.entry: /dev/bus/usb/001/ dev/test1 none bind,optional,create=file

Ansonsten seh ich keinerlei Fehler im syslog.
 
arch: amd64
cores: 1
hostname: 1-wire
memory: 512
nameserver: 10.10.40.253
net0: name=eth0,bridge=vmbr0,firewall=1,hwaddr=00:20:20:20:20:06,ip=dhcp,tag=50,type=veth
ostype: ubuntu
rootfs: local-lvm:vm-100-disk-0,size=8G
searchdomain: vlan50.home.arpa
swap: 512
unprivileged: 1
bis hier okay.

lxc.cgroup.devices.allow: c 189:* rwm
lxc.mount.entry: /dev/test dev/test none bind,optional,create=file
mit der udev rule und diese zeilen sollte es eigentlich funktionieren.

wenn es aus irgendeinem grund nicht geht,
dann brauchst du diese zeilen fuer die alternative methode:
Code:
lxc.cgroup.devices.allow: c 189:* rwm
lxc.mount.entry: /dev/bus/usb/001/ dev/myusb none bind,create=dir

create=dir statt create=file in dieser variante (weil du den ordner mountest, nicht das file)

hoffentlich klaert das alles :)
 
Hi oguz,

sorry ich war ein wenig verhindert die letzte Woche. Also ich habe den mount entry auf create=dir geändert. Allerdings bekomme ich folgendes:
Code:
root@1-wire:~# ls -l /dev/test
total 0
crw-rw-r-- 1 nobody nogroup 189, 0 Jan  5 19:20 001
crw-rw-r-- 1 root   root    189, 1 Jan  5 19:20 002
crw-rw-r-- 1 nobody nogroup 189, 2 Jan  5 19:20 003
root@1-wire:~#

Danach auf dem 1 Wire Server:
Code:
root@1-wire:~# chown -R 100000:100000 /dev/bus/usb/001
chown: cannot access '/dev/bus/usb/001': No such file or directory
root@1-wire:~#

Meine Sensoren sehe ich leider immer noch nicht. Ich finds halt nur sehr sehr eigenartig das ohne Symlink geht, mit aber nicht.

Grüße
 

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!