Asterisk-Raspberry-Crash wegen eines Stromausfalls

10. März 2021

Seit fast einem halben Jahr lief bei mir auf einem Raspberry  Pi 3 B+ mein Asterisk-Server mit Fail2Ban ohne Eingriffe, Abstürze und Unterbrechungen absolut zuverlässig. Aber dann traten drei kurze Stromausfälle in den Morgenstunden eines stürmischen Sonntags auf.  Diese Stromunterbrechungen veränderten mein Vertrauen in den Raspberry.

Inzwischen ist mir seit dem 25. Mai 2021 klar, warum mein Raspberry nach einem Stromausfall nicht mehr bootet. Es liegt höchstwahrscheinlich am VoIPBL (VoIP Blacklist). Seitdem ich dieses Programm nicht mehr verwende, verträgt mein Raspberry mit Asterisk und Fail2Ban problemlos Unterbrechungen der  Stromversorgungen. Nach dem Einschalten des Stroms fahren Asterisk und Fail2Ban wieder einwandfrei hoch. So soll es sein. Dennoch ist es sehr sinnvoll ein Notfallpacket für den Fall eines Crashs zu besitzen.

Die Installation meines Asterisk-Servers ist unter https://elektronikbasteln.pl7.de/asterisk-und-fail2ban-auf-dem-raspberry-pi beschrieben.

Raspberry  Pi 3 B+

Vor einigen Tagen hatten wir auf Grund eines Sturms drei kurze Stromausfälle von maximal 10 Minuten. Danach bootete der Raspberry nicht mehr.  Beim Booten erscheint auf der Kommandozeilenebene die Meldung „Kernel Panic“. Das Problem kommt anscheinend häufiger vor als man denkt. Laut

https://www.computerbase.de/forum/threads/warum-zerschiesst-sich-ein-rpi-bei-jedem-stromausfall-selber.1934095/

und

https://forum-raspberrypi.de/forum/thread/34086-raspberrypi-3-bootet-nicht

kann das Betriebssystem Raspbian durch einen Stromausfall zerstört werden. Eine Abhilfe wäre Raspbian als „Read-only“ einzurichten, damit keine Schreibvorgänge mehr auf der Micro-SD-Karte stattfinden können. Die zu beschreibende Dateien müssten sich dann auf einem USB-Stick und/oder im RAM befinden. Eine Suche nach „raspberry read only“ liefert entsprechende Hilfestellungen und Anleitungen.

Es ist natürlich ein Unding, dass ein Embedded System durch einen Stromausfall unbrauchbar wird. Die Read-Only-Lösung erscheint mir zu aufwändig und es ist auch nicht sicher, ob sie einwandfrei funktioniert. Deshalb habe ich mir eine USB-Power-Bank für Smartphones bestellt, die für einige Stunden die Stromversorgung sicherstellen kann. Die USB-Power-Bank wird zwischen den Steckernetzteil und dem Stromanschluss des Raspberry eingesteckt und dient dann als Puffer. Auf dem gleichen Prinzip dienen die Notebook-Akkus als Puffer. Leider können nicht alle USB-Power-Banks als Puffer arbeiten.

Übrigens funktionierte die Sicherheitskopie bei mir auch nicht und zeigte den gleichen Fehler. Ich war gezwungen Asterisk neu aufzusetzen. Dabei zeigte sich beinahe eine Katastrophe. Das aktuelle Raspian hat einen Fehler. Die obere Menueleiste wird im Root-Modus nicht angezeigt. Deshalb installierte ich die Version 3.2. vom 13.2.20. Sie ist unter

https://downloads.raspberrypi.org/raspbian/images/raspbian-2020-02-14/

zu finden und nach dem Download der Zip-Datei zu entpacken und kann dann wie gewohnt mit dem Raspberry Pi Imager auf die Micro-SD-Karte kopiert werden. Sie funktioniert auf meinem Raspberry Pi 3 B+ einwandfrei. Zur Sicherheit ist diese ältere Version zu sichern, bevor sie aus dem Internet verschwindet. Meine Anleitung funktioniert nach meiner Erfahrung auf jeden Fall mit der Version 3.2 oder 3.4 auf dem Rasberry 3 B+.

Nach der Installation des Raspbian 3.2. ist die Ländereinstellung zu wählen. Dann die Aktualisierung überspringen. Dann den Root-Zugang einrichten wie in https://elektronikbasteln.pl7.de/asterisk-und-fail2ban-auf-dem-raspberry-pi  beschrieben.  Alle weiteren Arbeiten erfolgen im Root-Modus.  Als erstes die IP des Raspberry ändern. Am einfachsten geht das, wenn wir die dhcpcd.conf im Ordner etc ersetzen.

Zum Glück konnte ich meine eigene Anleitung verwenden. Bei der Version 3.2 klappte die vorgeschlagene Aktualisierung auf der graphischen Oberfläche nicht und machte das Betriebssystem unbrauchbar. Man kann darauf verzichten. Bei der Installation des Asterisk auf der Kommandozeilenebene verlangte Linux eine Aktualisierung und hatte den Befehl gleich mitgeliefert.  Nach der Aktualisierung klappte dann die Asterisk-Installation mit der Version 16.2.1. Achtung: Die Installation klappt nur, wenn man sich vorher als Root im Raspbian angemeldet hatte. Die Installation von Fail2Ban klappte dann ebenfalls einwandfrei. Iptables war bereits installiert.

Wenn dies erledigt ist, sind nur noch folgende Konfiguration-Dateien zu ersetzen, die man hoffentlich gesichert hatte:

Für die Änderung der IP des Raspbian:

dhcpcd.conf (in etc)

Empfehlenswert ist es die dhcpcd.conf vor der Installation des Asterisk zu ersetzen.

Für Asterisk (in etc/asterisk):

extensions.conf
features.conf
logger.conf
rtp.conf
sip.conf
voicemail.conf

Für Fail2Ban (etc/fail2ban):

jail.conf
defaults-debian.conf (im Unterordner jail.d)

Eventuell sind eigene Sounddateien  in /usr/share/asterisk/sounds/en zu kopieren. Die Pfadangabe gilt für die us-amerikanische Sprachversion, die voreingestellt ist.

Da ich den Sicherungskopien nicht mehr traue, habe ich alle notwendigen Dateien auf einem USB-Stick und auf verschiedenen Festplatten gesichert. Ein USB-Stick ist kein sichererer Aufbewahrungsort, da Datenverlust droht. Vorsicht bei der Sip.conf. Sie kann die Zugangsdaten für die kostenpflichtigen Accounts enthalten. Ebenfalls habe ich die Raspbian-Version 3.2 gesichert, da sie funktioniert. Updates und neuere Versionen können problematisch sein. Gepackt hat das Raspbian 2.3 ein Größe von etwa 1 GByte, entpackt ist sie etwa 3 GByte groß. Diese Version habe ich zudem bereits auf 2 weitere 16 GB große Micro-SD-Karten gezogen. Dadurch wird eine Neuinstallation zügig ablaufen.

Jetzt warte ich nur noch auf die bestellte USB-Powerbank, die ich hoffentlich in den nächsten Tagen in meinem Briefkasten vorfinden darf.

In dieser Pillendose befindet sich alles griffbereit, was ich zur Wiederherstellung des Systems benötige. Es geht auch ein altes Marmeladenglas. Hauptsache es ist genügend groß, damit es leicht auffindbar in einer Schublade verwahrt werden kann.
Inhalt der Wiederherstellungs-Pillen-Dose für den Katastrophenfall. USB-Stick mit dem Betriebssystem Raspbian 3.2 als ZIP und allen notwendigen Konfig-Dateien, zwei 16 GB-Micro-SD-Karten mit vorinstallierten Raspbian 3.2. Ein funktionstüchtiger USB-Card-Reader ist auch dabei, damit man nicht lange suchen muss. Praktisch ist der USB-Stick, der sich für die Aktualisierung der Konfigurations-Dateien in den Raspberry stecken lässt.
Leider ist meine USB-Akkubank immer noch nicht eingetroffen. Die hier abgebildete Lösung für eine unterbrechungsfreie  Stromversorgung ist selbstverständlich völlig übertrieben. Das Foto soll nur verdeutlichen wie gefährlich ein Stromausfall für den Raspberry+Asterisk werden kann.

USB-Powerbank als Puffer für eine unterbrechungsfreie Stromversorgung? Leider ist eine USB-Powerbank nicht immer eine gute Idee. Mein Modell funktioniert wunderbar an Smartphones. Die Powerbank kann gleichzeitig geladen und entladen werden. Doch als Puffer für eine unterbrechungsfreie Stromversorgung ist sie leider ungeeignet. Zieht man das Netzteil aus der Steckdose, unterbricht die Stromversorgung zum Raspberry für eine Sekunde und der Raspberry bootet neu. Genau das möchte man verhindern. Bei einem Smartphone spielt die kurze Stromunterbrechung keine Rolle, da er einen eingebauten Akku besitzt. Zudem verlangt jedenfalls der Raspberry Pi 3 B+ eine Versorgsspannung von etwas mehr als 5 Volt, weshalb er eine Unterspannung beim Betrieb an Akkubänken beklagen kann.

Leider ist eine USB-Powerbank nicht immer eine gute Idee. Dieses Modell z.B. funktioniert wunderbar an Smartphones. Die Powerbank kann gleichzeitig geladen und entladen werden. Doch als Puffer für eine unterbrechungsfreie Stromversorgung ist sie leider ungeeignet. Zieht man das Netzteil aus der Steckdose, unterbricht die Stromversorgung zum Raspberry für eine Sekunde und der Raspberry bootet neu.