Offizielles FHEM Docker Basis Image für verschiedene Plattformen

Begonnen von Loredo, 28 Juli 2018, 21:24:57

Vorheriges Thema - Nächstes Thema

Loredo

Zitat von: link611 am 20 April 2019, 07:12:27
Guten Morgen und Frohe Ostern,

ich habe vor 2 Tagen das Docker Image mal wieder aktualisiert und seit dem kann mein FHEM das dockerimageinfo-Modul nicht mehr laden...

Ein erneutes erstellen des Containers bringt leider auch nichts...

Kann ich das Modul denn nachträglich irgendwo herbekommen?


Geht das etwas genauer? Gibt es Meldungen im Log?
Es wäre sehr ungewöhnlich, wenn das Modul gar nicht laden würde, da es kaum mehr als ein Dummy Device ist. Die Datei wird beim Neuerstellen des Containers automatisch aktualisiert. Aber wenn du das FHEM Device einmal manuell gelöscht hast, wird es nicht wieder angelegt.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

link611

#271
Naja Meldung ist can Not load Module und please definie device First.

Log sagt folgendes:

PERL WARNING: Subroutine DockerImageInfo_Initialize redefined at ./FHEM/99_DockerImageInfo.pm line 7, <$fh> line 2592.
2019.04.20 08:14:25 1: PERL WARNING: Subroutine DockerImageInfo_Define redefined at ./FHEM/99_DockerImageInfo.pm line 17, <$fh> line 2592.
2019.04.20 08:14:25 1: PERL WARNING: Subroutine DockerImageInfo_GetImageInfo redefined at ./FHEM/99_DockerImageInfo.pm line 58, <$fh> line 2592.
2019.04.20 08:14:25 0: Undefined subroutine &FHEM::Meta::InitMod called at ./FHEM/99_DockerImageInfo.pm line 13, <$fh> line 2592.

Habe das device aber nie manuell gelöscht.

link611

Habe eben Mal ein Update vom fhem gemacht, jetzt klappt's wieder.

Holzlenkrad

Ich rätsel ja immer noch, wie ich am besten die Bluetooth-Schnittstelle meines Raspberry Pi 3 in FHEM nutzen kann.

Also ich weiß, dass es im Netmode host geht. Allerdings ist der Container dann ja nicht mehr im Docker-Netzwerk, wie die anderen Container. Das gute jetzt ist ja gerade, dass die Container von FHEM, Nodered und MQTT kommunizieren können, ohne das ich alle Ports nach außen öffnen musste.
Mit dem Netmode host fällt das ja flach, außerdem ist mir das Sicherheitsgründen nicht ganz so genehm.

Kennt ihr vielleicht eine andere Möglichkeit? Oder kann ich mit Bluetooth Dongles vielleicht auf den Netmode host verzichten? Hab tagelang gegoogelt und eben nur diesen einen Weg gefunden...

Wernieman

Da ist die Frage, was Du mit ereihen willst, also "machen".

Eventuell solltest Du für diese Sache einen eigenen Container hochziehen.
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Holzlenkrad

Zitat von: Wernieman am 20 April 2019, 20:35:26Eventuell solltest Du für diese Sache einen eigenen Container hochziehen.

Ein eigener Container nur für die Bluetooth-Verbindung? Wie soll das funktionieren? Ich will ja von FHEM über dieses Modul https://wiki.fhem.de/wiki/XiaomiBTLESens auf den Sensor per BLE zugreifen.

Loredo

gatttool und hcitool laufen beide in der Shell, das geht theoretisch auch remote per SSH. Aber ob Cooltux das Modul so gebaut hat, weiß ich nicht. Das Prinzip generell gibt es bei Fhem aber an diversen Stellen.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

kotaro

#277
tatsächlich geht das..
es gibt das Attribute sshHost, nur leider kommt bei mir jetzt die Fehlermeldung:

2019.04.20 22:47:18 4: XiaomiBTLESens (xiaomi_FlowerCare_Bonsai) - Run CreateParamGatttool with mod: read,
2019.04.20 22:47:18 5: XiaomiBTLESens (xiaomi_FlowerCare_Bonsai) - Read XiaomiBTLESens_ExecGatttool_Run xiaomi_FlowerCare_Bonsai|C4:7C:8D:6A:91:5C|read|0x38,
2019.04.20 22:47:18 4: XiaomiBTLESens (xiaomi_FlowerCare_Bonsai) - stateRequestTimer: Call Request Timer,
No user exists for uid 6061
,
2019.04.20 22:47:18 5: XiaomiBTLESens (xiaomi_FlowerCare_Bonsai) - ExecGatttool_Done: gatttool return string: xiaomi_FlowerCare_Bonsai|C4:7C:8D:6A:91:5C|error|read|0x38|{"gtResult":"no gatttool binary found. Please check if bluez-package is properly installed"},
2019.04.20 22:47:18 4: XiaomiBTLESens (xiaomi_FlowerCare_Bonsai) - ProcessingErrors,
2019.04.20 22:47:18 4: XiaomiBTLESens (xiaomi_FlowerCare_Bonsai) - WriteReadings: Readings were written


leider weiß ich nicht, wie ich den Docker-Container und Host einrichten muss, das der Docker-Container sich verbindet.

lt CoolTux im Wiki:
sshHost - FQDN oder IP-Adresse eines entfernten SSH-Systems. Das SSH-System ist auf Keyfile basierte Authentifizierung zu konfigurieren. Am elegantesten geschieht das mit einer .ssh/config Datei auf dem SSH-Client.

nur wie wird das gemacht? das übersteigt mein Verständnis. ich glaub ich muss den Public-Key (den ich aus Dockerinfo-Device bekomme) in Authorized_Keys im Host-System packen.. aber mehr weiß ich nicht...

Edit
Achso ich weiß nicht, wie ihr mittlerweile die USB-Geräte einbindet?
Aber ich kann ganz entspannt Serial/by-id nutzen.. habt ihr das mitlerweile auch drin?
--> für mein Signalduino mappe ich einfach das /dev/serial/by-id:/dev/serial/by-id als Volume... und schon kann ich es in Fhem direkt damit ansprechen.. falls das bekannt ist, könnt ihr mein Kommentar ignorieren.. hatte das bisher noch nicht gelesen...

Holzlenkrad

#278
Also, vielen Dank für den Tipp mit der SSH-Verbindung! Genau das, was ich gesucht habe. Funktioniert bei mir nach 1,5 Stunden frickelei auch :)

Leider muss man ein Keyfile nutzen, um das Modul mit dem Host per SSH zu verbinden. Eigentlich ja ganz einfach:
1. Auf dem Host mit ssh-keygen -b 4096 ein solches erstellen
2. Dieses mit ssh-copy-id -i ~/.ssh/id_rsa.pub pi@raspberrypi als Login-Methode hinzufügen
3. Jetzt noch dafür sorgen, dass der Container den Private Key nutzen kann, also als Volumen einbinden:
-v /home/pi/.ssh/id_rsa:/opt/fhem/.ssh/id_docker_host

Nun wird es etwas kompliziert, ich hoffe @Loredo kann da weiter helfen.
4. Wir müssen nun die SSH Config von FHEM anpassen. Am besten auf dem Host als Root die Datei *euer persistentes FHEM-Verzeichnis*/.ssh/config öffnen und am Ende das einfügen:
Host docker-host
    HostName 172.17.0.1
    User pi
    IdentityFile ~/.ssh/id_docker_host


5. Als letztes habe ich den FHEM-Container kurz interactive gestartet (Benutzer fhem!), und per ssh docker-host die erste Verbindung hergestellt, damit der Fingerprint vom SSH Server in der Liste der bekannten Hosts steht.

Edit2: Alternative in der ssh config noch diese Zeile unter der Host-Direktive hinzufügen: StrictHostKeyChecking no
Damit hätten wir dann aber einen Unsicherheitsfaktor.

So, zwei großes Fragen:
Seht ihr hier irgendwelche eklatanten Sicherheitsprobleme?
Wie kann ich die letzten zwei Schritte möglichst automatisiert erledigen?

Edit: Im Bluetooth Modul wird als sshHost natürlich docker-host eingetragen.

Holzlenkrad

Zitat von: kotaro am 20 April 2019, 22:58:45
Edit
Achso ich weiß nicht, wie ihr mittlerweile die USB-Geräte einbindet?
Aber ich kann ganz entspannt Serial/by-id nutzen.. habt ihr das mitlerweile auch drin?
--> für mein Signalduino mappe ich einfach das /dev/serial/by-id:/dev/serial/by-id als Volume... und schon kann ich es in Fhem direkt damit ansprechen.. falls das bekannt ist, könnt ihr mein Kommentar ignorieren.. hatte das bisher noch nicht gelesen...

Steht so ähnlich sogar in der Readme auf Github. Allerdings weiß ich nicht, was der unterschied zwischen -v /dev/serial/by-id:/dev/serial/by-id und  --device=/dev/serial/by-id ist. Vermutlich gar keiner.
Aber wie gesagt, bei Bluetooth funktioniert der Weg leider nicht.

nightstorm99

Hallo Loredo,

kannst du bitte folgende Perl Pakete mit ins Image aufnehmen?
- DateTime::Event::Sunrise
- Date::Calc

Diese brauche ich für ein paar Scripte. Ansonsten super Arbeit.

Laut WIKI soll es auch damit gehen:
- CPAN_PKGS="App::DateTime::Event::Sunrise App::Date::Calc"
aber leider will es nicht.

Danke und Schöne Ostern

Denny

kadettilac89

Zitat von: Holzlenkrad am 21 April 2019, 03:55:46

Wie kann ich die letzten zwei Schritte möglichst automatisiert erledigen?

Edit: Im Bluetooth Modul wird als sshHost natürlich docker-host eingetragen.

ich habe das vollautomatisch in meinem Docker-Updatescript. ssh-keyscan trägt den ssh-host ein damit keine Abfrage zu neuem / geänderten ssh-host erscheint.


# fhemusr ist mein SSH-User, nutze keinen Raspi, kann auch mit user PI gemacht werden. Dann fhemusr durch pi tausch
cd /home/fhemusr/.ssh
#Datei aus Docker kopieren     fhem = name des Docker Containers
docker cp fhem:/opt/fhem/.ssh/id_rsa.pub id_rsa.pub
#authorized_keys erstellen     fhem = User unter dem fhem im Container läuft, default fhem
echo  $(cat ./id_rsa.pub | cut -d" " -f1,2) "fhem@"$(docker ps | grep -i fhem | cut -d" " -f1) > authorized_keys
#Owner setzen    ggf. fhemuser durch pi tauschen, (wie oben, ssh-User)
chown fhemusr:fhemusr authorized_keys
#Berechtigung
chmod 700 authorized_keys
#Key löschen
rm -r id_rsa.pub
#SSH-Key bekannt machen - 172.17.0.1 default IP des Docker hosts, ggf. anpassen
#docker exec -it fhem  ssh-keygen -f "/opt/fhem/.ssh/known_hosts" -R [172.17.0.1]:22
docker exec -it fhem sh -c 'ssh-keyscan -H 172.17.0.1 >> /opt/fhem/.ssh/known_hosts'

Loredo

Ich habe im DEV Image jetzt mal die DNS Auflösung für "host.docker.internal" nebst automatischer SSH Host Key Aktualisierung eingebaut.
Über diesen DNS Namen kann man dann automatisch eine SSH Verbindung zum Docker Host aufbauen. Bitte einmal testen.


Zitat von: nightstorm99 am 21 April 2019, 08:13:59
Laut WIKI soll es auch damit gehen:
- CPAN_PKGS="App::DateTime::Event::Sunrise App::Date::Calc"
aber leider will es nicht.


Geht hier, gerade getestet. Natürlich heißen die beiden Perl Module aber "DateTime::Event::Sunrise" und "Date::Calc" - wie du auf den Präfix "App::" kommst, ist mir unverständlich.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

kotaro

Zitat von: Loredo am 21 April 2019, 12:17:38
Ich habe im DEV Image jetzt mal die DNS Auflösung für "host.docker.internal" nebst automatischer SSH Host Key Aktualisierung eingebaut.
Über diesen DNS Namen kann man dann automatisch eine SSH Verbindung zum Docker Host aufbauen. Bitte einmal testen.

sorry...
fühle mich dazu echt zu doof.. weiß aj nicht mal wo das update-script hingeschrieben werden müsste.. muss ich das im Host oder im Docker-Image ausführen?
in welche datei für den Docker muss es rein.. unter /fhem/core/pre-start.sh???? oder wo...

Loredo

#284
Wenn das so ist, wartest du einfach ab, bis es eine neue Produktiv-Version des Docker Images gibt und erstellst dann den Container einfach neu.
Das neue Prod Image baut gerade und ist so in 2h verfügbar.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER