Homegear in Docker Container findet CUL nicht

Hallo zusammen,
ich habe seit heute Homegear in einem Docker Container laufen.
Leider bekomme ich folgende Meldung:
05/17/18 21:43:25.413 Module HomeMatic BidCoS: CUL "nanoCUL": Couldn't open CUL device "/dev/serial/by-id/usb-FTDI_FT232R_USB_xxx": No such file or directory_ _05/17/18 21:43:25.414 Critical: At least one of the physical devices could not be opened... Exiting...

Ich kann den CUL jedoch dort auf der lokalen Maschine (nicht im Container) manuell finden. Ich nehme an, dass ich den Pfad nicht korrekt angegeben habe, da Homegear in einem Container läuft.
Kann mir jemand auf die SprĂĽnge helfen, wie ich das korrekterweise machen mĂĽsste?

Ich habe auch bereits versucht den Container sowohl mit, als auch ohne Device Angabe zu starten:
docker run -d --rm -v /homegear-data/etc:/etc/homegear:Z -v /homegear-data/lib:/var/lib/homegear:Z -v /homegear-data/log:/var/log/homegear:Z -e HOMEGEARUSER=root -e HOMEGEARGROUP=root -p 2001:2001 -p 2002:2002 -p 2003:2003 **--device=/dev/serial/by-id/usb-FTDI_FT232R_USB_xxx** --name homegear homegear/rpi-homegear:stable

Leider ohne Erfolg.
Ich weiß ich sollte Homegear nicht als root laufen lassen. Aber aktuell möchte ich es überhaupt erstmal zum Laufen bringen. Um Berechtigungen kümmere ich mich danach.

Vielen Dank fĂĽr die UnterstĂĽtzung.

Der entsprechende Abschnitt in meiner homemeaticbidcos.conf sieht folgendermaĂźen aus:

#######################################
################# CUL #################
######################################
## The device family this interface is for
[CUL]

## Specify an unique id here to identify this device in Homegear
id = nanoCUL

## When default is set to "true" Homegear will assign this device
## to new peers.
default = true

## Options: cul, cc1100, coc, cunx, hmcfglan, hmlgw, hm-mod-rpi-pcb, homegeargateway
deviceType = cul

device = /dev/serial/by-id/usb-xxx

## Default: responseDelay = 95
## Should be "95" for CUL or COC, "100" for TI CC1101 and "60" for HM-CFG-LAN or HM-LGW
responseDelay = 95

VG Xargon

grafik

Benutz doch bitte die Formatierungsfunktionen des Forums. Du kannst deinen Beitrag nachträglich bearbeiten.

Hallo,
ich habe versucht die Formatierung zu verwenden. Ich hoffe es ist nun besser.
VG Xargon

1 Like

Hallo,
es funktioniert nicht einmal, wenn ich den Container “privileged” starte:
docker run -d --rm -v /homegear-data/etc:/etc/homegear:Z -v /homegear-data/lib:/var/lib/homegear:Z -v /homegear-data/log:/var/log/homegear:Z -e HOMEGEARUSER=root -e HOMEGEARGROUP=root -p 2001:2001 -p 2002:2002 -p 2003:2003 --privileged --name homegear homegear/rpi-homegear:stable

Mir gehen langsam ein bisschen die Ideen aus. Hat vielleicht wer noch eine?
Vielen Dank fĂĽr die UnterstĂĽtzung.

VG Xargon

Hallo zusammen,
es hat nun funktioniert, wenn ich den CUL über /dev/ttyUSB0 konfiguriere. Ganz zufriedenstellen finde ich das jedoch nicht, da sich diese Adresse bei einem Neustart ändern kann.
Hat jemand eine Idee, wieso es nicht über /dev/serial/by-id/… geht?
VG Xargon

Hallo @Xargon,

ich hätte ehrlich gesagt ebenfalls erwartet, dass --device=/dev/serial/... funktioniert. Warum es nicht klappt, weiß ich nicht und müsste das Problem ebenfalls suchen. Die Lösung mit /dev/tty... finde ich ebenfalls etwas unbefriedigend.

Viele GrĂĽĂźe

Sathya

1 Like

Hallo @sathya,
da mir das Ausprobieren erste einmal etwas zu mĂĽhselig geworden ist, habe ich Homegear erstmal --privileged Rechte verpasst.

docker run -d --rm -v /home/pi/homegear/etc:/etc/homegear:Z -v /home/pi/homegear/lib:/var/lib/homegear:Z -v /home/pi/homegear/log:/var/log/homegear:Z -v /etc/localtime:/etc/localtime:ro -e HOMEGEARUSER=root -e HOMEGEARGROUP=root -p 2001:2001 -p 2002:2002 -p 2003:2003 --privileged --name homegear homegear/rpi-homegear:stable

Zwecks Security werde ich später aber definitiv noch einmal nachforschen, um Homegear auch ohne Vollzugriff laufen zu lassen.
Viele GrĂĽĂźe
Xargon

1 Like

Hallo,
eben ein Update durch pull des aktuellen Docker Containers von 0.7.17 auf 0.7.23 gemacht. Leider kann ich jetzt auch nicht mehr auf des Nano-CUL ĂĽber serial/by-id/ zugreifen, was vorher einwandfrei funktioniert hat.
Jetzt leider nur über /dev/ttyUSB1 , was ja leider nicht so sicher ist, dass der CUL beim nächsten boot wieder so im System landet.
Any ideas?

Hallo @groovepack,

mit dem rpi-homegear-Image? Da hat sich die Basis wegen eines anderen Problems geändert. Das Dockerfile findet sich hier: https://github.com/Homegear/Homegear-Docker/blob/master/rpi-stable/Dockerfile.

Ich habe keine Ahnung, warum /dev/serial/by-id/ nicht mehr funktioniert. Für Ideen wäre ich selbst dankbar.

Viele GrĂĽĂźe

Sathya

Hi Sathya,

ich verwende auf einem Ubuntu-Server, weil dieser auch Fileserver und mehr macht, das Image “homegear/homegear:stable”.

Hmm, ebenfalls mit Ubuntu geht es bei mir mit einem CUL - gerade getestet… Hat der Benutzer, welcher Docker startet, bei dir Zugriff auf das Gerät?

Da ich es auch bereits mit root/root versucht habe und es nicht funktioniert hat, denke ich nicht, dass es daran liegt. Ich versuche es bei Gelegenheit noch einmal. Meistens liegt der Fehler an irgendeiner Stelle an der man ihn gar nicht vermutet. Oft habe ich dann auch schon gedacht: Dass ich da nicht früher drauf gekommen bin…

Poste auf jeden Fall, wenn du eine Lösung findest! Vielleicht hilft es auch, in einem Docker-Forum zu fragen.

So, bin ein kleines Stück weiter gekommen, nachdem ich nach einem kleinen Stromausfall etwas Hand anlegen musste, weil sich die ttyUSBX geändert hatten :-/

Ich hatte in meinem Dockeraufruf folgendes nicht drin gehabt:

-e HOST_USER_ID=$(id -u) \
-e HOST_USER_GID=$(id -g) \

Also doch noch einen “homegear” User auf dem Host-System angelegt, die notwendigen Rechte bzw. in die “dialout” Group aufgenommen, alles wunderbar.

Der Dockercontainer auch wieder mein Device ĂĽber die Serial-ID gefunden

--device=/dev/serial/by-id/usb-SHK_NANO_CUL_868-if00-port0:/dev/serial/by-id/usb-SHK_NANO_CUL_868-if00-port0 \

Soweit so gut, leider lief aber homegear nicht, weil

08/04/18 08:42:39.204 Script Engine Server: Critical: Couldn't delete existing socket: /var/run/homegear/homegearSE.sock. Please delete it manually. The scrip
t engine won't work. Error: Permission denied
08/04/18 08:42:39.205 Critical: Cannot start script engine server. Exiting Homegear.

Jetzt, mit “privileged” sieht der Ordner so aus:

:/var/run/homegear# ls -lha
total 24K
drwxr-x--- 2 homegear homegear 4.0K Aug  4 09:21 .
drwxr-xr-x 6 root     root     4.0K Aug  4 09:21 ..
-rw-r--r-- 1 homegear homegear   10 Aug  4 09:21 LCK..ttyUSB0
-rw-r--r-- 1 homegear homegear    5 Aug  4 09:21 homegear-influxdb.pid
-rwxr-x--- 1 homegear homegear    5 Aug  4 09:21 homegear-management.pid
-rw-r--r-- 1 homegear homegear    5 Aug  4 09:21 homegear.pid
srwxrwx--- 1 homegear homegear    0 Aug  4 09:21 homegear.sock
srwxrwx--- 1 homegear homegear    0 Aug  4 09:21 homegearIPC.sock
srwxrwx--- 1 homegear homegear    0 Aug  4 09:21 homegearSE.sock

Also, alles wieder zurück auf privileged und auf ttyUSB0 … :frowning:

Bei mir läuft gerade noch 0.7.5

Any Ideas?

Welches Dockerabbild verwendest du? Aus irgendeinem Grund existiert die Datei /var/run/homegear/homegearSE.sock vor dem Homegearstart. Lass mich mal erst einmal schauen, ob das ein Fehler im Abbild ist.

Viele GrĂĽĂźe

Sathya

Sorry, für die späte Antwort … Urlaubszeit … :smiley:

ID sha256:7e8b61351da8343fc62842cbdaddd3033de355bac6fdf51cca199fdd2507876f
Size 731.2 MB
Created 2018-07-01 03:19:42
Build Docker 18.03.0-ce on linux, amd64

Homegear version 0.7.23-1891 läuft da drin …

Update ist für die nächsten Tage eh vorgesehen, da ich aber etwas an Arbeit - kopiererei neuer Konfigdateien erwarte um mal einen Error-freien Start zu haben, warte ich bis es mal wieder regnet in DE …

Ähm… aktuell ist ja die 0.7.27 - wo finde ich die Release-Notes? Beim letzten Update auf die 0.7.23 hatte ich zwei Stunden damit verbracht heraus zu finden, dass ich die SSL-Konfig der Services verschoben hatte - war dann in den Logs zu sehen…

so, nun docker container update gemacht und nun läuft darin Version: 0.7.27-1824

Leider Situation unverändert. Nur im privileged mode startet der homegear überhaupt, es scheint so als würde ein übergebener User irgendwelche Rechteprobleme haben. Jedoch verstehe ich nicht wo und warum … die von Host eingebundenen Verzeichnisse habe ich alle an den User “homegear” (1002) gegeben.

docker run Aufrufe und entsprechende debug-Logs:

with-user1002.txt (18,9 KB)

with-privileged.txt (43,1 KB)

Hallo zusammen!
Ich verwende seit gestern das Docker Image der nightly builds. Seit dem scheine ich neue Rechte-Probleme zu haben.
Komischerweise immer nach dem Start des Containers ändert sich der Owner des /lib und des /log Verzeichnisses (ich weiß die Namen gerade nicht auswendig, trage ich später nach) auf dem Host System.
Erst nachdem ich diese Verzeichnisse wieder dem korrekten User und auch Gruppe zugewiesen habe, funktioniert Homegear wieder.
Ich verstehe jedoch nicht woher diese plötzlichen User/Gruppen Änderungen herkommen.
Homegear startet bei mir auch nicht privileged, findet dann jedoch meinen USB Sender nicht.
VG Xargon

Also, ich glaube es ist definitiv ein Rechte-Thema bei mir… Intern scheint als User_ID immer die 102 verwendet zu werden, egal was ich als Environment-Variable setze.

Habe jetzt noch explizit den User “homegear” gesetzt, welcher auf dem Host-System eingerichtet wurde. Dieser Account hat die user_ID 1002 und group_ID 1002 - er läuft aber definitiv als 102

meines passwd vom Host-System

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
...
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
syslog:x:104:108::/home/syslog:/bin/false
...
homegear:x:1002:1002:homegear,,,:/home/homegear:/bin/bash

Hier der aktuelle Aufruf

docker run \
        --name homegear \
        -d \
        -v /opt/homegear/etc:/etc/homegear:Z \
        -v /opt/homegear/lib:/var/lib/homegear:Z \
        -v /opt/homegear/log:/var/log/homegear:Z \
        -v /etc/localtime:/etc/localtime:ro \
        -p 2001:2001 \
        -p 2002:2002 \
        -p 2003:2003 \
        -e HOST_USER_ID=1002 \
        -e HOST_USER_GID=1002 \
        -e TZ=Europe/Berlin \
        --user=homegear \
        --device=/dev/serial/by-id/usb-SHK_NANO_CUL_868-if00-port0:/dev/serial/by-id/usb-SHK_NANO_CUL_868-if00-port0 \
        --device=/dev/ttyUSB0:/dev/ttyUSB0 \
        --device=/dev/ttyUSB1:/dev/ttyUSB1 \
        --link mosquitto:mqtt \
        --restart=unless-stopped \
        homegear/homegear:stable

hier der Output von “ps”

root      7263  0.0  0.1   7652  4304 ?        Sl   19:37   0:00  |   \_ docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/abac87c6bf5972e888d71f441daeea8ba5790c6152972dd8278c27f1d8d94048 -address /var/run/docker/containerd/docker-containerd.sock -containerd-binary
systemd+  7280  0.0  0.0  17988  3032 ?        Ss   19:37   0:00  |       \_ /bin/bash -c /start.sh
systemd+  5289  0.0  0.2 219548  8264 ?        Ss   19:37   0:00  |           \_ /usr/bin/homegear -p /var/run/homegear/homegear.pid -u homegear -g homegear -d
systemd+  5290  4.4  1.9 1837900 74500 ?       SLsl 19:37   0:23  |           |   \_ /usr/bin/homegear -p /var/run/homegear/homegear.pid -u homegear -g homegear -d
systemd+  5304  0.0  0.2 294032  8864 ?        SLsl 19:37   0:00  |           \_ /usr/bin/homegear-management -p /var/run/homegear/homegear-management.pid -d
systemd+  5336  0.0  0.2  74496  8724 ?        SLsl 19:37   0:00  |           \_ /usr/bin/homegear-influxdb -p /var/run/homegear/homegear-influxdb.pid -u homegear -g homegear -d
systemd+  5338  0.0  0.0   4236   708 ?        S    19:37   0:00  |           \_ tail -f /var/log/homegear/homegear.log

Einziger Vorteil jetzt, er findet den USB-Stick so wieder über seine ID und der Container läuft nicht im privileged-Mode.

Aber moment …

homegear@abac87c6bf59:/$ echo $(id -u homegear)
102
homegear@abac87c6bf59:/$ echo $HOST_USER_ID
1002

Kann es sein, dass die Variablen Substitution, nicht funktioniert und der zweite Versuch nicht angezogen wird, hatte mal was bzgl. Shell-Skripte und mehrfacher Zuweisung von Werten gelesen - würde mich aber wundern, wenn man eine Variable nicht mehrfach setzen könnte …

USER=homegear

USER_ID=$(id -u $USER)
USER_GID=$(id -g $USER)

USER_ID=${HOST_USER_ID:=$USER_ID}
USER_GID=${HOST_USER_GID:=$USER_GID}

sed -i -e "s/^${USER}:\([^:]*\):[0-9]*:[0-9]*/${USER}:\1:${USER_ID}:${USER_GID}/"  /etc/passwd
sed -i -e "s/^${USER}:\([^:]*\):[0-9]*/${USER}:\1:${USER_GID}/" /etc/group

sed sollte hier doch die übergebenen Werte für USER_ID und GROUP_ID in den Dateien /etc/passwd und /etc/group in meinem Beispiel auf 1002 setzen. Dies tut es aber nicht …

homegear@abac87c6bf59:/$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/bin/false
messagebus:x:101:101::/var/run/dbus:/bin/false
homegear:x:102:102::/home/homegear:/bin/false

Hi Xargon,
die Rechteänerung kommen sicher vom start.sh

chown -R root:root /etc/homegear
find /etc/homegear -type d -exec chmod 755 {} \;
chown -R homegear:homegear /var/log/homegear /var/lib/homegear
find /var/log/homegear -type d -exec chmod 750 {} \;
find /var/log/homegear -type f -exec chmod 640 {} \;
find /var/lib/homegear -type d -exec chmod 750 {} \;
find /var/lib/homegear -type f -exec chmod 640 {} \;

und sind soweit ich sehe im nightly als auch stable identisch.

Unter welchem Nutzer läuft homegear aus Host-System-Sicht bei Dir? --> “ps auxf” und dann den Docker-Container inkl. Subprozesse suchen.