LXC - Gerät /dev/sdd1 durchreichen

  • Hallo,
    ich versuche in einem LXC-Container auf ein Gerät zuzugreifen (/dev/sdd1 = SD-Kartenleser mit Karte). Wird bei cat /proc/partitions auch angezeigt mit Größe. Wenn ich das Mount versuche wird das Gerät nicht gefunden

    Code
    ERROR: failed to open '/dev/sdd1': No such file or directory.


    und es wird auch nicht mit ls angezeigt...recht überschaubar. imho wird /proc durchgereicht an den Container und /dev über cgroups "neu" erstellt.


    gibt es eine Möglichkeit, solche Geräte durchzureichen? in den Einstellungen sind nur Spezial-Geräte (TV-Karte, Soundkarten etc,), aber keine Speichermedien. diese müssen scheinbar erst vom Host gemounted werden um sie über die Freigaben einzubinden...aber genau das geht nicht (exfat). Deswegen will ich das mounten über den Container machen und ein Script laufen lassen (exiftool etc.)


    scheinbar sind die default-lxc-tools nicht installiert, somit kann man offensichtlich den container con der Kommandozeile nicht konfigurieren. Wie macht man das dann?


    habe mal auf dem host folgendes probiert:

    Code-Block ging irgendwie nicht...


    Gruß Frank

    3 Mal editiert, zuletzt von frank-w ()

  • Ich hatte mal das Problem ein Device in die Linux Station einzubinden, welche ja im Grunde auch nur ein LXC Container ist. Ich habe dann den entsprechendne Mountpoint in die LXC Konfiguration unter /share/CACHEDEV1_DATA/.qpkg/ubuntu-hd/lxc/ubuntu_1604/config eingetragen. In meinem konkreten Fall sah das dann so aus:



    Bash
    lxc.mount.entry = /dev/ttyACM0 dev/ttyACM0 none bind,create=file

    Prinzipiell sollte das mit deinem Gerät ähnlich sein nur das /dev/ttyACM0 mit /dev/sdd1 ersetzt werden muss.

  • danke, damit hat der container es gefunden, dann hat im Container nur noch das gefehlt, um exfat nutzen zu können:


    mknod -m 666 /dev/fuse c 10 229


    und schon konnte ich die SD-Karte mounten, danke dir.

  • @tuxflo:
    Danke für die Info,
    ich konnte mit dem Befehl meinen USB DVD Brenner an meine TS-251 anschließen und grad die erste DVD brennen :)


    Das Kommando sollte man aber nur so verwenden, wenn das externe Gerät immer angeschlossen und eingeschaltet ist, ansonsten ist die Option "optional" zu empfehlen:



    Code
    lxc.mount.entry = /dev/sr0 dev/sr0 none bind,optional,create=file #USB-DVD
    lxc.mount.entry = /dev/ttyACM0 dev/ttyACM0 none bind,optional,create=file #Arduino

    Ohne optional startete mein ubuntu im LXC Container nicht richtig und musste per ssh neugestartet werden: /share/CE_CACHEDEV1_DATA/.qpkg/ubuntu-hd/script/start-stop.sh restart


    Zum Brennen musste ich noch den DVD Brenner auf dem NAS Linux unmouten: umount /dev/sr0
    Danach klappte das Brennen und manuelle Mounten auf dem LXC Ubuntu


    Bisher habe ich aber nicht geschafft dem NAS Linux das automatische Mounten auszureden.
    Mein Eintrag in die /etc/fstab -> /
    dev/sr0 none auto noauto 0 0
    war nach dem Neustart verschwunden.


    Weiß jemand wie ich diese Einstellung dauerhaft speicher ?

  • Danke frank-w,
    ich habe nach dieser Anleitung aus dem Forum
    die Partition sdc6 gemountet
    mount -t ext2 /dev/sdc6/tmp/config
    und eine autoconfig erstellt und mit
    #!/bin/sh
    /share/CE_CACHEDEV1_DATA/autostart/autostart.sh
    beschrieben.
    Meine autostart.sh sieht folgendermaßen aus:



    Leider funktioniert beides nicht, erkennt Du einen Fehler ?

  • Eventuell hast du den falschen Mountpoint genommen. Die offizielle Anleitung für Startskripte gibt es hier
    dort steht z.B.:


    Zitat von QNAP

    All HAL-based Intel and AMD NAS:
    mount $(/sbin/hal_app --get_boot_pd port_id=0)6 /tmp/config

    da in deiner Signatur eine TS-251+ erwähnt ist, würde ich mal schätzen das du den Befehl für die autostart.sh nehmen musst.


    UPDATE: mir ist gerade noch aufgefallen, dass in deinem Alias /share/CE_CACHEDEV... angegeben ist, hat das so seine Richtigkeit? Bei mir liegt immer alles unter /share/CACHEDEV...

  • in der "Anleitung" steht nichts darüber, dass die datei in die qpkg.conf eingetragen wird. So ists nur ein Name.

  • Jetzt funktionier es, Problem war, dass ich die autorun.sh per Dateibrowser ausführbar gemacht habe. Mit chmod +x läuft es. Da es nur eine "Festplatte" mit 6 Partitionen gab, passt sdc6 beim TS-251.


    tuxflo: Hast Du dein /dev/ttyACM0 Gerät dauerhaft angeschlossen oder nur gelegentlich ? Wenn ich meine Arduinos manuell nach dem Start anschließe, muss ich diese immer manuell auf dem NAS Linux mounten mit modprobe cdc_acm vendor=0X2a03 product=0X0043 und anschließend noch mal im LXC Ubuntu mit demselben Befehl + einer Freigabe in der config:


    lxc.cgroup.devices.allow = c 166:* rwm #ls -la /dev/ttyACM0 -> 166


    Hast Du ein automount hinbekommen ? Wenn dann müsste das wohl mit udev realisiert werden.

  • Ja, bei mir hängt der Infrarotemitter dauerhaft dran. Damit das Modul immer geladen wird, hab ich einfach ein paar Zeilen aus der HD_Station "geklaut" und im Startskript der Linux Station (/share/CACHEDEV1_DATA/.qpkg/ubuntu-hd/ubuntu-hd.sh) eingefügt:


    Bash: /share/CACHEDEV1_DATA/.qpkg/HD_Station/HD_Station.sh
    # load cdc_acm for CEC
        if [ -z "$(lsmod | grep cdc_acm)" ] && [ -f /lib/modules/misc/cdc-acm.ko ]; then
            insmod /lib/modules/misc/cdc-acm.ko
        fi

    Vermutlich sollte es auch kein Problem sein, das Modul immer zu laden, also direkt beim Start der NAS, nicht nur wenn die Linux Station gestartet wird...


    In der LXC Config Datei (/share/CACHEDEV1_DATA/.qpkg/ubuntu-hd/lxc/ubuntu_1604/config) hab ich dann noch folgenden Mountpoint hinzugefügt:
    lxc.mount.entry = /dev/ttyACM0 dev/ttyACM0 none bind,create=file


    Mit Plug & Play sollte das Ganze aber auch funktionieren, durch die Option create=file wird das device in jedem Fall (wenn ich das richtig verstanden habe...) im LXC Container angelegt, auch wenn es nicht angeschlossen ist. Zugriffe darauf würden dann natürlich nichts bringen.

  • Danke, jetzt funktioniert es (zumindest bei dem ersten Test)
    Ich habe den insmod Befehl in der in der ubuntu-hd.sh(->/script/start-stop.sh) in der Funktion update_lxc_config() eingefügt.
    Anstelle dem mount Befehl, teste ich grad lxc.tty = 72 ,da bereits ca.69 serielle Schnittstellen existieren.