Diesen Artikel habe ich schon vor ziemlich genau zwei Jahren geschrieben, also Anfang März 2023. Ich wollte daraus heute zitieren, da ist mir aufgefallen dass ich den nie veröffentlicht habe. Warum weiß ich ehrlich gesagt nicht, eigentlich fehlten da nur noch die Bilder vom Gerät.

Die Verpeilung hat aber den netten Nebeneffekt dass ich direkt auch meine Langzeit-Erfahrung schildern kann. Ist ja vielleicht auch nicht uninteressant. Die habe ich unten nachgereicht.


Vor Ewigkeiten — das muss bald zwei Jahrzehnte her sein — hat die c’t mal einen Heimserver-Bauvorschlag gemacht den ich teilweise umgesetzt hatte. Auf Basis von Debian und User Mode Linux haben die eine Firewall virtualisiert. So lief dann bei mir ein Endian auf dem Server mit. UML wurde irgendwann durch Xen ersetzt, Endian durch pfSense, Xen durch Proxmox, und schließlich pfSense durch OPNsense. Durchgehend hatte ich also meine Netzwerk-Organisation als virtuelle Maschine auf dem Server mitlaufen.

Das spart Strom, ist aber leider unhandlich wenn man mal am Server arbeiten möchte. Fährt man den Server herunter ist auch das Internet weg. Perspektivisch möchte ich mich vom Server trennen, also musste ein Ersatz her.

Sophos SG105 Rev. 2 mit 19"-Kit
Sophos SG105 Rev. 2 mit 19″-Kit

Standard sind für zu Hause wohl Fritz!Boxen. Darüber habe ich schon viel gutes gehört, aber damit habe ich keine Erfahrung. Mit OPNsense bin ich sehr zufrieden, und für mein WLAN habe ich eine andere Lösung. Ich habe mich etwas umgesehen und mir dann eine Sophos SG105 Rev. 2 zugelegt. Nicht weil das die ultimative Hardware für mich ist, sondern einfach weil ich das Ding günstig bekommen habe. Mit 19″-Zubehör habe ich etwas über 100 Euro bezahlt.

Auf Dauer wird der Stromverbrauch die Anschaffungskosten zweitrangig erscheinen lassen, deshalb habe ich das Ding direkt nach meiner Installation mal an mein Verbrauchsmessgerät gehängt. Während des Bootens wurden bis zu 7,3W angezeigt, später ohne Last Werte um 5,8W. Das ist natürlich deutlich über einem Raspberry. Mein Provider hat seinerzeit die FritzBox 7390 angeboten, für den Nachfolger 7590 setzt AVM 9-10W idle und 30W peak an — erstaunlich, ich wäre davon ausgegangen dass die auch sparsamer sind. Bei Gelegenheit muss ich mit meinem Messgerät vielleicht nochmal einen Nachbarn besuchen…

Im Inneren meiner Sophos-Box steckt im Prinzip ein vollständiger PC. Die CPU wird als „Intel(R) Atom(TM) CPU E3826 @ 1.46GHz (2 cores, 2 threads)“ identifiziert, ich habe 4GB RAM und eine SSD mit 64GB (Transcend SSD370). Neben vier LAN- habe ich zwei USB-Schnittstellen und einen VGA-Port, mehr braucht es nicht.

Auf der Download-Seite habe ich das VGA-Image für amd64-Architektur runtergeladen, entpackt und auf einen Stick geschrieben:

Mit angeschlossenem Stick, Tastatur und VGA-Bildschirm hat die Box das dann auch direkt gestartet — und ist nach ein paar Sekunden in einen nichtssagenden Fehler gelaufen:

Das Internet sagt, man müsste in dem Fall im BIOS eine Anpassung machen: unter Advanced/USB Configuration gibt es einen Punkt „Port 60/64 Emulation“. Der muss disabled werden, dann geht es. Also wie früher beim Booten auf [DEL] hämmern, einstellen, fertig. :-)

Sophos SG105 Rev. 2 von hinten
Sophos SG105 Rev. 2 von hinten

Die restliche Installation verläuft dann wie immer. Ich habe dem LAN-Interface noch eine freie IP-Adresse aus meinem Netz gegeben, die restliche Konfiguration kann ich dann per Webinterface machen. Oder besser: von der alten VM übernehmen. Das werde ich hier nicht beschreiben, dazu gibt es reichlich Informationen online.

Alles in allem kann man sich das Gerät so sehr einfach „zu eigen machen“ und hat eine nette Hardware für den kleinen Geldbeutel. Was da vorher drauf lief weiß ich nicht, das habe ich mir nicht genauer angesehen. Es wird das Sophos Firewall OS gewesen sein. Aber die Installation von OPNsense war geradezu erfreulich langweilig. Intuitiv und aus der Erfahrung mit diversen anderen Geräten hätte ich gedacht dass da wenigstens ein BIOS-Passwort hinterlegt wäre oder sowas. Glücklicherweise nicht, denn so kann man das Ding ohne Probleme noch für Heimzwecke weiternutzen. Anders wäre es unter Umständen ein Fall für den Elektroschrott gewesen…


Langzeit-Erfahrung

Das Ding läuft seit mittlerweile zwei Jahren absolut stabil. Ich habe ein gutes Gefühl bei der Software, und alle Upgrades lassen sich bequem über die Weboberfläche machen. Ich kann ehrlich sagen dass ich das Gerät in der Laufzeit nicht einmal berührt habe, Power-Cycle gab es nur bei dem einen oder anderen Gewitter, wenn auch meinem Server der Saft weggeblieben ist.

Genau so wollte ich das haben. Meine Empfehlung. :-)

Wer öfter mal was in der Shell macht kennt vermutlich das Kommando find. Damit kann man sehr flexibel Dateien oder Verzeichnisse auf der Festplatte suchen. So findet man zum Beispiel alle Dateien die älter sind als 100 Tage:

Um die Größen aller Dateien zu bekommen kann man find bitten für jede Datei ein du (Disk Usage) auszuführen:

Kann man machen, aber das bedeutet dass find für jede einzelne Datei ein Kommando startet. Jetzt braucht du nicht sehr lange für die Ausführung, aber wenn man stattdessen beispielsweise jeweils ein Perl-Skript starten muss wirkt sich das sehr negativ aus.

Wenn man nur wenige Fundstellen erwartet kann man folgendes machen:

So wird vor der Ausführung von du die Klammer expandiert und durch die Ausgabe von find ersetzt. Das hat aber einen bedeutenden Haken: wenn sehr viele Dateien gefunden werden wird die Kommandozeile zu lang die man durch die Expansion erhält („-bash: /usr/bin/du: Argument list too long“) — Zeilen dürfen nicht beliebig lang werden (man findet die zulässige Länge mit getconf ARG_MAX, muss von der Zahl aber noch die Größe der Umgebungsvariablen abziehen).

Um das zu umgehen ruft man klassisch xargs zur Hilfe. Das sieht dann so aus:

Jetzt findet find alle gesuchten Dateien und gibt deren Namen nullterminiert nach STDOUT. Von da liest xargs ein und baut eine Kommandozeile mit du -b. In diese Zeile werden so viele der eingegebenen Strings reingepackt wie möglich bevor du ausgeführt wird.

Aber find braucht offenbar kein xargs

Man kommt — und das weiss ich erst neuerdings — auf das gleiche Ergebnis wenn man in find statt des Semikolons ein Pluszeichen benutzt:

Keine Ahnung wie das bislang an mir vorübergehen konnte, das macht einiges eleganter.

Wie komme ich jetzt an die Summe der Fundstellen?

Wenn man folgendes schreibt berechnet du für jeden Aufruf eine Summe, mit dem grep kann man sich die ansehen:

Bei vielen Dateien wird du mehrfach aufgerufen, man bekommt also mehrere Summen. In meinem Beispiel finde ich gut 45000 Dateien, find ruft dafür 19 Mal du auf, grep gibt mir also 19 Zeilen mit jeweils einer ziemlich großen Zahl. Die gilt es aufzusummieren, das geht am einfachsten mit awk:

Jetzt bekomme ich nur noch eine sehr große und sehr unleserliche Summe, die gibt mir die Summe der Größe aller gefundenen Dateien. Die kann awk mir in GB umrechnen:

Somit habe ich einen leserlichen Wert, damit kann ich arbeiten.

Wenn es einen einfacheren Weg zum Ziel gibt: ich bin immer für Vorschläge offen! :-)

Es sei nur kurz darauf hingewiesen: in der aktuellen c’t („Retro-Ausgabe 2018“, 27/2018 vom 23.10.) wird ein Umbausatz beschrieben mit dem man einer alten IBM Model M Tastatur Bluetooth beibringen kann. Das hatte ich auch immer mal vor, aber ich glaube das kann ich damit zu den Akten legen.

Links zum Thema findet man bei der Zeitung, der Umbau kostet am Ende rund 120 Euro. Soviel kann man für eine anständige Tastataur ausgeben, finde ich. Ich habe noch ein paar Model M auf Lager die nicht meine Dulcimer-Behandlung erfahren haben, unter anderem eine mit 122 Tasten… mal sehen wie lange die original bleibt… :-D

English English preferred? This way, please.

Heute habe ich einen coolen neuen Trick gelernt, in dem ich das Item Preprocessing benutzen kann das Zabbix seit der Version 3.4 anbietet. Dies ist kein Zabbix-Blog, aber ich betrachte das als so nützlich — und nicht gerade intuitiv — dass ich das mal eben aufschreiben möchte.

Für alle die es nicht kennen: Zabbix ist ein quelloffenes Monitoring System, der Hersteller nennt es nicht ganz zu unrecht „Enterprise Class“. Ich nutze das nicht nur bei der Arbeit sondern auch zu Hause — nicht nur um das Fleisch in meinem Smoker zu monitoren. :-)

Meiner Meinung nach ist Zabbix wirklich stark bei allem was in Zahlen ausgedrückt werden kann. Es kann auch mit textuellen Informationen umgehen, aber nachdem ich damit ein paar kleinere Schwierigkeiten hatte versuche ich das nach Möglichkeit zu vermeiden. Zustände können in Zabbix auch numerisch dargestellt und als Ganzzahl gespeichert werden, mit dem Value Mapping kann man trotzdem gut lesbare Ausgaben erzeugen.

Heute bin ich an ein Problem gekommen das ich mit meinen üblichen Methoden erst nicht umsetzen konnte. Ein Webservice gibt mir den Status einer Applikation, die ist entweder RUNNING, STOPPING oder STOPPED. Es ist nicht schwer das in einem String-Item zu speichern, und einen Trigger anzulegen der reagiert wenn die Applikation STOPPED ist. In diesem speziellen Fall sollte ich aber einen Trigger bauen der meldet wenn der Dienst länger als eine gewisse Zeit im Status STOPPING ist, daran ist zu erkennen dass es ein Problem beim regulären Anhalten der Applikation gibt. Das war nicht trivial, da die Triggerfunktion str("STOPPING",15m) auch schon zuschlägt wenn mindestens einer der Werte in den letzten 15 Minuten „STOPPING“ war.

Item Preprocessing to the rescue!

Drei Schritte

Drei Schritte

Mit Version 3.4 hat ein Feature namens Item Preprocessing in Zabbix Einzug gehalten. Damit kann ein gemessener Wert auf verschiedene Arten weiterbehandelt werden bevor er gesichert wird. Eine der Methoden ist, durch reguläre Ausdrücke eine Art „Suchen und Ersetzen“ vorzunehmen.

Wie sich rausstellt brauchte ich dazu einen halbwegs komplexen regulären Ausdruck, aber am Ende konnte ich die Zustände des Webservices in einfache Ganzzahlen umwandeln. Bei einer Websuche habe ich etwas über „conditional replacement“ gefunden, und mit diesem großartigen Tester für reguläre Ausdrücke konnte ich diese Schönheit bauen:

Damit kann ich den String den ich mittels JSON Path aus der Ausgabe des Webservices ziehe in zwei weiteren Schritten umwandeln:

  • Erst hänge ich eine Art „Wörterbuch“ an meinen Wert: ich ersetze den kompletten Wert (.*) durch sich selbst, gefolgt von den Ersetzungswerten: \1:STOPPED=0:STOPPING=1:RUNNING=2.
  • Dann ersetze ich den regulären Ausdruck (STOPPED|STOPPING|RUNNING)(?=.*:\1=(\d)) durch den Wert der zweiten Capturing Group \2.

Auf die Weise kann ich mein Item als vorzeichenlose Ganzzahl konfigurieren, da hier nur noch die Zahlen 0, 1 oder 2 abgelegt werden müssen. Und ich kann die übliche Trigger-Funktions-Magie anwenden um zu melden wenn der Wert länger als eine gewisse Zeit bei 1 verbleibt. Ein weiterer Bonus: ich kann im Graphen des Items sehen wann der Webservice nicht im Zustand RUNNING gewesen ist, und wie lange das angehalten hat.

Vorschläge?

Ich bin ziemlich angetan davon, Werte auf diese Weise für die Weiterverarbeitung vorzubereiten. Aber ich bin auch an Meinungen interessiert: gibt es bessere Wege mit diesem Problem umzugehen? Irgendwas offensichtliches das ich übersehen habe?

Das war jetzt der fünfte Anruf den ich innerhalb von zwei Wochen vom „Microsoft Technical Support“ bekommen habe. Also: nicht wirklich von Microsoft, das ist mir klar. Ich weiß dass Microsoft sowas nicht tun würde. Sie haben sich so vorgestellt. Auf gebrochenem Englisch.

Beim ersten mal war ich perplex. „We don’t use any Microsoft software in this house, bye.“

Zwei Mal war meine Frau dran, die hat auch direkt aufgelegt. Beim letzten Mal war die Verbindung so schlecht dass ich keine Lust hatte mich darauf zu konzentrieren.

Jetzt gerade hatte ich Zeit, genug schlechte Laune und eine brauchbare Verbindung. Also habe ich mich mit dem Typen unterhalten. Hier mal ein Gedächtnisprotokoll, der Einfachheit halber direkt übersetzt:

„Hier ist der Microsoft Technical Support. Ich rufe an weil wir sehen dass Ihr Computer von Hackern angegriffen wurde. Sitzen Sie an ihrem Computer?“

„Ja.“

„Ich möchte dass Sie alle Fenster verkleinern, so dass Sie den Desktop sehen. Koennen Sie das machen?“

„Ja.“

„Jetzt möchte ich dass Sie sich auf die Tastatur konzentrieren. Unten links sehen Sie eine Taste, beschriftet mit S-T-R-G. Sehen Sie die?“

„Ja.“ (Gelogen — auf meiner US-Tastatur Steht da Ctrl. :-) )

„Daneben sehen Sie eine Taste mit vier Flecken, die stellen ein Windows-Logo dar. Sehen Sie die?“

„Ja.“

„Ich möchte dass Sie die Taste gedrückt halten und mit der anderen Hand auf R drücken.“

„OK.“

„Was ist passiert?“

„Nichts.“ (Auch gelogen, aber es ist sicher nicht das passiert was er erwartet hat.)

„Welche Tasten haben Sie gedrückt?“

„Windows und R, aber bei mir wird da nichts passieren.“ (Naja, ich benutze den Awesome Window Manager, da kann ich auf die Weise tatsächlich Kommandos starten — mache ich aber nicht für jeden. :-P )

„Bitte?“

„Ich benutze kein Windows, ich benutze gar keine Microsoft Software. Ich bin IT Professional, und ich werde mich von Leuten wie Ihnen nicht verarschen lassen. Bitte nehmen Sie meine Telefonnummer aus der Datenbank, ich will nie wieder von Ihnen angerufen werden.“ (Ich hätte fest damit gerechnet dass er auflegen würde. Stattdessen…)

„Sie wollen dass ich Sie aus der Datenbank nehme? Das kann ich machen. Dafür müssen Sie mir 200 Euro überweisen, dann werde ich nie wieder anrufen.“

„…“ (Ich war wirklich perplex ob dieser Dreistigkeit.)

„Sie bezahlen 200 Euro, ansonsten werden wir wieder anrufen.“

„Hören Sie, Sie verschwenden nicht nur meine Zeit sondern auch Ihre eigene. Ich werde nichts bezahlen.“

„Ich habe jede Menge Zeit zu verschwenden, und ich werde Sie wieder anrufen wenn Sie nicht bezahlen.“

„Ich werde nichts bezahlen. Das führt zu nichts.“

„Wir werden weiter anrufen bis Sie bezahlt haben. Und Sie werden darunter leiden.“ (Der genaue Wortlaut war „and you will suffer“ — ich bin noch nie so offen bedroht worden.)

„Lassen Sie mich überlegen was meine Optionen sind. Die Telefonnummer die ich hier sehe zu melden macht keinen Sinn, die wird gefälscht sein (fing mit 0146474 an, letzte Woche hatte ich aber auch schon so einen Anruf mit einer Vorwahl die in NRW sein dürfte). Vielleicht kann ich meinen Telefonprovider anrufen, eventuell können die das tracken.“ (Können sie nicht, fürchte ich. :-( )

„Hören Sie, Sie können sich beschweren bei wem Sie wollen. Telefonprovider, Polizei, Militär. Ist mir egal. Die werden uns nicht kriegen. Wenn Sie nicht bezahlen werden wir weiter anrufen, und Sie werden darunter leiden.“

An der Stelle ging es noch ein bisschen hin und her. Ich habe das Telefon irgendwann laut gestellt und ihn gebeten seine Drohungen für meine Familie zu wiederholen. Hat er auch gemacht. Dann habe ich mich daran erinnert dass er jede Menge Zeit zu verschwenden hat. Bitte, kann er haben. Also habe ich das Telefon zur Seite gelegt und mich mit erfreulicheren Dingen beschäftigt. Nach einer halben Minute hat er aufgelegt.

Angst habe ich nicht vor ihm, aber sowas nervt! Wenngleich ich die Dreistigkeit schon fast ein Bisschen beeindruckend finde. Ich hätte fest damit gerechnet dass er auflegt nachdem ich ihm sagte dass wir kein Windows benutzen.

Mir fällt nicht ein was man dagegen tun kann. Vorschläge?

Achtung, sicher!

Achtung, sicher!

Es ist wirklich kein schöner Anblick, und ich fühle mich jetzt auch etwas schmutzig. Fragt bitte nicht wo ich mich mit einem Windows 2003 Server in Verbindung gesetzt habe.

Fakt ist: ich habe versucht den Server mit Google in Verbindung zu bringen. Und der verwendete Internet Explorer hat mich gewarnt (!) daß ich auf einer sicheren Verbindung unterwegs bin.

Früher war nicht alles besser. Echt nicht. Das gilt für Windows doppelt…

Vorweg: Ich habe das noch nicht selbst ausprobiert, aber ich weiss dass ich mal nach sowas gesucht habe.

Viele Gruppen nutzen zur Findung von Terminen die Webseite doodle.com. Der Dienst funktioniert prima, für einige Anwendungen fände ich es aber wesentlich angebrachter einen solchen Dienst selbst zu hosten. Wenn ich mal wieder Bedarf habe werde ich auf jeden Fall einen Blick auf Dudle werfen. Die Funktionalität scheint in etwa die gleiche zu sein, und man kann es „zu Hause“ installieren. Wer das nicht mag findet bei der TU Dresden eine gehostete Version.

Ich hatte schon öfter was über ungewöhnliche Programmiersprachen geschrieben. Zuletzt über Folders, eine Sprache die ganz ohne Dateien auskommt.

Heute habe ich zwei neue Sprachen kennengelernt. Nein, nicht gelernt. Nur erfahren dass es das gibt. Da wäre zum einen Qalb, eine Sprache in der die Quelltexte (eigentlich auch der Name, aber bei قلب hätte ich noch weniger Ideen zur Aussprache als bei der lateinischen Umschreibung) in arabischer Schrift verfasst werden. Hier gibt es alles was man braucht bei Github. :-D

Die Sprache ist aber schon älter, neuerdings gibt es — ebenfalls bei Github — eine Sprache namens Potaka (wieder eine lateinische Umschreibung, für পতাকা fehlt mir nicht nur eine Idee zur Aussprache sondern sogar die Zeichen im Font). Um die zu beherrschen sollte man bengalische Schrift entziffern können. Wer es versuchen mag: das hier sieht nach einem Spielfeld aus — genau sagen kann ich das aber nicht… ;-)

Sommerlich warm

Sommerlich warm

Der Lüfter an meinem Taschenrechner (Lenovo Thinkpad X201, Baujahr dürfte 2010 sein) hat mich schon länger genervt. Der ist nicht sonderlich laut, lief aber praktisch durchgehend. Gestern habe ich das Ding unbeaufsichtigt liegen lassen weil es Messwerte erfassen sollte. Als ich wiederkam war es aus, nach dem Neustart stand in den Logs… naja, siehe Bild. :-(

Ich bin froh dass die Kernschmelze verhindert wurde.

Mit einer Hand habe ich nachgesehen was ein Ersatz kosten würde, mit der anderen habe ich die Tastatur abgeschraubt. Da findet man den Lüfter direkt vor sich. Auf den ersten Blick sah der ganz OK aus, ich habe ihn trotzdem mit einem Zahnstocher stillgelegt (wichtig, der wirkt sonst wie ein Dynamo und frittiert unter Umständen den Rechner) und dann großzügig Druckluft aus der Dose angewendet.

Unglaublich, wie gut das wirkt, das sollte man vielleicht regelmäßig machen. Beim nächsten Mal traue ich mich vielleicht auch die Wärmeleitpaste auszutauschen. Die Bildschirmauflösung ist nicht ganz zeitgemäß, ansonsten bin ich immer noch rundum zufrieden mit dem Notebook.