Die Aufgabe im Programmierpraktikum, für welches ich kürzlich einen SVN-Server installiert habe, ist eine Android-App zu programmieren, mit welcher Bilddateien manipuliert werden können.

Dazu habe ich mir das Android SDK von der Android Developer-Seite heruntergeladen.

Wie ich aber feststellen musste, ist es mit Download und Entpacken des Android SDK allein nicht getan.

Weiterlesen »

Für mein bald startendes Programmier-Praktikum habe ich mir überlegt, dass ein SVN-Repository sicher praktisch sein könnte. Daher beschreibe ich hier kurz die Schritte, um einen lauffähigen Subversion-Dienst zu installieren und einzurichten. Grundlage ist meine Lieblingsdistribution Debian in der Version Wheezy (7.4).

Installation des Subversion-Servers und Anpassen von Apache

Die Installation ist schnell erledigt. Zuerst die Paketquellen updaten. Anschließend kann das Paket geladen werden:

1
2
apt-get update
apt-get install subversion libapache2-svn
apt-get update
apt-get install subversion libapache2-svn

Ich habe auch das Apache-Modul mitinstalliert um die Repository’s über das Netz mit WebDAV zu veröffentlichen. Als nächstes habe ich ein neues Verzeichnis angelegt, (/var/svn) welches die ganzen Repo’s aufnehmen wird. Mit dem Befehl

Weiterlesen »

Mit meiner SMS-Gateway-Lösung bin ich eigentlich sehr zufrieden, sie funktioniert super zuverlässig. Jedoch ist sehr schnell der Wunsch gewachsen, auf die gesendeten SMS-Nachrichten reagieren/antworten zu können. Dafür reicht aber das Konsolen-Tool alleine nicht aus.

Speziell für den Automatisierungs-Zweck gibt es auch einen SMS-Daemon „gammu-smsd„. Dieser funktioniert ähnlich einfach.

Nach der Installation über das Paketmanagement des Raspberry PI’s sollte man die Konfigurations-Datei anpassen. Diese findet sich unter /etc/gammu-smsdrc. Wichtig ist eigentlich nur, dass die port-Directive richtig gesetzt ist. In meinem Fall sieht die Zeile so aus:

1
port = /dev/ttyUSB0
port = /dev/ttyUSB0

Ich bevorzuge eigene Log-Files für jeden Dienst, daher habe ich bei logfile noch den Pfad zum Logfile angegeben und den Wert debuglevel auf 1 gesetzt. Es können natürlich noch viele weitere Parameter definiert werden. Mehr Informationen dazu liefert die offizielle Dokumentation.

Ebenso kann bei service definiert werden, in welchem Backend die SMS-Nachrichten gespeichert werden. Auch hier stehen die gängigsten Formate zur Verfügung (Files, MySQL, PostgreSQL, etc..). Standardmässig werden die Nachrichten in Files gespeichert, was für mein kleines Gateway ausreichend ist.

Das Prinzip ist einfach: Es existieren vier Verzeichnisse. Ausgehende SMS-Nachrichten werden in dem Pfad von outboxpath abgelegt. Der Daemon prüft das Verzeichnis und verarbeitet eventuell vorhandene Dateien. War der Versand erfolgreich, wird diese in den sentssmspath verschoben, ansonsten in den errorsmspath. SMS-Nachrichten, welche empfangen werden, legt der Daemon im Verzeichnis bei inboxpath ab. Diese können dann mit einem anderen Programm verarbeitet werden.

Mit dem Befehl

1
gammu-smsd-inject TEXT MEINE-NUMMER -len 160 -text "Das ist \n ein Test"
gammu-smsd-inject TEXT MEINE-NUMMER -len 160 -text "Das ist \n ein Test"

können nun schon die ersten Nachrichten gesendet werden. Dabei werden die Nachrichten auch im outbox-Pfad abgelegt und erhalten speziell-formatierte Dateinamen. Man kann auch mit

1
echo "TEST" >> /var/spool/gammu/outbox/OUT20130912_140600_00_MEINE-NUMMER_sms0.txt
echo "TEST" >> /var/spool/gammu/outbox/OUT20130912_140600_00_MEINE-NUMMER_sms0.txt

selbst direkt SMS-Nachrichten zum Versand ablegen. Mehr Informationen über das Dateinamen-Format liefert die Doku auf der gammu-Projekt-Seite. Ich habe ein kleines Perl-Script geschrieben, welches die zu sendende SMS zusätzlich in ein schöneres Format bringt. Der Link zum Script findet ihr am Ende des Beitrags.

Das Nagios-Komando für die Service-Benachrichtigungen sieht nun so aus:

1
command_line    /usr/local/bin/sendsms.pl --type $NOTIFICATIONTYPE$ --servicedesc $SERVICEDESC$ --hostname $HOSTNAME$ --state $SERVICESTATE$ --datetime $SHORTDATETIME$ --info "$SERVICEOUTPUT$" --contact $CONTACTPAGER$
command_line    /usr/local/bin/sendsms.pl --type $NOTIFICATIONTYPE$ --servicedesc $SERVICEDESC$ --hostname $HOSTNAME$ --state $SERVICESTATE$ --datetime $SHORTDATETIME$ --info "$SERVICEOUTPUT$" --contact $CONTACTPAGER$

Für die Host-Benachrichtigungen entsprechend ohne die Option Service-Description und angepassten Variablen:

1
command_line    /usr/local/bin/sendsms.pl --type $NOTIFICATIONTYPE$ --hostname $HOSTNAME$ --state $HOSTSTATE$ --datetime $SHORTDATETIME$ --info "$HOSTOUTPUT$" --contact $CONTACTPAGER$
command_line    /usr/local/bin/sendsms.pl --type $NOTIFICATIONTYPE$ --hostname $HOSTNAME$ --state $HOSTSTATE$ --datetime $SHORTDATETIME$ --info "$HOSTOUTPUT$" --contact $CONTACTPAGER$

Der Nagios-Benutzer muss noch in die gammu-Gruppe, damit er in die Verzeichnisse schreiben darf, wenn er das Script ausführt:

1
usermod -aG gammu nagios
usermod -aG gammu nagios

nagios-sms

Und nun der Weg zurück:

Im Script „sendsms.pl“ wird beim Versand eine SMS-ID erzeugt und mit dem betroffenen Host und Service in ein File geschrieben. Mit dieser ID kann später der betroffene Host oder Service wieder identifiziert werden. Der Empfänger der SMS-Nachricht muss nur die SMS-ID in die Antwort-SMS schreiben. Den Rest übernimmt das Script.

Im einfachsten Fall wird einfach nur das Problem in Nagios bestätigt (möglich wären natürlich noch viele weitere Aktionen). Das übernimmt wieder ein kleines Perl-Script (receivesms.pl), welches regelmässig via cronjob das Inbox-Verzeichnis von gammu auf neue Nachrichten überprüft und die darin enthaltenen Dateien einliest.  Dann wird in der von sendsms.pl geschriebenen Events-Datei nach der per SMS gesendeten ID gesucht und „acknowledged“ den richtigen Service / Host in Nagios über das Command-File.

nagios-ack

Beide Scripts (sendsms.pl und receivesms.pl) sind auf der Projects Seite (unten) zu finden.

 

This site uses cookies. Find out more about this site’s impress.