trueten.de

»Wenn Gott wirklich existierte, müsste man ihn umbringen.« Michail Bakunin

Wenn Du merkst, daß Dein Pferd tot ist: Steig ab.

Twitter. (Symbolfoto)
Twitter. (Symbolfoto)
Quelle: Museum of Veterinary Anatomy FMVZ USP
Lizenz: CC BY-SA 4.0 , via Wikimedia Commons
Ich hatte neulich aus Gründen (1.,2.) meinen zunehmenden Widerwillen gegen Twitter verkündet. Auch wenn dort die Trolle und Nazis am lautesten keifen und meine Laune jedes Mal in den Keller tendiert, gibt es da natürlich auch jede Menge korrekter Menschen. Trotzdem: Nach 10 Jahren in dem "sozialen" Netzwerk wird es für mich Zeit, anderswo meine Fühler auszustrecken und dabei auch diverse Software auszuprobieren. Den ursprünglichen Beweggründen der Teilnahme bei Twitter und FaceBook entsprechen für mich heute am ehesten Mastodon und Diaspora, die nicht zentral wie die in Mordor, dem Reich Saurons angesiedelten, social kommerziellen Networks daher kommen, sondern notfalls in einer eigenen Instanz auf dem heimischen Server laufen können.

Als erstes war mir ein CLI wichtig, das ich per cronjob steuern kann, um meine von Twitter gewohnte tägliche Zeitansage auch auf Mastodon kundtun zu können tooten. Erste Wahl ist für mich - auch wenn der Name etwas einfallslos ist - toot.

Die jahrelange Twitter Präsenz hat auch dazu geführt, daß ich etwas eingerostet bin, was die Benutzeroberfläche betrifft. Die von Mastodon ist eher naja, wie das selige TeetDeck: Grausam. Jedoch bin ich durch einen Hinweis auf halcyon.anoxion.de gestoßen, der sich Webmäßig wie Twitter verhält.

Für GNU emacs gibt es einen Client mit dem sich vortrefflich tooten lässt und der selbst auf einem VT 420 Terminal läuft. Für Android nutze ich momentan AndStatus, da bin ich aber noch in der "Orientierungsphase" und probiere alle möglichen Clients aus. Der Vorteil bei AndStatus is, daß man neben Mastodon auch Twitter damit bedienen kann.

Ein wenig mehr zu Mastodon hat Don di Dislessia bei sich gebloggt. Zum Abschluss, wegen dem ganzen tooten:

Neulich, an irgendeinem Bahnhof in Paris, am Fahrkartenschalter:

"Two to Toulouse", fordert ein britischer Kunde. Der nächste verlangt:
"Two to Toulouse, too."
Darauf der Beamte: "Täterätätä..."

SCNR.

RaspBerry Pi: Überallklingel 1.2

Zu Beschleunigung der Zustellung dringend erwarteter Pakete habe ich mich in der Vergangenheit aller möglichen Tricks bedient:

• Duschen.
• Auf dem Klo sitzen.
• Im Keller oder auf dem Dachboden herum lungern.
• Verschlafen.
• Am Fenster auf das gelbe Fahrzeug warten.
• ...

Klappt im Grunde alles nicht richtig. Irgendwie war doch immer eine Benachrichtigung im Briefkasten, mit dem Vorwurf, der / die ZustellerIn hätte mich oder einen anderen Vertreter meiner Sippschaft nicht angetroffen.

Daher kam das Überallklingel Projekt der c't 17/2017, S. 84 wie gerufen. Flugs einen Pi Zero W (*) herausgekramt, einen Widerstand, eine Diode und einen Optokoppler auf ein Stück Lochrasterplatine gelötet und dann beherzt an das Kabelwirrwar der heimischen Siedle HT401a-01 Telefonanlage angeschlossen. Nach der Installation der Telefonanlagensoftware Asterisk und wenigen Stunden Konfigurationsarbeit funktionierte das ganze sehr schön. Bis die Postboten ihre Taktik änderten und die Klingel ungeduldig bearbeiteten, derweil bereits etwas ältere Blogger die Treppe zur Sprechanlage hoch schnauften. Einige dieser Schlingel verstiegen sich dann wohl in die Vermutung, der Paketempfänger sei nicht zu Hause und machten sich daraufhin hurtig davon.


Damit es mal wieder so richtig wie bei Mr. Beaker in den Ohren klingelt ;-)

Klar, daß mensch dieser unvorteilhaften Situation nicht tatenlos zusehen konnte. Eine Erweiterung der Fähigkeiten der Überallklingel war vonnöten. Wenn der RaspBerry Pi(*) ein Signal (von der Klingel) empfangen und dies an die Telefone, die an der FritzBox(*) hängen weiter leiten kann, dann kann man davon ausgehen, daß er ein solches auch von diesen Telefonen aus (an den Türöffner) senden kann.

Dabei müssen zwei Probleme gelöst werden:

  • Wie kann man den Bengel dazu überreden, die 12Volt Spannnung zu vertragen?
  • Wie muss die vohandene Asterisk Installation erweitert werden, um ein Telefonsignal in eine Aktion des Türöffners zu verwandeln?

Die Suche bei einer beliebigen Internetsuchmaschine ergibt zum ersten Problem hunderte Vorschläge, die darauf hinauslaufen, selbiges mittels Relais zu lösen. Ich habe hier dann die Schaltung von xgadget sowie die Anleitung von 4hf übernommen. Die Relais gibt es über die dortigen Quellen zu erwerben oder eben auf Amazon oder in der Bucht. Ja nachdem, was man schalten will, kauft man eben bis zu 16-fach Relais, die dann jedoch ein eigenes Netzteil benötigen.

Der Relaisanbieter gibt es viele, vermutlich kommen die Bauteile jedoch aus der selben chinesischen Fabrik und werden nur entsprechend Anbieter gebrandet. Wie auch immer: Ich habe für unsere Klingel ein 2 Kanal Relais Modul(*) verwendet. Dieses ist zwar größer als das Einfach Modul, kostet meist jedoch weniger. Komisch? So ist der Kapitalismus nun mal, auch in China. (Stimmt nicht! Hier gibt es die Dinger sogar für 0,88€ plus 1€ Versandkosten!(*))

Doch genug der Ideologie, zurück zur Klingel. Die Signalseite des Relais mit den gewünschten Pins des Raspberry Pi GPIO verdrahten und dann die Lastseite parallel zum Türöffner der Sprechanlage geschaltet. Meistens fangen hier die Probleme an. Sprechanlagen aus der Steinzeit? Kein Problem. Was hatte ich mich aber über die Nachrichten des Postboten und die Anrufe von Familienmitglieder gewundert: Angeblich sei niemand zuhause gewesen. Solche Banditen! Oder sollte etwa...?

Es bleibt kompliziert.

Auch bei Sprechanlagen aus der Steinzeit besteht die Möglichkeit, daß diese nicht nur zur Kommunikation mit der Klingel an der Haustüre, sondern auch zur selbigen mit Etagentelefonen, Klingeln an der Wohnungstüre und anderen Gerätschaften vorgesehen waren. Was bei uns der Fall war und dafür sorgte, daß die Klingel zwar klingelte, wenn diese vor der Wohnungstüre betätigt wurde, jedoch nicht von der Haustüre aus. Getestet hatte ich natürlich nur von der Wohnungstüre aus 8-)

Nachdem auch dieses nicht unerhebliche Problem gelöst war, stand erneuten Versuchen nichts im Wege. Außer Asterisk. Dies ist ja nun nicht gerade ein einfaches Telefonanlagenprogramm, sondern doch schon ein relativ mächtiges Werkzeug, mit dem durchaus auch die Kommunikation von Callcentern oder Konzernzentralen mit dazugehörigen Videoanlagen, Faxgeräten, IP-Telefonie usw. geregelt werden kann. Mit Kanonen auf Spatzen? Wenn's hilft. Zum Glück ist Asterisk skalierbar und es gibt auch eine ausgezeichnete Dokumentation, das Asterisk Buch im Netz.

Leider erfordern umfangreiche Programme etwas Einarbeitung. Deshalb gibt es auch Alternativen wie DoorPi. Im Vergleich zu Asterisk deutlich überschaubarer und auch hinsichtlich Home 4.0 sicherlich sinnvoll. Wenn nicht die Klingel schon auf der Grundlage von Asterisk funktioniert hätte und die DoorPi Lösung ebenso gut dokumentiert wäre. Nach einem kurzen Seitenblick habe ich DoorPi deshalb zur Seite gelegt.

Konzentriert

Die Überallklingel wurde über ein Python Script ausgelöst, das .call Dateien im Outbound von Asterisk anlegt, sobald ein (Klingel)Signal auf ausgewählten GPIO Pins anliegt. Asterisk reagiert auf die .call Datei und setzt deren Inhalt in Aktionen, in dem Fall in einem Anruf bei der Rundrufnummer der FritzBox um. Auf das Projekt ging Andrijan Möcker in seinem c't Artikel ein, diesen kann man auch noch als PDF Datei beziehen.

Beim Türöffner muss ein Signal an einen GPIO Pin gesendet werden, die dann an das Relais weiter geleitet werden, woraufhin der parallel geschaltete Öffner anzieht und die Türe sich öffnen lässt. Da ich des Prorgrammierens in Python nicht mächtig und obendrein zu faul bin, das für eine Klingel zu erlernen, habe ich das in Bash gemacht:

#!/bin/sh
gpio mode 12 out
gpio write 12 0
sleep 2
gpio write 12 1

Mit diesen viereinhalb Zeilen schaltet der Raspberry Pi für 2 Sekunden (so schnell muss der Postbote die Tür öffnen) das Relais über den GPIO Pin 10. Was, Pin 10? Wieso das denn, da steht doch 12? Stimmt. Bei den GPIO Pins gibt es soviele Bezeichnungen für deren Belegungen, wie andere Leute Unterhosen im Schrank haben. Alternative Fakten eben. Tatsächlich ist für die Bezeichnung die jeweilige Bibliothek, die für die Ansteuerung verwendet wird, verantwortlich. Eine gute Übersicht gibt es bei RaspBerry Guide.

Ich verwende hier wiring PI. Dieses Lib ist schnell installiert, ich verweise dazu an der Stelle auf tutorials-raspberry.de. Also. Pin 19 mit dem Signaleingang des Relais verbinden, einen GND Pin des GPIO mit dem selbigen des Relais und Schlußendlich einen 5 Volt Pin des GPIO mit dem VCC Pin des Relais verbinden. Die nebeneinander liegenden VCC und JD-VCC Pins des Relais bleiben bzw. werden im Gegensatz zur Anleitung bei xgadgets mittels eines Pin Steckers gebrückt, damit ersparen wir uns die zusätzliche Versorgung mit 3,3 Volt.

In meinem Fall musste ich die 5 Volt mittels einer Quick & Dirty Lötlösung von dem auf dem Raspberry PI verbauten ZigBee Modul(*) (dem Thema widme ich einen späteren Beitrag) von Dresden Elektronik klauen. Es gehen natürlich auch GPIO Extender(*), falls die Stromverorgungspins alle schon vergeben sind.

Ein erster Funktionstest

"Fliegender" Aufbau. Nach Ablauf diverser Tests werden alle Kabel schön sauber in ein Gehäuse gestopft.
Ein Test, ob man die richtigen Pins belegt hat, ist in jedem Fall sinnvoll. Da 5 Volt im Spiel sind - was für den Raspberry oder auch den auf dem Relais verbauten Optokoppler tödlich sein kann - rate ich in jedem Fall zur sorgfältigen Kontrolle der Schaltung. Für einen ersten Test kann man notfalls auf die Widerstände vom GPIO zum Relais verzichten, aber das ist was für faule Kerle. (Im Falle eines gegrillten RaspBerry Pi bitte ich die entsprechenden Werbelinks in diesem Beitrag zu nutzen, dann hat wenigstens einer etwas davon).

Das Relais selber muss mensch an der Stelle noch nicht an die Sprechanlage anschließen.

Ein entschlossener Aufruf des Scriptes mit dem obigen Inhalt, das vorher unter einem beliebigen Namen zum Beispiel als /usr/local/bin/oeffner.sh gespeichert und anschließend mittels:

sudo chmod a+x /usr/local/bin/oeffner.sh

ausführbar gemacht worden ist, sollte einen deutlich hörbaren Schaltvorgang des Relais zur Folge haben. Zudem sollten die auf dem Relais verbauten LEDs lustig im Schalttakt blinken.

Die halbe Miete

Nun biegen wir beinahe auf der Zielgeraden ein. Zuvor gilt es jedoch die Haarnadelkurve Asterisk zu bewältigen. Wie oben ausgeführt mit durchaus steilem Anstieg der Lernkurve, aber dafür gibt es ja diesen Beitrag hier.

Das Relais schaltet also im Ergebnis der Ausführung des Scripts oeffner.sh. Da der ganze Zweck der Übung der ist, mittels Anwahl einer bestimmten Nummernfolge auf einem der an die FritzBox angeschlossenen Telefone dieses Script auszuführen um so die Türe zu öffnen verwenden wir einen Befehl in Asterisk. Ich setze jetzt voraus, daß Asterisk läuft, sich erfolgreich bei der Fritzbox als IP Telefon angemeldet hat und Klingelsignale empfängt. Dazu habe ich in der FritzBox unter "Telefonie" das IP Telefon "622" mit dem Passwort "Sowasvongeheim" angelegt und in dem Python Script zur Generierung der .call Datei diese Daten ein eingegeben. Nicht verschlampern, die brauchen wir noch, nämlich hier, in dem etwas von mir angepassten (fett markiert) Python Script, das von c't Autor Andrijan Möcker geschrieben wurde:

 import time
 import shutil
 import RPi.GPIO as gpio
 import os
 import sys
 #Einstellungen
 klingel_gpio = 24 #GPIO, der mit der Schaltung verbunden ist
 callfilepfad = "/home/pi/klingel.call" #Dateipfad in dem das Script die .call-Datei ablegt
 sipkanal = "622" #Name des SIP-Kanals (in eckigen Klammern in der SIP.conf)
 sipziel = "**702" #Ziel des Anrufes (Beispiel: **702 als Anrufergruppe der Fritz!Box)
 sipwartezeit = "4" #Wartezeit bevor wieder aufgelegt wird
 #Hier wird die .call-Datei zusammengebaut und abgespeichert
 callfile = "Channel: SIP/" + sipkanal + "/" + sipziel + "\nApplication: Playback\nWaitTime:" + sipwartezeit + "\nData: /var/lib/asterisk/sounds/de/play"
 cf = open(callfilepfad, "w")
 cf.write(callfile)
 cf.close()
 #
 gpio.setmode(gpio.BCM)
 gpio.setup(klingel_gpio, gpio.IN, pull_up_down=gpio.PUD_UP)
 def voip():
 try:
 shutil.copyfile(callfilepfad,'/var/spool/asterisk/outgoing/anruf.call')
 print(text)
 except Exception:
 pass
 while True:
 time.sleep(0.01)
 if not gpio.input(klingel_gpio):
 time.sleep(0.1)
 if not gpio.input(klingel_gpio):
 voip()
 time.sleep(5)

Zu den von mir vorgenommenen Änderungen schreibe ich weiter unten noch ein paar Worte, das sind im wesentlichen auch die Stellen, die auf die Gegebenheiten vor Ort verändert werden müssen. An der Stelle ein Einschub, nämlich die durch dieses Script im Outbound Verzeichnis von Asterisk /var/lib/asterisk/outgoing/ erzeugte .call Datei:

 Channel: SIP/622/**702
 Application: Playback
 WaitTime 4
 Data: /var/lib/asterisk/sounds/custom/play

Asterisk fragt dieses Verzeichnis ständig ab (pollt) und führt darin enthaltenen Dateien aus. In unserem Fall: Anruf bei der FritzBox mit dem SIP Protokoll unter der Userkennung 622 an die Nummer **702, die ich in dem darüber gezeigten klingelscript.py bereits angelegt habe. Bei erfolgreichem Anruf wird für die Dauer von 4 Sekunden der Inhalt der Datei /var/lib/asterisk/sounds/custom/play ausgeführt. Diese braucht nicht zu existieren, es reicht der Impuls durch den Aufruf, um ein Klingelsignal bei der FritzBox auszulösen.

Nach eingehender Lektüre des bereits erwähnten Asterisk Buches bei dem vor allem auf die Zusammenhänge bei den Benutzerrechten geachtet werden sollte, schreiten wir zur Tat. (Das Semikolon leitet Kommentare ein, diese werden nicht ausgeführt):

 ;Allgemeine Einstellungen in der Asterisk Konfigurationsdatei für SIP Telefonie
 ; /etc/asterisk/sip.conf
 ; Ein paar notwendige Grundeinstellungen
 ;
 [general]
 port=5060
 bindaddr=0.0.0.0
 videosupport=no
 dtmfmode=rfc2833
 srvlookup=yes
 directmedia=no
 nat=no
 localnet=192.168.178.0/255.255.255.0 ; Das lokale Netz sowie die Broadcast Adresse
 transport=udp
 callerid=KlingelPi <622> ; Diese Anruferkennung erscheint auf kompatiblen Telefonen
 ;
 ; Der Sip Provider, in unserem Fall die FritzBox
 ; User:Passwort:Ziel/User
 register => 622:Sowasvongeheim@192.168.178.1/624
 ;
 ; Wir legen mal ein Ziel für den Türöffner an:
 [624]
 type=friend
 secret=Sowasvongeheim
 host=192.168.178.1
 insecure=invite,port
 ;
 ; Virtuelles Telefon für das Python Script, das via .call Datei die Überallklingel auslöst.
 [622]
 type=friend
 username=622
 fromuser=622
 secret=Sowasvongeheim
 host=192.168.178.1
 insecure=invite,port

Nun nützt eineM die beste sip.conf nichts, wenn es keine passenden Contexte in der /etc/asterisk/extensions.conf gibt. Wobei, das stimmt nicht ganz, das Script der c't lässt die extensions unberührt. Im Rahmen der Lektüre des Asterisk Handbuches auf der Suche nach alle, was Shell Befehle betrifft, springen einem dann 2 Möglichkeiten zur Befehlsausführung ins Gesicht: System() und TrySytem(). Dazu mal ein Vollzitat:

Führt durch die C-Funktion system() einen Befehl auf der Shell sh aus.
Diese Anwendung ist der TrySystem()-Anwendung sehr ähnlich, abgesehen davon, dass sie -1 zurückliefert, falls sie den Systembefehl nicht ausführen kann, wohingegen die TrySystem()-Anwendung stets 0 zurückliefert.

So. Ob Bash oder sh ist Wurst, wir haben damit die Möglichkeit, daß Asterisk das oeffner.sh Script ausführt. Sofern ein Context zutrifft. Da wir in der FritzBox ja ein Telefon angelegt haben, kommt über dieses mit der Kurzwahl **622 Kennung nicht nur das Signal vom Postboten an der Klingel, sondern mensch kann die **622 auch anrufen. It's Magic!

 ; Entweder an die bestehende /etc/asterisk/extensions.conf anhängen oder überschreiben, sofern keine anderen 
 ; Contexte / Extensions ausgeführt werden müssen.
 ;
 [default]
 ; Das Klingelscript verweist auf die Extension 622:
 exten => 622,1,Answer() ; Asterisk nimmt ab
 exten => 622,2,WaitExten(1) ; wartet 1 Sekunde
 exten => 622,2,Hangup() ; und legt dann auf
 ; Mehr braucht es nicht zum Klingeln
 ;
 ; Anruf bei **622 verweist hierher:
 exten => 624,1,Answer() ; Asterisk nimmt ab
 exten => 624,2,System(/usr/local/bin/oeffner.sh) ; Asterisk ruft die sh Shell auf und führt darin das oeffner.sh Script aus
 exten => 624,3,Hangup() ; Asterisk legt nach Abarbeitung des Scripts auf

Hier wird nun klar, warum ich bei der extensions.conf einige Zeit vertrödelt hatte und letzlich im Unterschied zur c't keinen Rundruf via **9 bei der FritzBox starte, sondern darin eine Gruppe angelegt habe, in der die anzurufenden Telefone vereint sind: Ein Rundruf bei der *9 führt nämlich dazu, daß auch der Öffner ausgelöst wird, denn die **622 ist ja die Nummer, die für die Türöffnung angerufen wird. Und eine Selbstöffnung wollen wir nun nicht wirklich einbauen, das gehört in Arztpraxen...

Ein Blick in das "sauber" von Profis verlegte Siedle HT401a-01
Die Rechnung ohne den Wirt Elektriker

Der bisherige Aufbau empfängt also Signale der Klingel, löst dadurch Anrufe auf den entsprechenden, bei der FritzBox registrierten Telefonen auf der **702 aus und wenn mensch mittels Kurzwahl **622 auf einem dieser Telefone wählt, klickt das Relais.

Das Relais betätigt den Öffner. Wenn es denn (richtig) angeschlossen ist. In unserm Fall verfluche ich jedes Mal die Elektriker, die Ende der 80er Jahre nicht daran gedacht haben, daß im Jahr 2018 jemand einen RaspBerry an ihre "Installation" anschließen will. Es hilft also kein Rezept wie : "Das blaue Kabel durchschneiden, an beide Enden das Relais anschließen, funktioniert 100%". Bestenfalls geht die Klingel nicht, schlimmstenfalls blickt mensch nicht mehr durch...

Nun denn, es hilft nichts, beim Anschluss der Klingel hat sich bei unserer Installation letztlich die gute alte Zahnstochermethode, mit der Kinder gerne Schellenbergerles² gespielt haben (Mit Zahnstocher den Klingelknopf an der Haustüre festklemmen) um die Leitungen oder Anschlüsse zu finden, die in dem Fall im Unterschied zu vorher Spannung anzeigen.

Im Falle unserer uralten Siedle HT401a-01 Anlage war das aber nicht nötig, die Schraubklemmen „7“ und „c“ im Telefon müssen für die Überallklingel abgegriffen werden, wie Moritz Cichon in seinem Blog im Beitrag "Siedle HT401a-01 Klingel austauschen: Endlich ein angenehmer Gong" ausführte.

Bei dem Anschluss des Relais ist es etwas einfacher, hier hilft es, den Öffnerknopf im Haustelefon anzusehen und welche Kontakte er im Auslösezustand schließt. Im Fall Siedle auf die Klemme "I" und den Pin "c" oben rechts auf der Platine. (Der Anschluss an "Lw" wie "Läutewerk"=Vorgabe von Siedle funktionierte bei unserem Telefon leider nicht. Notfalls Platine heraushebeln und die Schaltung an den Leiterplatten nachverfolgen. Hint: Meßgeräte helfen auch hier weiter ;-)) Daran schließen wir dann das Relais parallel an. Keinesfalls in einer Reihenschaltung, sonst löst weder der Türöffner des Haustelefons noch der Anruf bei der **622 den Türöffner aus.

An der Stelle eine Warnung: Auch wenn in Telefonanlagen in der Regel nur niedrige Ströme fließen können diese durchaus unangenehme Folgen (Kurzschluss der Klingelanlage, Stillstand Herzschrittmacher, Mega Ärger mit dem Vermieter usw.) haben. Daher: Ohne entsprechende Ausbildung bitte Fachleute zur Hilfe heranziehen. Es müssen ja nicht die sein, die bei uns die Klingelanlage verlegt haben.

In dem Sinne: Viel Erfolg beim Nachbauen!

Eigentlich fehlt jetzt noch eine Sprechfunktion. Man will ja nicht jedeN ins Haus lassen...



Blogpost enthält Werbung!

**trueten.de ist Teil des Amazon Partnerprogramm EU. Das bedeutet, wenn ihr ein Produkt über die Links kauft, welche mit einem „*“ gekennzeichnet sind (affiliate Link), erhaltet ihr diese zu den üblichen Preisen und ich bekomme eine kleine Provision. So könnt ihr unser Blog ohne extra Aufwand unterstützen! Vielen Dank!

Mailserverumzug

Nach einigen Jahren stand ein Umzug des Mailservers an. Hier läuft das Gespann Postfix / Cyrus / Sieve / SpamAssassin / DCC / Phyzor / Razor sowie, der Vollständigkeit halber, der freie Virenscanner ClamAV, natürlich in der aufgebohrten Version, mit drastisch gesteigerter Erkennungsrate. Diese Kombination sorgt bei uns zusammen mit ein bisschen weiteren Kleinkram, den ich hier nicht erwähne, seit Jahren dafür, daß Probleme mit Mails oder Viren praktisch gar nicht bzw. im Fall von Spam nur sehr vereinzelt auftreten.

Die Einarbeitungskurve ist bei den genannten Servern natürlich nicht gerade flach, zahlt sich jedoch durch Stabilität und Zuverlässigkeit über Jahre aus. (So habe ich heute noch ein paar Mails, die ich, falls mein Blutdruck mal wieder im Keller ist, hervor krame, um mich mal wieder so richtig auzuregen ;-) )

Den mit Abstand größten Aufwand gibt es immer mit dem Cyrus IMAP Server, der sehr stabil läuft, aber auch sehr empfindlich und wenig aussagekräftig bei Fehlern reagiert. So ist zum Beispiel die richtige Einrichtung von Zertifikaten nicht immer ganz trivial. Deswegen getreu dem Motto: Never touch a running System nur Sicherheitsupdates und Parallelbetrieb bei notwendigen größeren Upgrades, um mögliche Ausfälle möglichst gering zu halten. Zwar gibt es immer auch aktuelle Backups, bei Konfigurationsänderungen wegen neuen Features hilft das wenig.

Nachdem also jetzt alles entsprechend zusammengebaut ist, kommt der Streßtest: Import sämtlicher Postfächer aus dem alten in den neuen IMAP Server, Dank der Kombination mit Sieve werden die Mails auch gleich in die entsprechenden automatisch angelegten Ordner einsortiert. Den Importvorgang erledigt imapsync, ein perl Script, das ich aus einer Handvoll Möglichkeiten herausgepickt hatte. Das Script fragt alle möglichen IMAP Postfächer, z.B. Google, GMX, bzw. die jeweils zugrunde liegenden Server wie Courier, Cyrus und wie sie alle heißen, ab und spricht direkt den gewünschten Zielserver an. Gestartet werden kann das Script auf irgendeinem Terminal.

Vor der Installation von imapsync müssen eine Reihe weiterer Bibliotheken und Perl Module installiert werden, zum Beispiel bei dem betreffenden Server, der mit Debian Jessie läuft:

sudo apt install \
libauthen-ntlm-perl \
libcgi-pm-perl \
libcrypt-openssl-rsa-perl \
libdata-uniqid-perl \
libfile-copy-recursive-perl \
libio-socket-inet6-perl \
libio-socket-ssl-perl \
libio-tee-perl \
libhtml-parser-perl \
libmail-imapclient-perl \
libparse-recdescent-perl \
libmodule-scandeps-perl \
libreadonly-perl \
libterm-readkey-perl \
libtest-mockobject-perl \
libtest-pod-perl \
libunicode-string-perl \
liburi-perl \
libwww-perl \
make \
cpanminus

Sobald cpanminus installiert ist, wirft man darüber weitere Module ins System, um die Voraussetzungen für das in Jessie nicht vorhandene Perl Modul Mail::IMAPClient zu installieren:

cpanm Sys::MemInfo

Danach dann:

sudo cpanm Mail::IMAPClient

Sodann kann man für die 2 Faktor Authentifizierung, die im übrigen sehr empfehlenswert ist, das XOAUTH2 Modul installieren:

sudo cpanm JSON::WebToken

Dann kann man endlich dazu übergehen, imapsync selber zu installieren, holen kann man das als normaler User, was natürlich generell empfehlenswert ist:

wget -N https://imapsync.lamiral.info/dist/imapsync

Man macht dann das Script lauffähig:

chmod +x imapsync

Probiert, ob alles geklappt hat:

./imapsync

Und installiert es schließlich an einem beliebigen Ort, hier bei mir immer im lokalen Scriptverzeichnis:

sudo cp imapsync /usr/local/bin/

Die eigentliche Benutzung des imapsync Scriptes ist in der Dokumentation ausführlich beschrieben. Ich setze hier nur eine einfache Variante ein, das Script kann von einem X-beliebigen USer verwendet werden:

/usr/bin/imapsync --host1 imap.gmail.com --user1 karl.napf@googlemail.com --passfile1 ~/secret1 --gmail1 \
--host2 imap.gmx.net --user2 karl.napf@gmx.net --passfile2 ~/secret2 --automap


Das bedeutet, von links nach rechts gelesen: imapsync holt bei Google mit der Userkennung karl.napf@googlemail.com und dem in der Datei ~/secret1 gespeicherten Passwort sowie für Google empfohlenen weiteren Einstellungen die Mails aus dem Postfach und schiebt sie in das GMX Postfach von karl.napf@gmx.net, mit dem in der Datei ~/secret2 gespeicherten Passwort. Der Parameter ermöglicht meiner Erfahrung nach recht zuverlässig das korrekte Mapping bzw. richtige Einsortieren der Mails in die einzelnen Postfächer, jedoch nur die Standards, also Posteingang / INBOX, Gesendet / SENT, Papierkorb / Trash etc.

Weitergehende Sortierung geht über entsprechende regex Filter, die mit imapsync verwendet werden könenn, die bei unserem Server jedoch nicht nötig waren, da die bereits durch jeden User benutzen sieve Filter entsprechend der jeweiligen Bedürfnisse einsortiert werden.

Und nun zum Wetter. Oder: Ein paar nützliche bash Scripts

Am gegenwärtigen Wetter kann man nichts ändern. Aber man kann sich darauf einstellen. Alexander Epstein hat auf github einige nützliche bash Scripte zusammengestellt, zum Beispiel eine anpassbare Wettervorhersage für die nächsten 3 Tage, einen Url Kürzer, einen Videoplayer, Währungsrechner für die Konsole usw. Nach dem Clonen des git Repositories lassen sich alle oder auch nur einzelne der Scripte installieren.

Tags für diesen Artikel: ,
Zuletzt bearbeitet am 26.07.2017 10:20

KeePass2 Plugins unter Ubuntu 16.04 kompilieren

Seit Ubuntu 12.04 ein Problem. Da inzwischen 16.04 lts aktuell ist und ich das jedesmal bei der Installation eines neuen Clients vergesse, leihe ich mal die Gedächtnisstütze bei tuxinaut aus.

Wer Keepass2 Plugins nutzen möchte und folgende Fehlermeldung auftritt:

The following plugin is incompatible with the current KeePass version: /usr/lib/keepass2/OtpKeyProv.plgx

Liegt das daran das mono das Plugin nicht kompilieren kann. Abhilfe schafft das Paket mono-complete zu installieren.

sudo apt-get install -y mono-complete

OnePlusOne: Inoffizielles CyanogenMod 12.1 mit CAF 3.4.0 kernel

Screenshot der aktuellen Version
Heute mal wieder ein Softwaretipp in Zusammenhang mit dem OnePlusOne: Vor allem wegen des nervigen Kamerabugs sind viele User dieses Handys auf der Suche nach einer Lösung. @Sultanxda hat nun vor einigen Wochen auf der Basis von CM 12.1 und einem CAF Kernel einen inoffiziellen CyanogenMod 12.1 Build entwickelt. Diese bietet neben der Behebung des Kamera Bugs durch die Verwendung der OxygenOS Camera Bibliotheken, die unter anderem auch die Performance der Kamera deutlich erhöht und der Snapdragon Camera App von Qualcomman auch eine erhöhte Akkulaufzeit. Letztere durch Drosselung der CPU von 2457MHz auf nunmehr 1958MHz, was sich laut Sultanxda jedoch lediglich in Benchmarkprogrammen und rechenintensiven Apps bemerkbar macht. Er liefert jedoch auch einen Patch mit, der diese Drosselung aufhebt. Dieser muss jedoch bei OTA Updates jeweils neu eingespielt werden.

Der Wechsel auf dieses Build läuft recht problemlos: Backup via Recovery, Recovery auf TWRP 2.8.6.0 up- bzw. Downgraden, da sonst das Modem nicht richtig installiert wird und dann mit den üblichen Befehlen oder mit dem Bacon Root Toolkit flashen sowie anschließend die Google Apps aufspielen. Übrigens klappte es auch mit dem an dieser Stelle von mir geposteten Hinweis auf TWRP 2.8.6.1 für verschlüsselte Dateisysteme.

Hier die Ankündigung:

This is an unofficial CyanogenMod 12.1 build I developed after seeing some of the craziness in the official CyanogenMod kernel (such as massive merges from different sources and untested cherry-picks that introduce random reboots), as well as craziness with CyanogenMod's camera libraries. If you just want your phone to work without any fancy frills then you might be interested in using this. The ROM is the same as official CM12.1 on the outside, but there have been many optimizations under the hood. It comes with a fancy unique kernel I worked on that is cleanly based off of the latest CAF sources.

Custom kernels are not compatible with this ROM unless otherwise noted.

ROM features:

  • Based off latest generic CyanogenMod 12.1 stable sources (root access is not included)
  • OTA updates via built-in CMUpdater
  • Vanilla CAF LA.BF.1.1.1_rb1.26 display HAL (improved display performance)
  • Vanilla CAF LA.BF.1.1.1_rb1.26 media HAL (improved video performance)
  • Vanilla CAF LA.BF.1.1.1_rb1.26 audio HAL (improved audio performance)
  • OxygenOS camera libraries (no camera bugs and improved camera performance)
  • Snapdragon Camera app by Qualcomm (comes with many unique features, such as HSR)
  • Custom camera HAL I modified myself from CAF featuring:
    -HFR (high-framerate; a.k.a. slow-motion video) recording at 60 FPS, 90 FPS, and 120 FPS for 720p, and 60 FPS for 1080p
    -HSR (high-speed video with audio) recording at 60 FPS, 90 FPS, and 120 FPS for 720p, and 60 FPS for 1080p (you need to use the Snapdragon Camera app in order to use HSR)
    -1080p video recording with the front-facing camera
    -2.5k 1440p video recording with the front-facing camera and back camera (only with the Snapdragon Camera app that comes with the ROM)
    -4k video recording at UHD and DCI resolutions
    -Manual focus
    -Slow shutter (ranging from 1/5000th of a second to 2 seconds)
    -More picture sizes than plain OxygenOS, such as 9.7MP 16:9
    -JPEG quality is always set to 100% (pictures are very high quality)
  • Disabled Qualcomm performance daemon (CPU boosting is now handled completely by the driver I wrote)
  • 2 CPU cores are not forced online all the time (saves power this way)
  • WiFi configuration from LG G3 (better WiFi performance and stability)
  • Many other misc. optimizations


Kernel features:

  • Based off latest CAF LA.BF.1.1.1_rb1.26 kernel source from Qualcomm
  • Almost 100% pure CAF (very clean, there shouldn't be any crazy stability or performance issues)
  • Removed lots of excessive debugging
  • Latest CAF LA.BF.1.1.1_rb1.26 prima (WiFi) drivers
  • Rewrote half of the Synaptics touchscreen driver (over 2500 lines of code modified; your touchscreen might work better)
  • Newest available Synaptics touchscreen firmware (no battery drain)
  • Dynamic CPU input boost driver I wrote myself (makes the phone feel smooooth)
  • CPU underclocked to 1958MHz by default (you can disable this; see why I did this in the FAQ in the 3rd post)
  • Improved notification LED color (white doesn't have a blue tint)
  • Vibrator is automatically disabled when recording videos (so the buzzing noise doesn't get in the videos)
  • Custom thermal driver I wrote myself (keeps the phone cool)
  • LCD KCAL by Savoca
  • Westwood TCP congestion algorithm (enabled by default)
  • NTFS support
  • No BS patches, features, or compiler "optimizations"
  • Many other misc. optimizations


Source code:
Kernel (cm-12.1-caf branch): https://github.com/sultanxda/android...neplus_msm8974
Local manifest (contains the rest of the sources): https://github.com/sultanxda/android...l_manifest.xml

Credits:

  • CyanogenMod and its contributors
  • CAF (aka Qualcomm)
  • OnePlus and Oppo for their clean kernel base
  • myfluxi (awesome friend with lots of amazing contributions)
  • 69gm (loyal guinea pig)
  • If your name should be here and it isn't, then make me use an iPhone 4 running iOS 8


Installation instructions (for first-time installation):
First, you must install/use TWRP recovery v2.8.6.0 (TWRP v2.8.7.0 cannot properly update the modem). After installing TWRP v2.8.6.0, perform a clean install (wipe /data and /system). Next, try flashing the ROM and see if it installs; if it installs without any issues then congratulations! Now just flash a Google apps package, and then reboot.

If you get an error when trying to install (TZ version error), then download and flash the latest official CM12.1 nightly. Then, without rebooting from recovery, flash my ROM. This process is necessary to update various firmwares (including TrustZone), as the updated firmware is needed by my ROM. After flashing my ROM, flash a Google apps package, and then reboot.

Installation instructions (for updating to a newer release):
If you are already running my ROM, then you can update to a newer version of the ROM via the built-in OTA updater or by simply dirty-flashing the new ROM build without wiping anything.

Downloads:


Mirror 1: https://www.androidfilehost.com/?w=f...&sort_dir=DESC

Mirror 2: http://forum.xda-developers.com/devdb/project/?id=10021#downloads



Google apps: http://forum.xda-developers.com/andr...gapps-t3116347
SuperSU (if you want root access): http://forum.xda-developers.com/show....php?t=1538053
Disable CPU underclock: http://forum.xda-developers.com/devd...t/dl/?id=12808

Tags für diesen Artikel:
Zuletzt bearbeitet am 04.10.2015 11:07

Neuer GnuPG / PGP Schlüssel

Ich habe meinen PGP Schlüssel aktualisiert. Bitte zukünftig nur noch diesen verwenden. Siehe auch: Verschlüsselung. Was noch sicher ist. Beitrag von Hanno Böck bei golem.

Fingerprint: 6BF5 2B63 87A2 E6BA C3F3 6AF5 CC75 00D7 D96D 6E68

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.21 (MingW32)

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
CUq3OQq+6+eefG4d03wVQ0kb
=dAUz
-----END PGP PUBLIC KEY BLOCK-----

Tool des Tages: Ubuntu tweak

Mit Ubuntu tweak lassen sich neben zahlreichen Pimp up My System auch Repositories (neudeutsh für Weichwarequellen) für (k)ubuntu komfortabel einbauen. Wer mal eben schnell sein System frisieren will (oder dieses - bei Fehlbedienung - ebenso schnell zerstören will) baut die Quelle für Ubuntu tweak in seine sources.list ein.

Dazu mittels "sudo [editorderwahl] /etc/apt/sources.list um folgenden Eintrag erweitern:

deb http://ppa.launchpad.net/tualatrix/ppa/ubuntu jaunty main #Ubuntu
Tweak: http://ppa.launchpad.net/tualatrix/ppa/ubuntu jaunty main

Anschließend den PGP Schlüssel importieren, damit #Zensursula & Co keine bösartige Software unterjubeln kann:

sudo gpg --recv-keys 6AF0E1940624A220|gpg --export 6AF0E1940624A220 |apt-key add -

Das eigentliche Paket installieren mit:

sudo apt-get install ubuntu-tweak


Das Tool steht dann unter "Anwendungen/Systemwerkzeuge" zur Verfügung.

Das Ende ist nah: Morgen erscheint Firefox 3.5

Seit einiger Zeit gibt es ja zum Beispiel bei Ubuntu Jaunty die kommende Version des Firefox-Browsers, nämlich die Version 3.5. unter dem Codenamen Shiretoko. Das Warten auf die neue Version hat jedoch ab morgen ein Ende, denn dann wird die neuste Ausgabe des Firefox Browsers zum Download bereitstehen.

Dies kündigte Mozilla nun offiziell an. Mike Beltzner, Mozilla's Direktor für Firefox erwartet über eine Milliarde Downloads für die neue Version.

Das lange Warten auf die stabile Version und das Suchen nach möglichen Fehlern und Bugs ist zu einem Ende gekommen. Ab morgen wird der freie und quelloffene Mozilla Firefox in der Version 3.5 für die Öffentlichkeit freigegeben. Die Entwickler versprechen unter anderem mehr Sicherheit und deutlich mehr Performance. Im Vergleich zur Vorgängerversion soll die Version 3.5 doppelt so schnell sein. Maßgeblich ist dafür die neue JavaScript-Engine "TraceMonkey" verantwortlich. Einen beträchtlichen Teil trage auch die "Gecko" Rendering-Engine bei, hieß es. Alles in allem wurden so viele Änderungen vorgenommen, dass man von Version 3.1 den direkten Sprung zu 3.5 machte.

Als durchaus nützlich dürfte sich auch der "Private Browsing"-Modus erweisen, bei dem Cookies bei Schließen der Browsers gelöscht und besuchte Websites nicht in der History gespeichert werden und somit so wenig Spuren wie möglich auf dem Rechner zurückbleiben sollen.

Zusammengeklaut bei: gulli via PCMag

(Tnx@63mg)
Zuletzt bearbeitet am 30.06.2009 00:42