FHEM mit configDB startet nach Neuinstallation nicht - Diverse Probleme

Begonnen von Spezialtrick, 15 Juni 2016, 12:07:34

Vorheriges Thema - Nächstes Thema

Spezialtrick

Hallo zusammen,

ich musste gestern, aufgrund von schon länger andauernden Problemen mit der der SD-Karte, mein gesamtes System, das auf einem Cubietruck läuft, neu installieren. Bei dieser "Gelegenheit" habe ich Debian auch von Wheezy auf Jessie aktualisiert. Nun läuft das System auf:

ARMBIAN Debian GNU/Linux 8 (jessie) 3.4.112-sun7i

Im Anschluss habe ich Fhem 5.7 installiert, dann den neuen Fhem Ordner unter /opt durch meinen alten Fhem ausgetauscht und die Rechte angepasst. Zudem habe ich entsprechend dem configDB Workshop von betateilchen die notwenigen Pakete installiert und das Start Skript angepasst.

https://forum.fhem.de/index.php/topic,54055.msg456705.html#msg456705

Mit service fhem start lässt sich Fhem auch starten, allerdings ist die GUI nicht erreichbar. service fhem status gibt mir folgende Fehler aus:

root@cubietruck:~# service fhem status
● fhem.service - LSB: FHEM server
   Loaded: loaded (/etc/init.d/fhem)
   Active: active (exited) since Wed 2016-06-15 12:04:56 CEST; 15s ago
  Process: 1759 ExecStop=/etc/init.d/fhem stop (code=exited, status=1/FAILURE)
  Process: 1784 ExecStart=/etc/init.d/fhem start (code=exited, status=0/SUCCESS)

Jun 15 12:04:54 cubietruck fhem[1784]: Starting fhem...
Jun 15 12:04:56 cubietruck systemd[1]: Started LSB: FHEM server.
Jun 15 12:05:08 cubietruck sudo[1835]: pam_unix(sudo:auth): conversation failed
Jun 15 12:05:08 cubietruck sudo[1835]: pam_unix(sudo:auth): auth could not identify password for [fhem]
Jun 15 12:05:08 cubietruck sudo[1837]: pam_unix(sudo:auth): conversation failed
Jun 15 12:05:08 cubietruck sudo[1838]: pam_unix(sudo:auth): conversation failed


Kann mir jemand damit weiterhelfen?  ???
FHEM - Debmatic - Zigbee2MQTT - Homekit

betateilchen

Dein Problem hat nichts mit configDB zu tun.

Leider hast Du nicht geschrieben, wie Du fhem neu installiert hast. Die Fehlermeldungen deuten darauf hin, dass Du ein Problem mit dem User "fhem" in Deiner Installation hast.

Und wo kommen eigentlich die ganzen sudo Befehle her, die da beim Starten des Dienstes scheitern?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Spezialtrick

Hallo Udo,

Danke für deine Antwort.  :)

Ich habe FHEM folgendermaßen installiert:

cd /tmp
wget http://fhem.de/fhem-5.7.deb
dpkg -i fhem-5.7.deb
rm fhem-5.7.deb
chmod -R a+w /opt/fhem


Wird der Benutzer fhem automatisch angelegt? Ich habe nur den Benutzer Cubie zusätzlich erstellt.

Wo die sudo Befehle herkommen, kann ich dir leider nicht sagen. :( Vllt. hilft ja das Start Skript, wobei ich hier nur die Änderungen für configdb angepasst habe:

#!/bin/sh
# description: Start or stop the fhem server
# Added by Alex Peuchert

### BEGIN INIT INFO
# Provides:             fhem.pl
# Required-Start:       $local_fs $remote_fs
# Required-Stop:        $local_fs $remote_fs
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    FHEM server
### END INIT INFO

set -e
cd /opt/fhem
port=7072

if test "$2" != "noaptmark"; then
  apt-mark hold fhem > /dev/null
fi

case "$1" in
'start')

        echo "Starting fhem..."

# if you need to start hmland for use with
# Homematic, please start the hmland daemon
# like this (please use correct path and port,
# depending on your installation!)
#
#       /opt/hmcfgusb/hmland -d -p 1234 -r 0
#

#        perl fhem.pl fhem.cfg

# if you want to use configDB for configuration,
# use this command to start fhem:
#
       perl fhem.pl configDB
#
# and remove/comment the above line including fhem.cfg

        RETVAL=$?
        ;;
'stop')
        echo "Stopping fhem..."

# if you want to stop hmland during fhem stop:
#       pkill hmland

        pkill -U fhem perl
        RETVAL=$?
        ;;
'status')
        cnt=`ps -ef | grep "fhem.pl" | grep -v grep | wc -l`
        if [ "$cnt" -eq "0" ] ; then
                echo "fhem is not running"
        else
                echo "fhem is running"
        fi
        ;;
*)
        echo "Usage: $0 { start | stop | status }"
        RETVAL=1
        ;;
esac
exit $RETVAL
FHEM - Debmatic - Zigbee2MQTT - Homekit

betateilchen

Ich weiß zwar nicht, wo Du diese Anleitung her hast (wieso machst Du das gesamte fhem Verzeichnis ausführbar, das macht keinen Sinn), aber lege den fhem Benutzer einfach nochmal manuell an, falls er schon existiert, sollte eine entsprechende Meldung kommen.


useradd --system --home /opt/fhem --gid dialout --shell /bin/false fhem


Ausserdem solltest Du im Startskript die Zeilen


if test "$2" != "noaptmark"; then
  apt-mark hold fhem > /dev/null
fi


löschen.


Und mit configDB selbst hat das immer noch nichts zu tun.

Was passiert eigentlich, wenn Du fhem manuell startest? Also aus dem /opt/fhem Verzeichnis heraus "perl fhem.pl configDB" ausführen.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Spezialtrick

Ich habe nun nochmal die gesamte SD-Karte neu auf gesetzt und Fhem entsprechenden deinem Wiki installiert und den Workshop zur configdb abgearbeitet. Nun habe ich ein, unter dem Benutzer fhem, nacktes Fhem das mit configdb problemlos läuft.

Diesen Teil

ZitatAusserdem solltest Du im Startskript die Zeilen

Code: [Auswählen]
if test "$2" != "noaptmark"; then
  apt-mark hold fhem > /dev/null
fi

löschen.

habe ich entfernt.

Gibt es nun eine Möglichkeit meine Configdb zu importieren oder kann ich einfach den Fhem-Ordner unter /opt durch meinen alten Fhem-Ordner ersetzen?
FHEM - Debmatic - Zigbee2MQTT - Homekit

betateilchen

Das Kopieren komplette Ordner solltest Du besser weglassen.

Welche Datenbank hattest Du im Einsatz? Bei sqlite sollte es reichen, die Datenbankdatei selbst zu kopieren. Bei allen anderen Datenbanksystemen solltest Du auf Betriebssystemebene mit den zugehörigen DB-tools einen Dump machen und in die neue Datenbank importieren.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Spezialtrick

#6
Ich habe mich vollkommen an deinen Workshop gehalten. Daher sollte es sqlite3 sein.

Ich habe nun Standart "configDB.db" in "Backup.configDB.db" umbenannt und meine "configDB.db" nach /opt/fhem kopiert. Weitergehend habe ich mit "chown fhem:dialout configDB.db" den Besitzer und die Gruppe angepasst.

Wenn ich nun Fhem starte und den Status mit  "service fhem status" abfrage, erhält ich folgende Fehler:

root@cubietruck:/opt/fhem# service fhem status
● fhem.service - LSB: FHEM server
   Loaded: loaded (/etc/init.d/fhem)
   Active: active (running) since Fri 2016-06-17 20:04:58 CEST; 5min ago
  Process: 1450 ExecStop=/etc/init.d/fhem stop (code=exited, status=0/SUCCESS)
  Process: 1667 ExecStart=/etc/init.d/fhem start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/fhem.service
           └─1669 /opt/hmcfgusb/hmland -d -p 1234 -r 0

Jun 17 20:04:56 cubietruck fhem[1667]: Starting fhem...
Jun 17 20:04:56 cubietruck fhem[1667]: Daemon with PID 1669 started!
Jun 17 20:04:58 cubietruck systemd[1]: Started LSB: FHEM server.
Jun 17 20:05:09 cubietruck sudo[1699]: pam_unix(sudo:auth): conversation failed
Jun 17 20:05:09 cubietruck sudo[1699]: pam_unix(sudo:auth): auth could not identify password for [fhem]
Jun 17 20:05:09 cubietruck sudo[1699]: fhem : user NOT in sudoers ; TTY=unknown ; PWD=/opt/fhem ; USER=root ; COMMAND=smartctl -H /dev/sda
Jun 17 20:05:09 cubietruck sudo[1701]: pam_unix(sudo:auth): conversation failed
Jun 17 20:05:09 cubietruck sudo[1701]: pam_unix(sudo:auth): auth could not identify password for [fhem]
Jun 17 20:05:09 cubietruck sudo[1702]: pam_unix(sudo:auth): conversation failed
Jun 17 20:05:09 cubietruck sudo[1702]: pam_unix(sudo:auth): auth could not identify password for [fhem]
Jun 17 20:05:11 cubietruck fhem[1667]: write: Connection reset by peer


Das Fhem GUI ist nicht erreichbar. Die dritte Fehlermeldung konnte ich durch "fhem    ALL=(ALL:ALL) ALL" in /etc/sudoers beheben. Die restlichen Fehlermeldungen bleiben leider bestehen und sehen genauso aus wie zur Themenerstellung: :(

root@cubietruck:/opt/fhem# service fhem status
● fhem.service - LSB: FHEM server
   Loaded: loaded (/etc/init.d/fhem)
   Active: active (running) since Fri 2016-06-17 20:13:39 CEST; 2min 33s ago
  Process: 1812 ExecStop=/etc/init.d/fhem stop (code=exited, status=1/FAILURE)
  Process: 1816 ExecStart=/etc/init.d/fhem start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/fhem.service
           └─1818 /opt/hmcfgusb/hmland -d -p 1234 -r 0

Jun 17 20:13:37 cubietruck fhem[1816]: Starting fhem...
Jun 17 20:13:37 cubietruck fhem[1816]: Daemon with PID 1818 started!
Jun 17 20:13:39 cubietruck systemd[1]: Started LSB: FHEM server.
Jun 17 20:13:50 cubietruck sudo[1851]: pam_unix(sudo:auth): conversation failed
Jun 17 20:13:50 cubietruck sudo[1851]: pam_unix(sudo:auth): auth could not identify password for [fhem]
Jun 17 20:13:50 cubietruck sudo[1853]: pam_unix(sudo:auth): conversation failed
Jun 17 20:13:50 cubietruck sudo[1854]: pam_unix(sudo:auth): conversation failed


Daher komme ich noch auf folgendes zurück:

ZitatWas passiert eigentlich, wenn Du fhem manuell startest? Also aus dem /opt/fhem Verzeichnis heraus "perl fhem.pl configDB" ausführen.

Folgendes wird ausgegeben:

root@cubietruck:/opt/fhem# perl fhem.pl configDB
root@cubietruck:/opt/fhem# [sudo] password for fhem:
[sudo] password for fhem:
[sudo] password for fhem:


EDIT: Können die Passwortabfragen von Skriptaufrufen kommen, die ich in einem Dummie/Notify/Doif hinterlegt hatte?
FHEM - Debmatic - Zigbee2MQTT - Homekit

betateilchen

Zitat von: Spezialtrick am 17 Juni 2016, 20:20:03
root@cubietruck:/opt/fhem# perl fhem.pl configDB
root@cubietruck:/opt/fhem# [sudo] password for fhem:
[sudo] password for fhem:
[sudo] password for fhem:


EDIT: Können die Passwortabfragen von Skriptaufrufen kommen, die ich in einem Dummie/Notify/Doif hinterlegt hatte?

Höchstwahrscheinlich. Denn die Standardinstallation von fhem beinhaltet keine sudo Aufrufe. Der Fehler muss in Deiner Konfiguration liegen, nicht an Deiner Hardwareplattform selbst.

Kannst Du Dein fhem per telnet erreichen?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Spezialtrick

#8
Habe ich ehrlich gesagt noch nie gemacht.

Ich weiß aber, um welche Skripte es sich handelt. Sie greifen per remote ssh auf einen Pi zu. Wenn ich diese Verbindung wiederherstelle, sollte es doch eigentlich keine Probleme mehr machen oder?

Oder lässt sich die Datenbank bearbeiten und die betreffenden Befehle heraus löschen?
FHEM - Debmatic - Zigbee2MQTT - Homekit

Spezialtrick

Ich habe das Fhem Startskript nun nochmals auf die fhem.cfg umgelenkt und fhem über

perl fhem.pl fhem.cfg

gestartet. Die Fhem.cfg ist zum Glück vom 07.06 und das Einzige, das ich ich verändert hatte, war der Umstieg auf ConfigDB.

Leider kommen weiterhin sudo Abfragen und die GUI ist nicht erreichbar:

root@cubietruck:/opt/fhem# perl fhem.pl fhem.cfg
root@cubietruck:/opt/fhem# [sudo] password for fhem:
[sudo] password for fhem:
[sudo] password for fhem:


Daher habe ich mir mal die fhem.cfg anguckt und nach sämtlichen sudo Befehlen gesucht und diese aus der fhem.cfg gelöscht:

define notify_sysmon_Battery notify sysmon:battery.* {my $battValue = ReadingsVal("sysmon","battery", -1);; my $oldBattValue = -1;; if ((defined "Cubie_Battery") && (Value("Cubie_Battery") ne $battValue)) {$oldBattValue = Value("Cubie_Battery");; fhem("set Cubie_Battery ".$battValue);; if (($battValue ne "AC") && (($oldBattValue eq "AC") || ($oldBattValue > $battValue))) {if ($battValue < 15) {fhem("set pushmsg message 'Neuer Batterie Status: Herunterfahren, Batterie Kapazität ist sehr gering: $battValue Prozent >>> System wird in 5 min heruntergefahren'");; system("/usr/bin/sudo shutdown -h 5 &");;} elsif ($battValue < 20) {fhem("set pushmsg message 'Neuer Batterie Status: .$battValue, Batterie Kapazität ist gering: .$battValue. Prozent'");;} elsif ($battValue =~ m/(20|30|40|50|60|70|80|9.|100)/) {fhem("set pushmsg message 'Neuer Batterie Status: .$battValue, Batterie Kapazität: $battValue Prozent'");;}} elsif (($battValue eq "AC") && ($oldBattValue ne "AC")) {fhem("set pushmsg message 'Neuer Batterie Status: .$battValue, '");;}}}


define FHEM.Backup dummy
attr FHEM.Backup event-on-change-reading state
attr FHEM.Backup room System
attr FHEM.Backup webCmd on:off
define FHEMBackupOn notify FHEM.Backup:on {system ("sudo -u root /opt/fhem/FHEM/backup.sh &")}
#Automatisches Backup um 03:00 Uhr starten
define FHEMBackup at *03:00:00 set FHEM.Backup on


Leider tauchen die gleichen Abfragen weiterhin auf:

root@cubietruck:/opt/fhem# perl fhem.pl fhem.cfg
root@cubietruck:/opt/fhem# [sudo] password for fhem:
[sudo] password for fhem:
[sudo] password for fhem:


Der Fehler muss also an einer anderen Stelle liegen. :(
FHEM - Debmatic - Zigbee2MQTT - Homekit

betateilchen

Zitat von: Spezialtrick am 18 Juni 2016, 12:33:10
Der Fehler muss also an einer anderen Stelle liegen. :(

Nö. Der Fehler kommt eindeutig aus Deiner Konfiguration. Bzw. ist eine Folge aus Deiner Neuinstallation.

Hast Du fhem eigentlich in die /etc/sudoers eingetragen?

Aber mal im Ernst: Wer solche notify definiert, wie Du sie hier gerade beschrieben/gezeigt hast, sollte sich über solche Schwierigkeiten nicht wundern. Das was Du da tust, gehört als Funktion in eine 99_myUtils.pm ausgelagert, um das nachvollziehen und warten zu können.


Zitat von: Spezialtrick am 17 Juni 2016, 21:12:29
(telnet) ... Habe ich ehrlich gesagt noch nie gemacht.

Ganz schlecht... die telnet Verbindung ist als absolutes basic feature anzusehen, wenn man vor solchen Problemen steht wie Du jetzt gerade. Sich ausschließlich auf das Webfrontend zu verlassen, ist keine gute Idee.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Spezialtrick

ZitatAber mal im Ernst: Wer solche notify definiert, wie Du sie hier gerade beschrieben/gezeigt hast, sollte sich über solche Schwierigkeiten nicht wundern. Das was Du da tust, gehört als Funktion in eine 99_myUtils.pm ausgelagert, um das nachvollziehen und warten zu können.

Ich werde es mir zu Herzen nehmen und definitiv ändern, sobald Fhem wieder läuft. :(

Hast Du fhem eigentlich in die /etc/sudoers eingetragen?

Ja habe ich, hoffentlich auch richtig allerdings nicht richtig:


#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL
fhem    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d


Habe es nun geändert:

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
fhem    ALL=(ALL) NOPASSWD: ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d


Nun kommen weder beim Aufruf von perl fhem.pl fhem.cfg noch beim Aufruf von perl fhem.pl configDB sudo Abfragen die GUI funktioniert aber leider weiterhin nicht.

Das Fhem Startskript habe ich daher wieder auf die Configdb umgelenkt. Nach einem Neustart bringt auch service fhem status keine Fehlermeldung mehr hervor:

root@cubietruck:~# service fhem status
● fhem.service - LSB: FHEM server
   Loaded: loaded (/etc/init.d/fhem)
   Active: active (running) since Sat 2016-06-18 13:16:26 CEST; 4min 22s ago
  Process: 633 ExecStart=/etc/init.d/fhem start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/fhem.service
           └─654 /opt/hmcfgusb/hmland -d -p 1234 -r 0

Jun 18 13:15:47 cubietruck fhem[633]: Starting fhem...
Jun 18 13:15:47 cubietruck fhem[633]: Daemon with PID 654 started!
Jun 18 13:16:26 cubietruck systemd[1]: Started LSB: FHEM server.
Jun 18 13:16:39 cubietruck fhem[633]: write: Connection reset by peer


Die GUI funktioniert leider nicht und unter htop taucht der Prozess auch nicht auf. :(

ZitatGanz schlecht... die telnet Verbindung ist als absolutes basic feature anzusehen, wenn man vor solchen Problemen steht wie Du jetzt gerade. Sich ausschließlich auf das Webfrontend zu verlassen, ist keine gute Idee.

Wird Telnet nicht mit Fhem gestartet? Normalerweise ist es doch auch standardmäßig definiert, oder?
FHEM - Debmatic - Zigbee2MQTT - Homekit

Spezialtrick

Eine kurze Zeit land gibt service fhem status mit der Configdb aus:

root@cubietruck:~# service fhem status
● fhem.service - LSB: FHEM server
   Loaded: loaded (/etc/init.d/fhem)
   Active: active (running) since Sat 2016-06-18 13:28:57 CEST; 13s ago
  Process: 1293 ExecStop=/etc/init.d/fhem stop (code=exited, status=1/FAILURE)
  Process: 1297 ExecStart=/etc/init.d/fhem start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/fhem.service
           ├─1299 /opt/hmcfgusb/hmland -d -p 1234 -r 0
           └─1301 perl fhem.pl configDB

Jun 18 13:28:55 cubietruck fhem[1297]: Starting fhem...
Jun 18 13:28:55 cubietruck fhem[1297]: Daemon with PID 1299 started!
Jun 18 13:28:57 cubietruck systemd[1]: Started LSB: FHEM server.


Dann nur noch ohne:

root@cubietruck:~# service fhem status
● fhem.service - LSB: FHEM server
   Loaded: loaded (/etc/init.d/fhem)
   Active: active (running) since Sat 2016-06-18 13:28:57 CEST; 14s ago
  Process: 1293 ExecStop=/etc/init.d/fhem stop (code=exited, status=1/FAILURE)
  Process: 1297 ExecStart=/etc/init.d/fhem start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/fhem.service
           └─1299 /opt/hmcfgusb/hmland -d -p 1234 -r 0

Jun 18 13:28:55 cubietruck fhem[1297]: Starting fhem...
Jun 18 13:28:55 cubietruck fhem[1297]: Daemon with PID 1299 started!
Jun 18 13:28:57 cubietruck systemd[1]: Started LSB: FHEM server.
FHEM - Debmatic - Zigbee2MQTT - Homekit

betateilchen

Du bist wenig kooperativ bei der Lösung des Problem. Du wurschtelst irgendwas vor Dich hin, wovon hier niemand was gesagt/geschrieben hat. Sorry, aber so kommen wir nicht weiter.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Spezialtrick

FHEM - Debmatic - Zigbee2MQTT - Homekit