Neues Modul: 98_serviced.pm - systemd und initd Dienste steuern

Begonnen von DeeSPe, 22 November 2017, 01:03:15

Vorheriges Thema - Nächstes Thema

Elektrolurch

#120
Hallo,


Cmnd_Alias FHEM_CMDS = /bin/systemctl *, /usr/sbin/service *

Damit klappt der remote - start von fhem.

Bei openvpn haben sich die Start-Skripte geändert:

Server:
• Place your server configuration file in /etc/openvpn/server
• Use the openvpn-server@.service like so:
$ sudo systemctl start openvpn-server@{Server-config}
Replace {Server-config} with the name of your config file without the .conf


Note:
• openvpn@.service is deprecated.
• openvpn.service is obsoleted. (This is only used for backward compatibility)


Wenn ich mich nun auf dem Server als fhem anmelde und folgendes eingebe:

ssh fhem@Kellergeist sudo systemctl start openvpn-server@server

klappt das ohne Probleme

Aber mit dem serviced - Opbjekt in fhem nicht:

set openvpn start

kommt im log:
error           sudo: Kein TTY vorhanden und kein »askpass«-Programm angegeben

Merkwürdig: Der Server, auf dem fhem und damit serviced läuft, ist auf deutsch eingestellt.
Der, auf dem openvpn-server läuft, auf englisch.
Da der ssh - Befehl solo (s.o.) funktioniert, aber nicht von fhem aus....
[gelöst]
Das Modul hat mit dem @server ein Problem, so dass kein login auf dem remote - Server erfolgt, d.h. das fhem@Kellergeist in der def wird ignoriert.
Lögung:
Attribut serviceLogin mit fhem@Kellergeist
setzen.

Elektrolurch

configDB und Windows befreite Zone!

Otto123

Moin,

das @ kann ein Problem sein: openvpn-server@server
Wie gesagt ich kenne das Modul nicht, ich habe noch noch nicht ganz verstanden was Du konfiguriert hast, aber es kann sein das Du das @ schützen musst: \@

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Karflyer

Ich hatte die Frage schon einmal gestellt aber leider keine Antwort erhalten.
Ich möchte mit dem Modul den Dienst auf einem entfernten Pi steuern. Dieser PI ist aber nicht über den Standard SSH-Port (22) erreichbar, sondern über einen anderen Port. Wie kann ich das in der Definition des Devices mitgeben?

Dan, wenn das nicht vorgesehen ist, könntest du es implementieren?

Grüße
Stefan

Otto123

Hallo Stefan,

unabhängig davon ob Dan eine Idee hat, lese ich das Handbuch von ssh so:
Zitat-p port
Port to connect to on the remote host. This can be specified on a per-host basis in the configuration file.

Wenn das in der DEF also nicht akzeptiert wird:
Zitat-F configfile
Specifies an alternative per-user configuration file. If a configuration file is given on the command line, the system-wide configuration file (/etc/ssh/ssh_config) will be ignored. The default for the per-user configuration file is ~/.ssh/config.
Sollte es doch machbar sein? Ich habe es aber nicht probiert

Für fhem liegt liegt das unter /opt/fhem/.ssh/config

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

DeeSPe

Wie Otto schon geschrieben hat, sollte das sollte mit der config Datei funktionieren.

Ich gucke mir aber gerade das Modul an und schaue ob ich es noch mit übergeben bekomme.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Karflyer

ZitatHallo Stefan,

unabhängig davon ob Dan eine Idee hat, lese ich das Handbuch von ssh so:
Zitat
-p port
Port to connect to on the remote host. This can be specified on a per-host basis in the configuration file.

Wenn das in der DEF also nicht akzeptiert wird:
Zitat
-F configfile
Specifies an alternative per-user configuration file. If a configuration file is given on the command line, the system-wide configuration file (/etc/ssh/ssh_config) will be ignored. The default for the per-user configuration file is ~/.ssh/config.
Sollte es doch machbar sein? Ich habe es aber nicht probiert

Für fhem liegt liegt das unter /opt/fhem/.ssh/config

Gruß Otto

Hallo Otto,

Ich habe im Code des Moduls nachgeschaut. In der def kann man offensichtlich den Port nicht angeben.

Dein zweiter Hinweis auf den config-file im ssh-Verzeichnis hat jedoch zum Erfolg geführt. Diese Möglichkeit kannte ich offen gestanden nicht. Vielen Dank dafür. Trotzdem käme es der Flexibilität des Moduls zugute, wenn Dan die Möglichkeit einer Portangabe vorsehen würde.

Grüße
Stefan

Karflyer

Hallo Dan,
ZitatWie Otto schon geschrieben hat, sollte das sollte mit der config Datei funktionieren.
Ich gucke mir aber gerade das Modul an und schaue ob ich es noch mit übergeben bekomme.
Gruß
Dan

Beim überfliegen deines Codes habe ich 'quick and dirty' bei der Definition der Variable $login den Port übergeben. Ich habe den Port hierbei über ein Attribut  vorgegeben:
  my $sshPort = AttrVal($name,"serviceSSH-Port","");
  my $login = "-p ".$sshPort." ".AttrVal($name,"serviceLogin","");


Wäre vielleicht eine Möglichkeit, wenn du die def nicht anfassen möchtest.

Grüße
Stefan


DeeSPe

#127
In der angehängten Version kann nun beim define nach IP/DNS die Erweiterung " -p <port>" angehängt werden, oder nachträglich im Attribut serviceLogin hinterlegt werden.
Das dürfte die config Datei hierfür überflüssig machen.
Bitte gerne testen und Feedback geben.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Karflyer

#128
ZitatIn der angehängten Version kann nun beim define nach IP/DNS die Erweiterung " -p <port>" angehängt werden, oder nachträglich im Attribut serviceLogin hinterlegt werden.
Das dürfte die config Datei hierfür überflüssig machen.
Bitte gerne testen und Feedback geben.

Die def sieht bei mir jetzt so aus:
define <name> serviced <Dienst Name> <user@ip-adresse> <-p Portnummer>

Das Modul akzeptiert die Definition stellt aber keine Verbindung her. Beim ssh-Aufruf wird nach wie vor der Standardport (22) genutzt:
ssh: connect to host 192.168.2.8 port 22: Connection refused

Ursache ist, das dass Attribut 'serviceLogin' den Port aus der def nicht bekommt. Erst nach Änderung dieses Attributs mit Angabe des Ports funktioniert es jetzt.

Grüße
Stefan

DeeSPe

#129
Hab eine neue Version gebaut.
servicePort ist nun als Attribut verfügbar.
Übergeben kann man den Port beim Definieren nun ohne das "-p" dazwischen (das war irgendwie verwirrend), also:
define <name> serviced <service name> [user@ip-address] [port]

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Karflyer

ZitatHab eine neue Version gebaut.
servicePort ist nun als Attribut verfügbar.
Übergeben kann man den Port beim Definieren nun ohne das "-p" dazwischen (das war irgendwie verwirrend), also:
Code: [Auswählen]
define <name> serviced <service name> [user@ip-address] [port]

Gruß
Dan

Funktioniert jetzt einwandfrei. Vielen Dank Dan für die rasche Umsetzung.

Grüße
Stefan

DeeSPe

Das freut mich.
Habe dabei sogar noch einen "Käfer festgesetzt" (bug fixed).
Ich checke die Version dann nachher noch ein damit sie ab morgen früh mit im Update ist.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

dennisk

Hallo DeeSPe,

mir ist gerade beim Update aufgefallen, dass nach Deinen Änderungen serviceSudo beim Start von fhem als 1 gesetzt wird, obwohl bei mir das Attribut mit 0 eingetragen ist. Ich bin leider in Perl nicht so tief drin und konnte bisher noch nicht nachvollziehen, warum das auf Grund Deiner letzten Änderungen so ist. Könntest Du Dir das einmal anschauen? Wenn Du noch weitere Angaben brauchst, melde Dich.
Danke schon mal!

DeeSPe

Zitat von: dennisk am 21 Februar 2021, 15:04:35
Hallo DeeSPe,

mir ist gerade beim Update aufgefallen, dass nach Deinen Änderungen serviceSudo beim Start von fhem als 1 gesetzt wird, obwohl bei mir das Attribut mit 0 eingetragen ist. Ich bin leider in Perl nicht so tief drin und konnte bisher noch nicht nachvollziehen, warum das auf Grund Deiner letzten Änderungen so ist. Könntest Du Dir das einmal anschauen? Wenn Du noch weitere Angaben brauchst, melde Dich.
Danke schon mal!

Hallo dennisk,

ich habe in den letzten Tagen öfter neu gestartet und konnte/kann das Verhalten nicht nachvollziehen. An dem "sudo" war ich auch gar nicht dran.
Hast Du ein paar mehr Informationen für mich? Was ist das für ein Dienst? Remote oder lokal? Zeig mal die Raw-Def.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

dennisk

Hier mal die RAW Def:
defmod sd serviced fhem
attr sd serviceSudo 0

setstate sd running
setstate sd 2021-02-21 18:02:47 error none
setstate sd 2021-02-21 18:02:47 state running
setstate sd 2021-02-21 18:02:47 status Active: active (running) since Sun 2021-02-21 18:01:56 CET;; 50s ago


An der Definition von Serviced habe ich seit Monaten nichts geändert. Das Ganze tritt bei mir reproduzierbar nur mit Deinen letzten beiden Commits auf, also bis 1.2.6 ist alles gut.
Ich hab inzwischen rausgefunden, dass mit Deinen letzten Änderungen die Variable $sudo auch dann den String 'sudo' enthält, obwohl serviceSudo auf 0 gesetzt ist. Im zweiten Teil wird ja noch der Inhalt von $login geprüft, und in Bezug auf diese Variable hast Du ja Änderungen vorgenommen (die mittlere Zeile ist neu):

my $login = AttrVal($name,"serviceLogin","");
$login .= $login ? " -p ".AttrNum($name,"servicePort",22) : "";
my $sudo = AttrNum($name,"serviceSudo",1) && $login !~ /^root@/ ? "sudo " : "";


Hilft Dir das schon weiter? Wenn Du noch mehr Infos brauchst, sag Bescheid.

Vielen Dank!