Ein kurzes Vorwort zu LXC.
LXC ist ein Containerformat was bedeutet es ist KEIN Betriebssystememulator. Es wird keine CPU emuliert wie z.b. bei qemu. Das hat vor und Nachteile.
Groesster Vorteil, weit weniger Ressourcenverbrauch. Nachteil, man verwendet den Kernel des Hosts und ist nicht so flexibel. z.b. Windows geht in LXC nicht, es muss ja der Windowskernel verwendet werden. Auch ARM-Kernels laufen nicht via LXC aus dem selben Grund (nicht ganz richtig, aber ich spreche hier nur von x86/amd64 Installationen des Hosts).
btw, Docker basiert auf dem selben Konzept und ist nur eine Abwandlung von LXC.
Wenn beide Moeglichkeiten zur Verfuegung stehen, wurde ich immer LXC bevorzugen aber das ist Geschmackssache.
Docker basiert urspruenglich ebenfalls auf LXC -> https://de.wikipedia.org/wiki/Docker_(Software)
https://www.techdivision.com/blog/lxc-v ... f-lxc.html
Zum Durchreichen (auf Proxmox LXC):
Wie gesagt verwendet LXC den Kernel des Hosts. Deshalb muessen auch Kerneloperationen am Host durchgefuehrt werden damit auch die Container (VMs) diese nutzen koennen.
Konkretes Beispiel, man will den HMIP-Stick im Container verwenden. Das erfordert ein Laden von Kernelmodulen.... Folgende 2 Kommandos:
Code: Alles auswählen
modprobe cp210x
sh -c 'echo 1b1f c020 > /sys/bus/usb-serial/drivers/cp210x/new_id
Wenn das erledigt ist, wird ein neues serielles Geraet am Host erstellt. z.b. /dev/ttyUSB0.
Jetzt fehlt noch die Durchreichung an den CCU Container. Dazu muss man zuerst die IDs des Geraetes herrausfinden.
Da wir im Falle des HMIP Stick das /dev/ttyUSB0 durchreichen muessen, checken wir die IDs:
Code: Alles auswählen
ls -l /dev/ttyUSB0
Code: Alles auswählen
crw-rw---- 1 root dialout 188, 0 Jan 13 10:07 /dev/ttyUSB0
Im Falle von Proxmox muss das nun durchgereicht werden. Dazu muss die Config des Containers bearbeitet werden:
Bei mir hat die CCU VM die ID 212 (sieht man in der WebUI von Proxmox). Die bearbeiten wir also z.b. mit nano:
Code: Alles auswählen
nano /etc/pve/lxc/212.conf
Code: Alles auswählen
lxc.cgroup.devices.allow: c 188:0 rwm
lxc.mount.entry: /dev/ttyUSB0 dev/ttyUSB0 none bind,optional,create=file
Jetzt zum HM-CFG-USB2. Da ist das etwas komplizierter aber gleiches Prinzip.
Der HM-CFG-USB2 ist kein serielles Geraet.
Wir lassen uns die IDs der usb Gerete amzeigen mittels "lsusb"
Da kommt dann ca sowas raus:
Code: Alles auswählen
Bus 012 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 011 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 046d:0825 Logitech, Inc. Webcam C270
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 009 Device 005: ID 046d:0825 Logitech, Inc. Webcam C270
Bus 009 Device 006: ID 046d:0825 Logitech, Inc. Webcam C270
Bus 009 Device 004: ID 2109:2812 VIA Labs, Inc. VL812 Hub
Bus 009 Device 003: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC
Bus 009 Device 002: ID 046d:0825 Logitech, Inc. Webcam C270
Bus 009 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 010 Device 002: ID 2109:0812 VIA Labs, Inc. VL812 Hub
Bus 010 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 002: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 002: ID 1b1f:c00f eQ-3 Entwicklung GmbH HM-CFG-USB/HM-CFG-USB-2 [HomeMatic Configuration adapter]
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Code: Alles auswählen
Bus 004 Device 002: ID 1b1f:c00f eQ-3 Entwicklung GmbH HM-CFG-USB/HM-CFG-USB-2 [HomeMatic Configuration adapter]
Code: Alles auswählen
ls -l /dev/bus/usb/004/002
Code: Alles auswählen
crw-rw-r-- 1 root root 189, 385 Jan 13 10:20 /dev/bus/usb/004/002
Wieder muss die Container-config Datei geaendert werden. In meinem Falle so:
Code: Alles auswählen
lxc.cgroup.devices.allow: c 189:385 rwm
lxc.mount.entry: /dev/bus/usb/004/002 dev/bus/usb/004/002 none bind,optional,create=file
Bei anderen LXC Implementierungen laueft das System gleich, die Config des Containers und die Speicherorder der Configs werden aber anders sein.