Homegear in Docker Container findet CUL nicht

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.

Hallo groovepack,

danke für deine Antwort.

pi@homeassistant:~ $ ps -auxf | grep homegear
root      1688  0.0  0.6  75580  6660 ?        Ss   Aug12   0:13  |   |       \_ /usr/bin/homegear -p /var/run/homegear/homegear.pid -u homegear -g homegear -d
systemd+  1689  0.9  5.6 950892 56504 ?        SLsl Aug12  49:34  |   |       |   \_ /usr/bin/homegear -p /var/run/homegear/homegear.pid -u homegear -g homegear -d
systemd+  1708  0.0  0.6  20376  6072 ?        SLsl Aug12   1:11  |   |       \_ /usr/bin/homegear-influxdb -p /var/run/homegear/homegear-influxdb.pid -u homegear -g homegear -d
root      1710  0.0  0.0   1396   392 ?        S    Aug12   0:06  |   |       \_ tail -f /var/log/homegear/homegear.log
pi       23916  0.0  0.0   4776   524 pts/0    S+   17:58   0:00              \_ grep --color=auto homegear

Homegear schien unter systemd+ zu laufen. Kaum die Doku angeschaut und die richtigen Parameter verwendet, funktioniert es auch.

pi@homeassistant:/dev/serial/by-id $ ps -auxf | grep homegear
root     29052  0.0  0.4  67388  4984 ?        Ss   18:13   0:00  |           \_ /usr/bin/homegear -p /var/run/homegear/homegear.pid -u homegear -g homegear -d
pi       29053 21.2  5.4 875096 54236 ?        SLsl 18:13   0:01  |           |   \_ /usr/bin/homegear -p /var/run/homegear/homegear.pid -u homegear -g homegear -d
pi       29072  0.0  0.6  20376  6408 ?        SLsl 18:13   0:00  |           \_ /usr/bin/homegear-influxdb -p /var/run/homegear/homegear-influxdb.pid -u homegear -g homegear -d
root     29073  0.1  0.0   1396   340 ?        S    18:13   0:00  |           \_ tail -f /var/log/homegear/homegear.log
pi       29192  0.0  0.0   4776   552 pts/0    S+   18:13   0:00              \_ grep --color=auto homegear

Schande auf mein Haupt. Mein Docker Aufruf sieht nun folgendermaßen aus:

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 -e TZ=Europe/Berlin -e HOST_USER_ID=$(id -u) -e HOST_USER_GID=$(id -g) -p 2001:2001 -p 2002:2002 -p 2003:2003 --device=/dev/ttyUSB0 --name homegear homegear/rpi-homegear:nightly

Danke für den zündenden Denkanstoß.

VG Xargon

Edit: Bei mir findet Homegear nun sogar ohne --privileged den USB Sender. “–device=/dev/ttyUSB0” scheint erstmal zu funktionieren. Aber ich will es früher oder später trotzdem noch einmal mit der vollständigen ID des USB Senders versuchen.

@Xargon: schön, dass ich Dir helfen konnte …
Du startest den Prozess auch mit dem user “pi” in docker, also hat “pi” in die group “docker” aufgenommen, richtig?

Das habe ich bisher immer nur unter root oder eben meinen Benutzer-Account gemacht, komme aber dann im Container immer mit dem systemd-resolve user raus obwohl ich explizit die 1002 setze für HOST_USER_ID und HOST_USER_GID …

Hi @groovepack,
Nein, ich habe an dem User pi nichts geändert. Also keine Gruppe hinzugefügt oder zusätzliche Rechte vergeben.
Alles was ich bezüglich Rechte, bzw. User Geändert habe ist der Aufruf mit:
-e HOST_USER_ID=$(id -u) -e HOST_USER_GID=$(id -g)
Kannst du den Docker Aufruf verwenden, den ich oben gepostet habe?
VG Xargon