Status Script für Prozesse und Dienste unter Linux

Wenn man in der Linux Shell schnell, übersichtlich und einfach sehen möchte was für Services bzw. Prozesse (Apache, Postfix, MariaDB etc.) gerade laufen, geht das am einfachsten mithilfe eines kleinen Script. Dies sieht in meinem Fall wie folgt aus:

Entweder erstellt Ihr eine neue Datei mit dem Namen „status.sh“ und fügt das Script dort ein oder Ihr ladet euch die fertige Datei hier herunter.

Anpassungen an dem Script vorzunehmen ist ganz einfach. Der erstes Eintrag in der vierten Zeile „sshd“ ist der Name des Prozesses. Der erste Eintrag der siebten Zeile „SSH Server“ ist der Name der bei der Ausgabe angezeigt wird. Dieses Paar ergibt zusammen einen Status. Der jeweils zweite Eintrag den zweiten Status. Und so weiter.

Wenn Ihr mit den Anpassungen fertig seid, muss die Datei in euer Home-Verzeichnis hochgeladen und mit dem folgenden Befehl ausführbar gemacht werden.

Nun kann diese mit Hilfe von

ausgeführt werden. In der Ausgabe ist auf einen Blick zu erkennen ob alles planmäßig läuft. Schön, oder?

services status script

Aber sind wir hier fertig? Nein. Wir sind faul und wollen es einfach. Dies macht Ihr indem eurer „.bashrc“ die folgende Zeile als Alias hinzugefügt wird.

Der Pfad zum Skript sowie euer Benutzername sollten selbstverständlich angepasst werden. Damit die Änderung übernommen wird, muss die Datei neu geladen werden.

Wenn alles geklappt hat, könnt ihr jederzeit „status“ in der Shell eingeben und bekommt diese praktische Übersicht.

Jetzt sind wir aber fertig, oder? Fast! Wir sind schließlich nicht nur faul sondern lieben auch Automatisierung! Deshalb wollen wir das ganze direkt nach dem Login angezeigt bekommen. Dafür muss erneut die „.bashrc“ bearbeitet und folgendes (mit angepasstem Pfad und Benutzernamen) eingefügt werden.

Ab sofort könnt Ihr euch nach jedem Login einen Überblick verschaffen. – Ganz ohne etwas einzugeben.

FRITZ!Box AHA (AVM Home Automation) mit Google Home steuern

Seit dem 08.08.2017 ist der Google Home mit seinem Google Assistant nun auch in Deutschland erhältlich. Da AVM leider noch immer nicht plant Google Home oder Amazon Echo offiziell zu unterstützen, habe ich nach einem eigenen Weg gesucht um meine Smart Home Geräte von AVM per Sprache zu steuern.

Da ich es praktisch finde das keine weitere Basis benötigt wird wenn man eine FRITZ!Box verwendet und ich grundsätzlich die Hardware von AVM sehr mag, finde ich deren Einstellung beziehungsweise Entscheidungen diesbezüglich sehr schade. Abgesehen davon stellt sich mir auch die Frage wie gut man sich auf einem so stark wachsenden Markt behaupten kann wenn man solche Dinge nicht anbietet.

Doch kommen wir nun zu dem eigentlichen Thema: Die Steuerung von FRITZ!DECT 200 und FRITZ!DECT 300 Geräten mithilfe des Google Home. Das ganze funktioniert natürlich auch mit anderen AVM Geräten wie beispielsweise dem FRITZ!DECT 210. Aufgrund der langen Wege die zurück gelegt werden müssen gibt es jedoch eine recht hohe Verzögerung von im Schnitt etwa 5 Sekunden. Sollte jemand damit Probleme haben empfehle ich an dieser Stelle abzubrechen. Technisches Verständnis ist für diese Anleitung sehr empfehlenswert.

Vorgehensweise

Sprachkommando → Google Home → IFTTT (Google Assistent Service) → IFTTT (Maker Webhooks Service) → Aufruf einer URL → DDNS DynDNS Dienst → Raspberry Pi Webserver → fritzctl console → FRITZ!Box → FRITZ!Box AHA Gerät → Schalten

Hardware & Software

Hardware die ich verwendet habe:

  • FRITZ!Box 6490 Cable mit neuster Firmware 6.83
  • Raspberry PI 3 Modell B
  • Diverse FRITZ!DECT 200 und FRITZ!DECT 300 Geräte
  • Google Home
Google Home

Software die ich verwendet habe:

Dienste die ich verwendet habe:

FRITZ!Box vorbereiten

Die FRITZ!Box sollte auf dem neusten Stand sein und somit über das aktuellste FRITZ!OS verfügen. Empfehlenswert wäre es zudem einen extra Benutzer für die Smart-Home Steuerung anzulegen. Um aus dem Internet über eure FRITZ!Box auf den Raspberry Pi zugreifen zu können, müsst ihr neben einem DynDNS Account auch eine Portfreigabe (HTTPS/443) in den Einstellungen hinterlegt haben. Als DynDNS Anbieter empfehle ich euch den kostenlosen und zuverlässigen DynDNS Service. Wie das alles in eurer FRITZ!Box eingerichtet wird, erfahrt ihr online im Service-Bereich von AVM.

Raspberry PI vorbereiten

Auf meinem Raspberry Pi läuft die neuste Version von Raspbian Stretch Lite, Apache sowie PHP. In diesem Howto werde ich aber nicht weiter auf die Grundeinrichtung eines Raspberry Pi und der bekannten Software eingehen. Alle benötigen Anleitungen und Informationen dazu findet ihr schnell über Google. Um jegliche Kommunikation verschlüsselt zu übertragen ist mein Webserver mit einem kostenlosen Let´s Encrypt SSL-Zertifikat ausgestattet. Wie ihr das schnell und einfach einrichten könnt erfahrt ihr hier.

Um unsere AVM Smart-Home Geräte zu steuern muss auf dem Raspberry Pi zusätzlich fritzctl verfügbar sein. Für die Installation fügen wir dem Betriebssystem das benötigte Repository sowie den dazugehörigen Signaturschlüssel hinzu.

Anschließend aktualisieren wir unser lokales Repository und installieren fritzctl.

Über den folgenden Befehl wird die Einrichtung des Scriptes gestartet:

Sobald alle benötigten Informationen bereitgestellt wurden, könnt ihr eure Smart-Home Geräte bereits über die Kommandozeile steuern. Weitere Informationen dazu erhaltet ihr über den folgenden Befehl:

Zwischenstand kontrollieren

  • Ist der Webserver auf eurem Raspberry Pi über die DynDNS Domain erreichbar?
  • Funktioniert die Steuerung eurer Smart Home Geräte über die Kommandozeile?

Wenn alles bisher eingerichtete funktioniert kann sofort es weiter gehen. Andernfalls empfehle ich euch zuerst die Fehler zu beheben.

Script anpassen

Auch wenn das von mir erstellte Script nicht wirklich schön ist funktioniert es zuverlässig und ist sicher. 😉 Ladet euch das ZIP-Archiv mit den benötigten Dateien hier herunter (Version 1.1) und entpackt diese. Anschließend öffnet ihr die Datei „fritz-aha-connect.php“ und nehmt die nachfolgend genannten und notwendigen Anpassungen vor.

Hier wird festgelegt welche Geräte durch dieses Script gesteuert werden dürfen. Die Namen müssen 1:1 aus der FRITZ!Box übernommen werden. Erlaubt sind jedoch nur Großbuchstaben, Kleinbuchstaben und Zahlen. Unter Umständen müsst ihr die Gerätenamen vorher in der FRITZ!Box diesbezüglich anpassen. „Thermostate“ ist ein Platzhalter der es ermöglicht das alle Heizkörperregler gleichzeitig gesteuert werden können. Die beiden Platzhalter „GutenMorgen“ und „GuteNacht“ können dafür verwendet werden um mehrere Steckdosen gleichzeitig zu schalten. Sollten die Platzhalter nicht benutzt oder benötigt werden, könnt ihr diese einfach entfernen.

Um die Sicherheit zu erhöhen wird im Script ein Schlüssel hinterlegt. Dieser muss bei jeder Anfrage übertragen und abgeglichen werden. Ersetzt „KEYEINFÜGEN“ hier auf jeden Fall durch einen selbst erstellen Schlüssel der aus ca. 30 Zeichen besteht. Erlaubt sind hierbei Großbuchstaben, Kleinbuchstaben und Zahlen.

Wenn bestimmte Geräte nicht ausgeschaltet werden dürfen müsst ihr sie hier auflisten. Beispiel: Server & Computer

Wenn bestimmte Geräte nicht umgeschaltet werden dürfen müsst ihr sie hier auflisten. Beispiel: Server & Computer

Solltet ihr den Platzhalter „Thermostate“ benötigen beziehungsweise verwenden, könnt ihr an dieser Stelle die anzusteuernden FRITZ!DECT 300 Geräte mit Ihren Namen auflisten. Das selbe gilt für die Platzhalter „GutenMorgen“ und „GuteNacht“ im Bereich „Befehle ausführen“ mit ihren FRITZ!DECT 200 Geräten.

Die Dateien müssen nach dem speichern in das Hauptverzeichnis des Webservers hochgeladen werden. Bei mir ist das „/var/www/html/“.

IFTTT vorbereiten

In eurem IFTTT Account benötigt ihr die aktivierten Services Google Assistant und Maker Webhooks.

Verwendete IFTTT Google Home Services

Da es für unsere Zwecke keine passenden Applets gibt müssen wir uns diese selber erstellen. Hierfür gehen wir in den Maker Bereich der IFTTT Plattform und klicken unter „Applets“ – „Private“ auf den „New Applet“ Button. Bei einfachem ein-, aus- oder umschalten müssen die grünen Optionen mit dem entsprechenden Status „on“, „off“ oder „toggle“ verwendet werden. Für mehrere Thermostate oder zum Übergeben eines Wertes sind es die blauen Optionen (Beispiele):

if

Trigger: Google Assistent
„Say a simple phrase“/„Say a phrase with a number“
What do you want to say (Value): Licht/Temperatur auf # Grad einstellen
What do you want the Assistant to say in response? (Value): Ok
Language (Value): German

then

Add action
Action: Webhooks
„Make a web request“
URL (Value): https:// Eure-DynDNS-Adresse .tld/fritz-aha-connect.php
Method (Value): POST
Content Type (Value): application/x-www-form-urlencoded
Body (Value): schluessel=KEYEINFÜGEN&geraet=Geraetename1&typ=200/300&status=toggle/{{NumberField}}
Applet title: Licht/Heizung
Applet description: Licht/Heizung

Nach dem speichern des Applets könnt ihr auf „Want to test or use this Applet yourself? Enable it on IFTTT“ klicken um es zu aktivieren. Wenn ihr alles richtig gemacht habt sollte es auf dieser Seite zu sehen sein. Wenn das der Fall ist könnt ihr ab sofort den von euch eingerichteten Sprachbefehl nutzen. Bitte beachtet das es bei einigen Kombinationen von Wörtern Probleme geben kann da diese teilweise nicht von Google akzeptiert werden. Um solche Fehler auszuschließen empfehle ich, wie in den Beispielen, ganz einfach anzufangen. Solltet ihr ein Applet bearbeiten müsst ihr es unter Umständen erneut aktivieren.

Fertigstellung

Da solche Sachen immer zuverlässig, ohne Probleme und auf Anhieb funktionieren (😋) gehe ich davon aus das alles bestens geklappt hat. Somit könnt ihr nun mit der finalen Einrichtung beginnen und euch alle benötigten Applets erstellen und gegebenenfalls Anpassungen am Script vornehmen.

Über euer Feedback in den Kommentaren würde ich mich freuen.

Let’s Encrypt unter Debian oder Raspbian Stretch einrichten

Lets Encrypt Logo

Verschlüsselung ist schon lange wichtig. Besonders aber dann wenn im Internet persönliche oder empfindliche Daten übermittelt werden. Leider gibt es dennoch viele ungeschützte Webseiten. Let´s Encrypt ist ein kostenloser, automatisierter und offener Herausgeber von SSL Zertifikaten der das ändern möchte. Hier beschreibe ich euch kurz wie Ihr ein SSL-Zertifikat auf eurem Apache Webserver unter Debian Stretch oder Raspberry Stretch installieren könnt.

Installation

Der Certbot, ein Script zum installieren und aktualisieren von Let´s Encrypt SSL-Zertifikaten, bietet spezielle Installationsassistenten für verschiedene Webserver und Betriebssystem Kombinationen an. Den für uns benötigten finden wir in den offiziellen Debian Repositorys.

Sobald danach gefragt wird bestätigen wir die Installation der benötigten Pakete. Der Installationsassistent ist anschließend in der Lage die richtigen Einstellungen und Informationen für den Certbot bereitzustellen. Da uns hierdurch die meiste Arbeit abgenommen wird ist der Rest nun ganz einfach.

Abschließend müssen wir dem Certbot noch ein paar Fragen beantworten. Sobald wir damit fertig sind wird automatisch das SSL-Zertifikat installiert. Dieses ist immer 90 Tage lang gültig.

Zertifikat automatisch verlängern

Damit wir das Zertifikat nicht alle 90 Tage manuell verlängern müssen, legen wir einen Cronjob an der uns diese Arbeit abnimmt. Dafür benötigen wir als erstes eine neue und leere Datei in die ein simples Script eingefügt wird.

Um diese neu angelegte Datei zu bearbeiten verwende ich in diesem Beispiel nano. Selbstverständlich könnt ihr auch einen anderen Editor verwenden.

Folgendes fügen wir ein:

Das Script funktioniert nur wenn es ausführbar ist.

Um die Cronjobs unseres aktuellen Users zu bearbeiten müssen wir folgendes eingeben:

Am Ende der Datei fügen wir dann die nachfolgende Zeile ein und speichern das ganze ab.

Ab sofort wird nun jede Nacht um 3 Uhr das Script ausgeführt und überprüft ob eines unserer Zertifikate erneuert werden muss. Sollte das der Fall sein wird dies sofort gemacht und das Zertifikat ist erneut 90 Tage lang gültig.

Abschließende Worte

Gültige SSL-Zertifikate und eine Verschlüsselung der Kommunikation sind nicht nur zum Schutz der eigenen Kunden oder Besucher wichtig. Auch Google & Co legen inzwischen einen hohen Wert auf solche Dinge und diese wirken sich somit stark auf das SEO-Ranking aus. Da es mit Let´s Encrypt kostenlose SSL-Zertifikate gibt, gibt es keinen Grund mehr ungesicherte Verbindungen zu verwenden.

USB-Stick / SD-Karte formatieren

Manchmal ist es notwendig einen USB-Stick oder eine SD-Karte zu formatieren. Sei es aufgrund eines Linux-Dateisystems das unter Windows nicht erkannt wird oder aufgrund von anderen Fehlern. Wird ein Laufwerk jedoch gar nicht mehr in Windows angezeigt oder wird ein Laufwerk viel kleiner angezeigt als es eigentlich ist, kann man dieses nicht mehr auf normalem Wege formatieren. In so einem Fall kann uns diskpart helfen. Diskpart ist ein Werkzeug das in der Kommandozeile verwendet wird und mit dem Datenträger, Partitionen oder Volumes verwaltet werden können.

Durch das formatieren gehen auf dem Datenträger ALLE Daten UNWIDERRUFLICH verloren!

Als erstes müssen wir die Kommandozeile öffnen indem wir die Tastenkombination [Windows-Taste]+[R] drücken, anschließend „cmd“ eingeben und dies mit der [Enter] Taste bestätigen. Alternativ kann man auch die Datei „cmd.exe“ im System32-Ordner von Windows starten. Durch die Eingabe von „diskpart“ in der Kommandozeile öffnet sich nun das gewünschte Programm.

Jetzt lassen wir uns mit dem folgenden Befehl die verfügbaren Datenträger anzeigen.

Tipp: Durch die erneute Eingabe von „list disk“ mit entfernter SD-Karte bzw. entferntem USB-Stick können wir sicherstellen den richtigen Datenträger zu kennen.

An dieser Stelle ist es wichtig den richtigen Datenträger auszuwählen. Sollte man hier einen Fehler machen kann das einen erheblichen Datenverlust zur Folge haben! In meinem Fall handelt es sich um eine 32GB SD-Karte und somit um den Datenträger Nummer 2. Die Nummer findet sich in der Spalte „###“. Die Auswahl des Datenträgers erfolgt folgendermaßen.

03-diskpart

Tipp: Durch die erneute Eingabe von „list disk“ können wir die getroffene Auswahl visuell bestätigen lassen. Der ausgewählte Datenträger ist nun mit einem Stern (*) markiert.

Um den Datenträger zu bereinigen und alle Partitions- oder Volumeformatierungen von dem Datenträger zu entfernen verwenden wir den Befehl:

04-diskpart

Jetzt erstellen wir eine neue Partition, wählen sie aus und aktivieren sie anschließend.

05-diskpart

Nun muss unsere neue Partition formatiert werden. Da es Datenträger gibt die kein NTFS unterstützen, empfehle ich grundsätzlich erstmal Fat32.

06-diskpart

Abschließend weisen wir unserem Datenträger einen Laufwerksbuchstaben zu damit dieser in Windows verwendet werden kann.

07-diskpart

Durch die Eingabe von „exit“ kann das Fenster von diskpart geschlossen werden.