Homegear in Docker

Hi,

ich habe ein paar Fragen zur Homegear Installation in Docker. Ich verwende euer Image homegear/homegear:stable

In den Logs beim Start sehe ich:

10/03/17 17:53:46.530 Info: Dropping privileges to user homegear (102) and group homegear (102)
10/03/17 17:53:46.530 Info: Homegear is (now) running as user with id 102 and group with id 102.
  1. Wie kann ich die UserID ändern? Im Hostsystem habe ich einen homegear user mit ID 1002 angelegt und ich hätte gerne, dass die Files im gemounteten Volume mit diesem User geschrieben werden.

Außerdem sehe ich in den Logs:

10/03/17 17:53:46.545 Could not set thread priority. The executing user does not have enough privileges. Please run "ulimit -r 100" before executing Homegear.
  1. Ist das wichtig, oder kann ich das ignorieren?

  2. Zum Schluss sind in dem Image mehrere Families / Module installiert, die ich nicht brauche. (Wie) Kann ich die deaktivieren?

Ich danke euch für eure Antworten!
Dominik

Hallo @dominikkv,

Wie kann ich die UserID ändern?

In /etc/passwd und /etc/group. Dort kannst du die Nummern einfach ersetzen. Im Anschluss:

chown -R homegear:homegear /etc/homegear /var/lib/homegear /usr/share/homegear /var/log/homegear /var/run/homegear

Das sollte es eigentlich gewesen sein.

  1. Ist das wichtig, oder kann ich das ignorieren?

Kannst du ignorieren.

  1. Zum Schluss sind in dem Image mehrere Families / Module installiert, die ich nicht brauche. (Wie) Kann ich die deaktivieren?

Einfach in den Konfigs in /etc/homegear/families/ moduleEnabled = false im Abschnitt [General] setzen. Falls der Abschnitt nicht existiert, diesen einfach oben in der Datei ergänzen.

Viele Grüße

Sathya

1 Like

Ich habe auch Probleme mit dem Docker Container.

Das HM-MOD-RPI-PCB wird nicht initialisiert.

GPIO’s werden nicht gesetzt. : Error: Could not export GPIO with index 1 for device “hm-mod-rpi-pcb”. Failed to write to export file: Read-only file system

12/23/17 23:43:19.414 Info: Setting up physical interfaces and GPIOs...
12/23/17 23:43:19.415 Error in file Systems/IPhysicalInterface.cpp line 647 in function virtual void BaseLib::Systems::IPhysicalInterface::exportGPIO(uint32_t): Error: Could not export GPIO with index 1 for device "hm-mod-rpi-pcb". Failed to write to export file: Read-only file system
12/23/17 23:43:19.415 Error in file Systems/IPhysicalInterface.cpp line 554 in function virtual void BaseLib::Systems::IPhysicalInterface::setGPIOPermission(uint32_t, int32_t, int32_t, bool): Error: Failed to get path for GPIO with index 1 and device "hm-mod-rpi-pcb".
12/23/17 23:43:19.416 Failed to open direction file for GPIO with index 1 and device "hm-mod-rpi-pcb": Unable to retrieve path.
12/23/17 23:43:19.416 Info: Dropping privileges to user homegear (106) and group homegear (108)
12/23/17 23:43:19.417 Info: Homegear is (now) running as user with id 106 and group with id 108.
12/23/17 23:43:19.422 Starting script engine server...
12/23/17 23:43:19.430 Initializing licensing controller...
12/23/17 23:43:19.430 Loading licensing controller data...
12/23/17 23:43:19.430 Loading devices...
12/23/17 23:43:19.431 Loading XML RPC devices...
12/23/17 23:43:20.281 Loading device 5
12/23/17 23:43:20.282 Module HomeMatic BidCoS: Info: Central address set to 0xFD0001.
12/23/17 23:43:20.283 Info: Not initializing device family HomeMatic Wired, because no physical interface was found.
12/23/17 23:43:20.283 Info: Disposing family module mod_homematicwired.so
12/23/17 23:43:20.283 Info: Not initializing device family Insteon, because no physical interface was found.
12/23/17 23:43:20.283 Info: Disposing family module mod_insteon.so
12/23/17 23:43:20.284 Info: Not initializing device family MAX!, because no physical interface was found.
12/23/17 23:43:20.284 Info: Disposing family module mod_max.so
12/23/17 23:43:20.284 Info: Not initializing device family Philips hue, because it is disabled in it's configuration file.
12/23/17 23:43:20.284 Info: Disposing family module mod_philipshue.so
12/23/17 23:43:20.284 Loading XML RPC devices...
12/23/17 23:43:20.294 Loading device 1
12/23/17 23:43:20.295 Loading XML RPC devices...
12/23/17 23:43:20.296 Loading device 2
12/23/17 23:43:20.297 Loading XML RPC devices...
12/23/17 23:43:20.298 Loading device 3
12/23/17 23:43:20.299 Info: Not initializing device family Beckhoff, because no physical interface was found.
12/23/17 23:43:20.299 Info: Disposing family module mod_beckhoff.so
12/23/17 23:43:20.299 Info: Not initializing device family KNX, because no physical interface was found.
12/23/17 23:43:20.299 Info: Disposing family module mod_knx.so
12/23/17 23:43:20.299 Info: Not initializing device family EnOcean, because no physical interface was found.
12/23/17 23:43:20.299 Info: Disposing family module mod_enocean.so
12/23/17 23:43:20.300 Info: Not initializing device family Intertechno, because no physical interface was found.
12/23/17 23:43:20.300 Info: Disposing family module mod_intertechno.so
12/23/17 23:43:20.300 Loading XML RPC devices...
12/23/17 23:43:20.302 Loading device 4
12/23/17 23:43:20.302 Initializing RPC client...
12/23/17 23:43:20.302 Starting XML RPC server RPCServer1 listening on :::2001...
12/23/17 23:43:20.305 Starting XML RPC server RPCServer2 listening on :::2002, SSL enabled...
12/23/17 23:43:20.306 RPC Server (Port 2001): Info: RPC Server started listening on address :: and port 2001
12/23/17 23:43:20.344 Starting XML RPC server RPCServer3 listening on :::2003, SSL enabled, authentication enabled...
12/23/17 23:43:20.344 RPC Server (Port 2002): Info: RPC Server started listening on address :: and port 2002
12/23/17 23:43:20.377 Starting CLI server...
12/23/17 23:43:20.378 RPC Server (Port 2003): Info: RPC Server started listening on address :: and port 2003
12/23/17 23:43:20.378 Initializing event handler...
12/23/17 23:43:20.378 Loading events...
12/23/17 23:43:20.379 Starting flows server...
12/23/17 23:43:20.393 Starting IPC server...
12/23/17 23:43:20.398 Start listening for packets...
12/23/17 23:43:20.650 RPC Server (Port 2001): Info: Connection from ::ffff:192.168.0.1:36422 accepted. Client number: 8
12/23/17 23:43:20.651 RPC Server (Port 2001): Info: RPC server client id for client number 8 is: 0
12/23/17 23:43:20.676 Script Engine Server: Info: Spawning new script engine process.
12/23/17 23:43:21.748 Info: Setting allowed core file size to "4294967295" for user with id 106 and group with id 108.
12/23/17 23:43:21.748 Info: Core file size now is "4294967295".
12/23/17 23:43:21.748 Info: Setting maximum thread priority to "0" for user with id 106 and group with id 108.
12/23/17 23:43:21.748 Info: Maximum thread priority now is "0".
12/23/17 23:43:21.780 Script Engine Server: Info: Connection accepted. Client number: 9
12/23/17 23:43:21.781 Script Engine Server: Info: Client with pid 390 successfully registered.
12/23/17 23:43:21.781 Script Engine Server: Info: Script engine process successfully spawned. Process id is 390. Client id is: 0.
12/23/17 23:43:21.789 RPC Server (Port 2001): Error: Session authentication failed for host ::ffff:192.168.0.1. Closing connection.
12/23/17 23:43:22.400 Could not set thread priority. The executing user does not have enough privileges. Please run "ulimit -r 100" before executing Homegear.
12/23/17 23:43:22.400 Error in file Systems/IPhysicalInterface.cpp line 332 in function virtual void BaseLib::Systems::IPhysicalInterface::openGPIO(uint32_t, bool): Failed to open value file for GPIO with index 1 and device "hm-mod-rpi-pcb": Unable to retrieve path.
12/23/17 23:43:22.400 Failed to set GPIO with index "1": Device not open.
12/23/17 23:43:22.401 Module Sonos: Event server "My-Sonos-1234": Info: Started listening on address 172.17.0.2 and port 7373
12/23/17 23:43:22.402 Startup complete. Waiting for physical interfaces to connect.
12/23/17 23:43:22.402 All physical interfaces are connected now.
12/23/17 23:43:22.402 Starting UPnP server...
12/23/17 23:43:22.404 Info: UPnP server: Binding to address: 172.17.0.2
12/23/17 23:43:22.404 UPnP Server: Info: Started listening.
12/23/17 23:43:22.501 Failed to set GPIO with index "1": Device not open.

Docker Aufruf:

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 -p 2001:2001 -p 2002:2002 -p 2003:2003 --device=/dev/ttyAMA0 --name homegear homegear/rpi-homegear:stable

Native funktioniert Homegear auf dem Raspberry mit dem Funkmodul ohne Probleme.

Nur im Dockercontainer funktioniert das Modul nicht.

Ist der Aufruf --device=/dev/ttyAMA0 richtig damit das Modul an den Docker Containter durchgereicht wird?

Die Änderungen in /boot/cmdline.txt

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

und in /boot/config.txt

dtoverlay=pi3-miniuart-bt
enable_uart=1
dtparam=spi=on
dtparam=i2c_arm=on

muss auf dem Host (Raspberry) und nicht im Docker Container erfolgen, oder ?

Muss auf dem Host ebenfalls ein Homegear User vorhanden sein?

Gibt es hier jemanden der diese Konstellation Raspberry PI3 mit Raspbian dem HM-MOD-RPI-PCB Modul
und Homegear im Docker Container erfolgreich am Laufen hat?

26.12.17: Lösung: Der Docker Aufruf war falsch!.

docker run -d --privileged --rm -v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro -v /homegear-data/etc:/etc/homegear:Z -v /homegear-data/lib:/var/lib/homegear:Z -v /homegear-data/log:/var/log/homegear:Z -p 2001:2001 -p 2002:2002 -p 2003:2003 --device=/dev/ttyAMA0 --name homegear homegear/rpi-homegear:stable

Die Option --privileged muss noch gesetzt sein, dass die GPIOs gesetzt werden können.

-v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro setzt noch die Zeit und Zeitzone im Docker Container (wird lokal vom Raspberry ausgelesen).

Hardware:
Raspberry Pi 3, HM-MOD-RPI-PCB Modul, Raspbian Stretch Lite

1 Like

Hallo sathya,
ich versuche gerade meine Homegear Installation von Systemd auf Docker umzustellen. Ich benutze euer Image und möchte UID und GID ändern aber habe keinen Editor im Container zur Verfügung um passwd und group anzupassen. Was mache ich verkehrt?

Hallo @OzZy_HH,

im Container ist tatsächlich kein Editor installiert. Du kannst diesen aber z. B. mit apt update und apt install nano nachinstallieren. Ich werde auch mal sehen, ob ich nicht eine schönere Lösung schaffe ;-).

Viele Grüße

Sathya

Es gibt jetzt zwei neue Umgebungsvariablen: HOST_USER_ID und HOST_USER_GID. Diese kannst du auf UID und GID eines Nutzers des Hostsystems setzen. Der Nutzer homegear im Container bekommt dann exakt diese IDs zugewiesen. Das sollte das Problem lösen.

Siehe auch: https://hub.docker.com/r/homegear/homegear/

Viele Grüße

Sathya

WOW! Super, dass du so ein Feature Request so schnell umsetzt :star_struck:
Ich probier es morgen gleich mal aus und melde mich :slight_smile:

hi @sathya, leider scheint da was noch nicht so richtig zu funktionieren. ich bekomme folgende error meldung:

06/21/18 06:05:23.995 Critical: Cannot start script engine server. Exiting Homegear.                                                                                               
06/21/18 06:06:33.192 Module CCU2: Error in file Interfaces.cpp line 287 in function virtual void MyFamily::Interfaces::create(): The provided hostname is empty.                  
06/21/18 06:06:33.215 Module Beckhoff: Error in file Interfaces.cpp line 45 in function virtual void MyFamily::Interfaces::create(): The provided hostname is empty.               
06/21/18 06:06:33.220 Could not set owner for device /dev/serial/by-id/usb-0658_0200-if00: No such file or directory                                                               
06/21/18 06:06:33.220 Could not set permissions for device /dev/serial/by-id/usb-0658_0200-if00: No such file or directory                                                         
06/21/18 06:06:33.225 Script Engine Server: Critical: Couldn't delete existing socket: /var/run/homegear/homegearSE.sock. Please delete it manually. The script engine won't work. 
Error: Permission denied                                                                                                                                                           
06/21/18 06:06:33.225 Critical: Cannot start script engine server. Exiting Homegear.                                                                                               
root@homegear:

Nachtrag: Wenn ich “homegear” direkt von der shell als root im container starte funktioniert es, wenn ich über das service script, also über “service homegear start” starte bekomme ich diesen error.

Ich habe die gleichen Meldungen im Log des Containers. Das ändern der UID und GID funktioniert aber grundsätzlich schon :slight_smile:
Was ist das eigentlch für ein Device bei dem versucht wird den Owner/Permissions zu ändern?

naja wen der conrainer nicht mehr funktioniert dann funktioniert das für mich eher „grundsätzlich“ nicht mehr :wink:
@sathya wie siehts aus, kannst du den docker container wieder lauffähig bekommen? wäre klasse! :slight_smile:

Hallo @nicx,

es sollte eigentlich funktionieren. Kann es sein, dass die Berechtigungen auf /homegear-data/ nicht passen? Im aktuellen Startbefehl in der Doku (https://hub.docker.com/r/homegear/homegear/) wird die ID des aktuellen Benutzers genommen und dem Benutzer homegear im Container zugewiesen. Das heißt, der Benutzer, welcher das Dockerabbild startet, muss Schreibzugriff auf /homegear-data/ haben. Mach im Zweifel noch einmal ein chown -R nutzer:gruppe /homegear-data/.

Viele Grüße

Sathya

danke der tip hat geholfen. jetzt scheint es zu funktionieren :slight_smile:

ein wunsch noch: ist es möglich die logfiles mit anderen rechten anzulegen? aktuell sieht es so aus:

root@homegear:/# ls -la /var/log/homegear
total 36
drwxr-x— 2 homegear homegear 4096 Jul 5 09:42 .
drwxr-xr-x 8 root root 4096 Jul 5 09:42 …
-rw-r–r-- 1 homegear homegear 2698 Jul 5 09:42 homegear.err
-rwxr-x— 1 homegear homegear 23467 Jul 5 09:43 homegear.log
root@homegear:/#

ich kann aber nicht vom docker hostsystem die dateien öffnen, obowhl ich dort als admin angemeldet bin

zudem werden aktuell alle logs bei neustart immer “angehängt” und dadurch schnell sehr gross. könnte man das umstellen das bei jedem neustart neue logsfiles angelegt werden? das wäre super!

Mit -e HOST_USER_ID=$(id -u) -e HOST_USER_GID=$(id -g) werden die Berechtigungen des aktuellen Benutzers im Datenverzeichnis verwendet (bzw. du kannst auch eine beliebige andere Benutzer- und Gruppen-ID spezifizieren). Damit solltest du dann Zugriff auf die Logs haben.

Da überlege ich mir was (im Sinne von logrotate). Du kannst prinzipiell auch im Hostsystem logrotate entsprechend konfigurieren. Bis dahin ist das einfachste zur Zeit, das Loglevel auf z. B. 3 zu setzen.

Viele Grüße

Sathya

Hallo Sathya,

ich bin dabei Homegear via Docker auf eine QNAP-NAS zu deployen.
Ich folge dabei der Beschreibung auf https://hub.docker.com/r/homegear/homegear/.
Meine Datenverzeichnis sieht wie folgt aus:
-rwxr-xr-x 1 openhab openhab 413 2018-09-27 23:07 docker-run-homegear.sh*
drwxr-xr-x 2 openhab openhab 4096 2018-09-28 15:33 etc/
drwxr-xr-x 2 openhab openhab 4096 2018-09-28 15:33 lib/
drwxr-xr-x 2 openhab openhab 4096 2018-09-28 15:33 log/
[/share/CACHEDEV1_DATA/Container/homegear] #

Mein run script:

#!/bin/sh
docker run \
-d \
-v /share/CACHEDEV1_DATA/Container/homegear/etc:/etc/homegear:Z \
-v /share/CACHEDEV1_DATA/Container/homegear/lib:/var/lib/homegear:Z \
-v /share/CACHEDEV1_DATA/Container/homegear/log:/var/log/homegear:Z \
-e TZ=Europe/Berlin \
-e HOST_USER_ID=$(id -u openhab) \
-e HOST_USER_GID=$(id -g openhab) \
-p 2001:2001 \
-p 2002:2002 \
-p 2003:2003 \
--name homegear homegear/homegear:stable

Wenn ich das Script nun ausführe wird die Berechtigung für den “etc” Ordner einfach wieder geändert?!:

-rwxr-xr-x 1 openhab openhab         413 2018-09-27 23:07 docker-run-homegear.sh*
drwxr-xr-x 4 admin   administrators 4096 2018-09-28 15:39 etc/
drwxr-x--- 9 openhab openhab        4096 2018-09-28 15:39 lib/
drwxr-x--- 2 openhab openhab        4096 2018-09-28 15:39 log/
[/share/CACHEDEV1_DATA/Container/homegear] #

Und entsprechend diese Fehler im Log …

[/share/CACHEDEV1_DATA/Container/homegear/log] # cat homegear.err
09/28/18 15:39:44.104 Warning: No database found. Trying to restore backup.
09/28/18 15:39:44.236 Warning: Database could not be restored. Creating new database.
09/28/18 15:39:48.247 Module Beckhoff: Error in file Interfaces.cpp line 45 in function virtual void 
MyFamily::Interfaces::create(): The provided hostname is empty.
09/28/18 15:39:48.252 Module CCU2: Error in file Interfaces.cpp line 287 in function virtual void 
MyFamily::Interfaces::create(): The provided hostname is empty.
09/28/18 15:39:48.414 Script Engine Server: Critical: Couldn't delete existing socket: 
/var/run/homegear/homegearSE.sock. Please delete it manually. The script engine won't work. Error: 
Permission denied
09/28/18 15:39:48.414 Critical: Cannot start script engine server. Exiting Homegear.
[/share/CACHEDEV1_DATA/Container/homegear/log] #

Kannst du mir bitte helfen. Danke.

@sathya

Sorry, das erste Problem konnte ich lösen bzw. weis ich nun warum. Es wird wahrscheinlich in den externen Ordnern nochmal ein Permission-Change gemacht beim Container-Start. Ich habe habe das Docker-Run Command nicht mit den User openhab sondern mit dem QNAP Admin aufgerufen. Deshalb das Verhalten. Wenn ich jetzt erstmal mit dem QNAP admin teste, dann bekomme ich diesen Fehler:

 [/share/CACHEDEV1_DATA/Container/homegear/log] # cat homegear.err
09/28/18 19:19:54.448 Warning: No database found. Trying to restore backup.
09/28/18 19:19:54.572 Warning: Database could not be restored. Creating new database.
09/28/18 19:19:57.821 Module Beckhoff: Error in file Interfaces.cpp line 45 in function virtual void 
MyFamily::Interfaces::create(): The provided hostname is empty.
09/28/18 19:19:57.825 Module CCU2: Error in file Interfaces.cpp line 287 in function virtual void 
MyFamily::Interfaces::create(): The provided hostname is empty.
09/28/18 19:19:58.053 Could not drop privileges. User name or group name is not valid.
[/share/CACHEDEV1_DATA/Container/homegear/log] #

Leider verstehe ich nicht welche privileges er dropen will. Kann er mit der ID 0 und der Group 0 von der QNAP nichts anfangen? Bzw. gibt es da ein Problem mit dem Namen, da dieser in der QNAP admin, administrators heißt und nicht root, root?

Danke. Würde das echt gern zügig zum Laufen bringen.

Hallo @pulseb,

probier es lieber mit einem Benutzer, welcher nicht die ID 0 hat. Was passiert dann? ID 0 kann nicht mit
HOST_USER_ID und HOST_USER_GID funktionieren, da diese ja bereits von dem Benutzer root belegt ist. Die Berechtigungen auf den gemappten Ordnern müssen natürlich für den angegebenen Benutzer schreibbar sein.

Viele Grüße

Sathya