Openhab Einstellungen aus Docker sichern

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

apachelance

Benutzer
Registriert
21. Sep. 2013
Beiträge
299
Reaktionspunkte
0
Punkte
22
Ich nutze seit kurzem Openhab auf meiner DS1815+. Dazu habe ich Docker installiert und dieses Paket aus dem Directory installiert: https://hub.docker.com/r/openhab/openhab/

Wichtig ist mir, dass Einstellungen erhalten bleiben, wenn ich den Container update/neu aufsetze. Dazu habe ich Pfade in der Filestation angelegt:

file.JPG

Diese Pfade habe ich im Docker unter Volumes zugewiesen, wie es hier https://hub.docker.com/r/openhab/openhab/ beschrieben ist. Aber die Verzeichnisse bleiben leer. Kann jemand weiterhelfen?

volume.JPG
 
https://hub.docker.com/r/openhab/openhab/ schrieb:
docker run --rm \
--user 9001
-v /opt/openhab/addons:/openhab/addons \
-v /opt/openhab/conf:/openhab/conf \
-v /opt/openhab/userdata:/openhab/userdata \
openhab/openhab:2.0.0-amd64 '

Irgendwie passen die Volume-Angaben auf der Dockerhub-Seite nicht zu deinen Mount-Pfaden.

Die Volume-Angaben sind folgend zu verwenden:
-v {Datei/Ordner}:{Mount-Pfad}

Linke Seite: relativer Pfad auf DS ohne /volumeX - diese Verzeichnis wird in den Container gemapped
Rechte Seite: absoluter Pfad in Container - dieser MUSS unverändert aus der Beschreibung übernommen werden, hier wird das Verzeichnis von der linken Seite reingemapped

Falls die linke Seite ein Mount-Point (bspw. für Netwerzklaufwerke, Mount-Bind), dann MUSS dieser vor Start des Docker-Containers gemountet sein.
Wenn die linke Seite erst im nachhinein gemoutet wird, dann bleibt das Verzeichnis im Container leer!

Danach beim erste Start des container unter Details ein Terminal aufmachen und folgendes eingeben:
Code:
  sh -c 'cp -av /openhab/userdata.dist/* /openhab/userdata/ &&  cp -av /openhab/conf.dist/* /openhab/conf/'

Damit kopierst Du die Konfiguration erst in das gemappte Verzeichnis.

Danach folgend starten.
sudo docker run \
--user 9001 \
--name openhab \
--net=host \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v /opt/openhab/addons:/openhab/addons \
-v /opt/openhab/conf:/openhab/conf \
-v /opt/openhab/userdata:/openhab/userdata \
openhab/openhab:2.0.0-amd64

Achtung: wenn Du den Container über die Shell startest, müssen links absolute Namen verwendet werden!
Sprich nicht /docker/opt/openhab sondern /volume1/docker/opt/openhab (oder auf welche Volume Du auch immer Docker installiert hast)
 
Zuletzt bearbeitet:
Ok, danke. Ist doch noch einiges handisch zu machen. Werd ich mir mal anschauen.
 
Du musst nichts händisch machen. Deine Pfade stimmen nur nicht. Siehe auch Info auf der Docker Webseite:

Rich (BBCode):
docker run \
        --name openhab \
        --net=host \
        -v /etc/localtime:/etc/localtime:ro \
        -v /etc/timezone:/etc/timezone:ro \
        -v openhab_addons:/openhab/addons \
        -v openhab_conf:/openhab/conf \
        -v openhab_userdata:/openhab/userdata \
        -d \
        --restart=always \
        openhab/openhab:2.0.0-amd64

Bei mir sieht das so aus, und die Verzeichnisse füllen sich:

docker_setup.jpg
 
Klappt bei mir leider nicht. Wenn ich den Container mit den Pfaden anlege, kommt beim ersten Start sofort "Docker Container openhab unexpected stopped"

Ich gebe die Pfade, wie bei dir an:

2.JPG

Am Ende siehts dann so aus:

1.JPG

Das steht im Container-Protokoll

3.JPG
 
Zuletzt bearbeitet:
Hast Du den alten Container vorher gelöscht? Hatte auch erst den /opt Pfad drin. Dann habe ich das ganze noch mal frisch gemacht mit den oben genannten Pfaden und dann klappte es direkt. Habe allerdings auch den 2.0 und nicht 2.1 in Verwendung.
 
Alter Container ist gelöscht. Passiert trotzdem. Muss ich vielleicht vorher die Config und Userdata aus dem Container in die DSM-Verzeichnisse kopieren, wie haydibe geschrieben hat?
 
Meine Reihenfolge war:

  1. Unter Registrierung das Abbild "openhab/openhab:2.0.0-amd64" laden
  2. Einen neuen Container aus dem Abbild erstellen
  3. Die Verzeichnisse wie oben gezeigt konfigurieren

Die Verzeichnisse in docker/openhab waren zuvor alle leer und fühlen sich direkt beim ersten Start. Wenn Du keine wichtige Konfiguration hast, dann vielleicht Container und Abbild löschen und noch mal ganz von vorne anfangen.
 
Alles sehr seltsam. Hab jetzt auch den openhab2.0-amd64 geladen. Dann Abbild erzeugt mit den selben Netzwerkeinstellungen wie Docker Host. Wenn ich nur das Conf verzeichnis mappe startet der Container (Verzeichnis bleibt aber leer). Wenn ich Userdata auch mappe, startet der Container nicht und es kommt wieder die Fehlermeldung.

Die zu mappenden Ordner habe ich mit der Filestation ganz normal unter dem Docker Verzeichnis angelegt.
 
Vielleicht sind Deine Rechte falsch? Ich habe meine Ordner als Administrator erstellt. Das Dockerverzeichnis wird ja mit der Installation erstellt. Übertrage doch mal die Rechte von der Docker-Freigabe auf die Unterverzeichnisse.
 
Du kannst die UserId übergen:
-e USER_ID=1026

Einfach im Reiter Umwelt die Variabe USER_ID mit der UserId deines Ziel-Users verwenden.
Kannst du auf der Shell über 'id {username}' rausbekommen.

Das mit der Konfigurationskopie habe ich von der Dockerhub-Seite übernommen - so werden bei mir die Daten in die Verzeichnisse kopiert.
Allerdings habe ich es NIE geschafft den Container zu laufen zu bekommen. Der Prozess startet und will Artefakte von Maven herunterladen - nur tut sich da nie etwas.

In DSM6 gibt es /etc/localtime, aber kein /etc/timezone. Letzteres kann man aber easy umgehen: leg dir in /volume1/docker/openhab die Textdatei timezone mit folgendem Inhalt an; "Europe/Berlin" (ohne die "-Zeichen") und map das file /docker/openhab/timezone in den Container /etc/timzone. um localtime zu bekommen habe ich einen Symlink auf locatime angelegt: 'ln -s /etc/localtime /volume1/docker/openhab/localtime' und dann gegen /etc/localtime im Container gemapped.
 
Kannst du mir mal einen Screenshot deiner Rechte für den openhab Ordner zeigen? Ich hab die vom Docker Ordner vererbt, hat aber nichts gebracht.

Dann hab ich mal im Userdata-Verzeichnis einen etc Ordner erstellt, da dies ja in der Karafa Meldung im Protokol als Fehler kam. Daraufhin kommen jetzt diese Fehler

4.JPG

Sieht nach einem Rechteproblem aus.
 
Mein docker Ordner sieht so aus:

docker_ordner.png

Die Rechte vom untergeordneten openhab Ordner sehen so aus:

openhab_ordner_1.png

und

openhab_ordner_2.png

Nach dem Start hat openhab dann z.B. die folgenden Ordner im conf-Verzeichnis angelegt:

docker_conf.jpg
 
Wenn man die Umwelt-Variable USER_ID nicht selber setzt, hat sie bei disesm Image den Wert 9001! Das Docker-Verzeichnis gehört aber nicht dem User mit der ID 9001.

Da gibt es zwei Möglichkeiten:
1. Den Owner des Verzeichnisses /volume1/docker/openhab auf user id 9001 ändern -> chown 9001:100 -R /volume2/docker/openhab
2. Die Variable USER_ID in der Docker UI auf euren Benutzer setzen und danach das Verzeichnis demselben user zuordnen:
chown ${id -u}:${id -g} -R /volume2/docker/openhab # macht den gerade eingeloggten user zum Besitzer! (sprich: nicht als root user).

Möglichkeit 2 ist dabei der richtige Ansatz.
 
Wenn man die Umwelt-Variable USER_ID nicht selber setzt, hat sie bei disesm Image den Wert 9001! Das Docker-Verzeichnis gehört aber nicht dem User mit der ID 9001.

Da gibt es zwei Möglichkeiten:
1. Den Owner des Verzeichnisses /volume1/docker/openhab auf user id 9001 ändern -> chown 9001:100 -R /volume2/docker/openhab
2. Die Variable USER_ID in der Docker UI auf euren Benutzer setzen und danach das Verzeichnis demselben user zuordnen:
chown ${id -u}:${id -g} -R /volume2/docker/openhab # macht den gerade eingeloggten user zum Besitzer! (sprich: nicht als root user).

Möglichkeit 2 ist dabei der richtige Ansatz.

Bei Variante 2:
Ich bin der Besitzer, siehe Screenshot. Also müsste ich nur im Docker UI zum Reiter Umwelt gehen und dort die Variable USER_ID mit dem Wert apachelance eintragen?

5.JPG
 
Neben dem Rechteproblem gibt es wohl noch weiteres:

root@dsm:~# docker run \
> --user 1026 \
> --name openhab \
> --net=host \
> -e USER_ID=1026 \
> -v /volume2/docker/openhab/addons:/openhab/addons \
> -v /volume2/docker/openhab/conf:/openhab/conf \
> -v /volume2/docker/openhab/userdata:/openhab/userdata \
> openhab/openhab:2.1.0-snapshot-amd64
Unable to find image 'openhab/openhab:2.1.0-snapshot-amd64' locally
2.1.0-snapshot-amd64: Pulling from openhab/openhab
83714cdcc528: Pull complete
91378372dca9: Pull complete
fa984495abc8: Pull complete
a3328785d149: Pull complete
c123ca1aa7ab: Pull complete
fced1e208690: Pull complete
Digest: sha256:0b40bff080c0955d31e6927fa1627a10650d757daa32c4309d7f2bc7c4a49442
Status: Downloaded newer image for openhab/openhab:2.1.0-snapshot-amd64
Launching the openHAB runtime...
karaf: KARAF_ETC is not valid: /openhab/userdata/etc

Der Fehler tritt nicht mehr auf, wenn man auf der Shell folgendes eingibt:
Code:
echo "Europe/Berlin" > /volume2/docker/openhab/timezone

root@dsm6:/volume2/docker/kopfpilot/openhab# docker run \
> --user 1026 \
> --name openhab \
> --net=host \
> -e USER_ID=1026 \
> -v /volume2/docker/openhab/timezone:/etc/timezone \
> -v /volume2/docker/openhab/addons:/openhab/addons \
> -v /volume2/docker/openhab/conf:/openhab/conf \
> -v /volume2/docker/openhab/userdata:/openhab/userdata \
> openhab/openhab:2.1.0-snapshot-amd64
Launching the openHAB runtime...
Unable to update instance pid: Unable to create directory /openhab/runtime/instances

__ _____ ____
____ ____ ___ ____ / / / / | / __ )
/ __ \/ __ \/ _ \/ __ \/ /_/ / /| | / __ |
/ /_/ / /_/ / __/ / / / __ / ___ |/ /_/ /
\____/ .___/\___/_/ /_/_/ /_/_/ |_/_____/
/_/ 2.0.0
Release Build

Hit '<tab>' for a list of available commands
and '[cmd] --help' for help on a specific command.
Hit '<ctrl-d>' or type 'system:shutdown' or 'logout' to shutdown openHAB.

Laufen tut es trotzdem nicht.
 
Zuletzt bearbeitet:
Hab jetzt die USER_ID rausgefunden und in der Docker UI eingetragen. Der Container lässt trotzdem nicht starten und es kommen die gleichen Fehler mit Permission denied auf den gemounteten Verzeichnissen. Das ist schon ziemlich nervig, zumal der Openhab Container ja ohne gemountete Verzeichnisse läuft. Ich will halt nur meine Einstellungen außerhalb sichern.
 
Der Container läuft bei dir ohne gemountete Verzeichnisse? Wie lange hast Du gewartet zwischen Container start und Zugriff auf die UI? Bei mir tut sich da auch noch 10 Minuten nichts ...

Bei mir läuft er in egal welcher Konstellation nicht - er beschwert sich zwar das die pid nicht geschrieben werden kann, aber der Java-Prozess läuft munter vor sich hin. Das mit der PID ist auch irrelavant, da der Container eh gekillt wird, wenn der Prozess nicht mehr läuft.

In /openhab/userdata/tmp (bzw in dem gemappten DS-Verezeichnis) werden munter Verzeichnisse nach dem Muster fileinstall-8831520886618866087 angelegt, da ist aber nie etwas drin.


Zu Deinem Permission problem: bitte auf der shell mal folgendes eingeben und dann hier posten
Code:
id {username}
ls -l /volume2/docker/openhab
 
Ja, der Container ohne irgendwelche Mounts läuft problemlos. UI Zugriff dauert knapp 30sek - 1min.

Hier der Output:
uid=1029(apachelance) gid=100(users) groups=100(users),101(administrators)
drwxrwxrwx+ 3 apachelance users 4096 Feb 5 12:13 userdata
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat