MySQL >= 8.x oder MariaDB – RegularExpression Word-Bounderies – Workaround

Ich hatte gerade ein echtes Aha-Erlebnis in Sachen Regular-Expressions. In denen bin ich sonst eigentlich recht fit, aber man lernt ja bekanntlich nie aus.

Folgende Konstrukte sind in einem SQL-Statement fehlgeschlagen, nachdem ich eine aktuelle MariaDB bzw. eine MySQL 8 Datenbank im Einsatz hatte.


[[:<:]]4711[[:>:]]

Selbst mir war diese Syntax in der Form nicht bekannt. Die beiden Pattern beziehen sich auf Word-Bounderies. Mit anderen Worten wir suchen ob in einem String die Folge 4711 enthalten ist, aber nur exakt diese, Folgen wie 47112 sollen nicht gefunden werden. Im konkreten Beispiel ging es um eine kommagetrennte Liste von Zahlen die zu durchsuchen ist. Dabei kann die 4711 aber auch am Anfang oder am Ende stehen. In MySQL 8 und höher ist der Unterstützung für diese Syntax weggefallen, aus welchem Grunde auch immer. Aber es gibt Ersatz:


[^[:word:]]4711[^[:word:]]

Auch hier suchen wir die Ziffernfolge umrandet von etwas was kein Wort ist – das kann ein Zeilenende, Zeilenanfang, oder etwas anderes als alphanumerisch + “_” sein [:word:] == [:alphanum:_].

 

Vorinitialisierter FTP-Server in Docker

Bevor hier jetzt einige gleich aufschreien für was man eine derartig krude Sache überhaupt brauchen kann, es gibt durchaus Fälle in denen etwas derartiges nützlich ist. Mir ist durchaus bewusst, dass FTP (ohne TLS) kein wirklich aktueller Standard mehr ist und auch das Protokoll mit der “out-of-band”-Regelung mit getrennten Ports etwas altbacken wirkt. Besser wäre es natürlich hier auf SFTP (welches als Basis SSH nutzt und somit direkt Verschlüsselung anbietet) zu nutzen. Zudem wurde ja auch schon mehrfach angekündigt, dass immer weniger Browser FTP nativ unterstützen wollen. Das Protokoll hat sich schlichtweg etwas überlebt, aber es ist leider in ganz vielen Bereichen immer noch im Einsatz – und genau dafür benötigte ich diese Konstellation: Für ein Projekt bei dem ich im Rahmen der Tests sicherstellen muss, dass FTP-Verbindungen bzw. die Verarbeitung von per FTP bereit gestellten Dateien wie erwartet funktionieren. Bisher habe ich mir dafür immer eine virtuelle Maschine in der Hinterhand gehalten und diese dann entsprechend hochgefahren bzw. konfiguriert. Das geht auch auf einem CI/CD-System wie Jenkins, aber schicker wäre es doch wenn man einfach ein Image starten kann (vorzugsweise in einem gekappselten  Netzwerk) und die Konfiguration und ggf. sogar schon die notwendigen Testdaten liegen fix und fertig bereit.

Insgesamt muss ich leider sagen: Diese Nuss hat mich mehr Nerven gekostet als gedacht.

<pre>FROM fauria/vsftpd

COPY ftp-custom-dir-list /tmp/
COPY ftp-user-list /etc/vsftpd/user-list
COPY init_users_and_directories.sh /tmp/
COPY vsftpd.conf /etc/vsftpd/vsftpd.conf

RUN chmod +x /tmp/init_users_and_directories.sh && mkdir -p /var/log/vsftpd/
RUN /tmp/init_users_and_directories.sh

ENTRYPOINT ["/usr/sbin/vsftpd"]
CMD ["/etc/vsftpd/vsftpd.conf"]

Hier sind einige Kleinigkeiten versteckt die man beachten muss: Das aufgerufene Skript kümmert sich letztlich während des Bauens des Images darum, dass die notwendigen Verzeichnisse angelegt werden und die Benutzerliste in eine Berkeley-DB überführt wird, damit sie später zur Authentifizierung genutzt werden kann. Das Format gilt es hierbei zu beachten: Immer abwechselnd Benutzername und Passwort in einer Zeile.

<pre>db_load -T -t hash -f /etc/vsftpd/userlist /etc/vsftpd/virtual_users.db</pre>

Es gibt noch einige Kleinigkeiten, die einem ggf. das Leben schwer machen. Zum einen ist VSFTP nicht wirklich ein gesprächiges Programm, ich habe auch mit sehr viel Suchen keine Möglichkeit gefunden in irgendeinem Log mehr als die FTP-Verbindungen zu finden, geschweige denn irgendwelche Aussagen warum es initial mit der Authentifizierung nicht so ganz klappen wollte.

Authentifizierung ist ein gutes Stichwort: Wie man hier sieht habe ich auf die Verschlüsselung der Passwörter verzichtet. Für das angestrebte Ziel einen Testserver zu haben auf dem man Dateien ablegen zum Testen ablegen kann und den man hinterher wieder wegwirft ist das gerade noch zu verschmerzen, für die Produktion ist ein deratiges Vorgehen definitiv nicht geeignet! Hier darf man sich dann aber mit den Wirren von PAM (plugable authentification module) herum schlagen, auch dieses Tool ist zumindest im Docker-Umfeld eher schweigsam und verrät sicherheitsgerichtet nicht wirklich was gerade schiefläuft.

Wer sich das von mir verwendete Basis-Image anschaut wird feststellen, dass es eigentlich auch noch diverse Parameter gibt, die man dem Container mitgeben könnte. Das habe ich allerdings lahmgelegt, denn für meinen Anwendungsfall benötige ich ja stets ein einheitliches Set an Benutzern und Verzeichnissen. Selbst wenn ich den Container beim Testen mit docker-compose hochfahren würde, bekäme ich so nicht die Kohäsion die ich mir speziell für diesen Fall wünschen würde: Einmal bauen und alles ist für den spezifischen Anwendungsfall schon vorbereitet.

Damit es mit verschlüsselten Passwörtern klappt, muss man folgende Punkte beachten:

Passwörter kann man sich mittels folgendem Befehl in Hashes umwandeln lassen:


openssl passwd -1 meintollesPasswort

Wenn man es stärker automatisieren möchte kann man sich das natürlich auch in ein Skript packen welches die Datei der User durchackert und das automatisch macht. Ganz wichtig ist aber dann auch die Anpassung der PAM-Konfiguration

<pre>#%PAM-1.0
auth   required   pam_userdb.so  db=/etc/vsftpd/virtual_users crypt=crypt
account    required   pam_userdb.so  db=/etc/vsftpd/virtual_users crypt=crypt
session    required   pam_loginuid.so

Man muss PAM hier mitteilen, dass die Passwörter in verschlüsselter Form vorliegen. Nicht wundern, dass ich oben nicht mit crypt als Methode im Zusammenhang mit openssl gearbeitet habe: Crypt ist dort die Urform des Hash-Algorithmus für Passwörter. Aus historischen Gründen dürfen Passwörter dort nur 8 Zeichen lang werden. Hier sei nochmals darauf hingewiesen, dies betrifft nur die Art und Weise wie die Passwörter auf dem Server gespeichert werden, die Übertragung bei FTP erfolgt weiterhin ohne Veschlüsselung – hier muss man ggf. mit VPN oder anderen Mechanismen nachhelfen (oder eben gleich SFTP einsetzen).

Wer genau aufgepasst hat, wird feststellen, dass in der PAM-Konfiguration scheinbar ein Fehler ist (und dieser hat mich lange beschäftigt). Es ist aber richtig: die Datei muss auf .db enden, die Referenz für pam_userdb.so muss aber ohne dieses Suffix erfolgen. Wer auch immer sich das ausgedacht hat – wirklich gut dokumentiert ist es auf keinen Fall.

 

IPv6 – Wer hat Angst vor langen IP-Adressen?

Nachdem ich ja in einigen Posts nunmehr beschrieben habe wie man sich einen eigenen DNS-Server unter Docker mit samt IPv6 hinstellen kann (inkl. einer Rückwärtskompatibilität für IPv4) habe ich mich gefragt was denn noch so problematisch ist am Umstieg auf IPv6. Mein derzeitigen, subjektiven Ergebnisse fasse ich hier einmal zusammen. Vorsicht dieser Post kann ggf. Spuren von Zynismus, Sarkasmus und auch einen Schuß Frustration meinerseits enthalten.

Natürlich ist derartige Kritik leicht daher geredet, daher werde ich auch einige Lösungen bzw. Lösungsansätze vorstellen.

Continue reading

DNS mit Docker Teil III – dnsdist als Router / Loadbalancer

Wer meine bisherigen Posts zu Docker und DNS verfolgt hat, weiß: Da steht noch was aus (ich komme nur momentan nicht immer ganz zeitnah dazu meine Erfahrungen zusammen zu schreiben.

Was bisher geschah:

Was jetzt noch aussteht ist eine Sache die mit der Microservice-Architektur von PowerDNS im Vergleich zu “klassischen” Nameservern wie BIND zusammen hängt: BIND ist monolitisch und kümmert sich um jegliche Anfrage die gestellt wird. In PowerDNS hat man diese Dinge wie oben bereits angedeutet aufgetrennt: Einen Spezialisten zum Auflösen von externen Einträgen (Recursor) und einen weiteren Prozess der sich um die Sachen kümmert für die man selbst verantwortlich ist (authorative). Continue reading

Jahresrückblick 2020

Weihnachten ist vorbei, Corona ist immer noch da – dennoch aller höchste Zeit das Jahr einmal kurz durch den Filter laufen zu lassen. Das wird dieses Jahr etwas schwieriger – im Gegensatz zu sonst kann ich mich nicht so gut wie sonst an den Blog-Einträgen zu den verschiedenen Laufveranstaltungen entlang hangeln.

Januar

Das neue Jahr begann wie üblich mit einigen fast schon festen Terminen – unter anderem wieder einmal der Neujahrsempfang der Stadt Mannheim, zu dem ich natürlich als DJK Vorstandsmitglied auch wieder beitragen durfte/musste. Da war das Corona-Virus zwar schon ein Thema in den Nachrichten aber es war nicht sehr weit weg. Etwas näher war es dann schon als ich zum ersten Wettkampf der Saison nach Rodgau gefahren bin. Dieser Lauf ist nicht unbedingt mein Favorit was die Landschaft betrifft, aber immer wieder gut als Test für die Fitness nach dem Jahreswechsel und noch dazu eine der frühesten Ultramarathons im Jahr. Eigentlich hatte ich ja auch einige Veranstaltungen im Ultrabereich auf der Liste. Im Startblock wurde noch über das Tragen von Masken gescherzt – wie schnell sich die Lage ändern kann war selbst mir damals nicht bewusst.

Februar

Im Februar waren die Einschläge des Virus schon deutlich näher, es gab die ersten Fälle in Deutschland und auch im Elsass gab es das erste was man wohl später als Super-Spreader-Event bezeichnen würde. Noch waren wir aber guter Dinge und so haben wir auch die Weinmesse der “vignerons indépendants” in Strasbourg wie in jedem Jahr besucht und dort reichlich Wein eingekauft. Von Maskenpflicht oder gar dem Verbot derartig großer Veranstaltungen ohne Abstandsregeln sprach damals noch keiner. Es wundert mich auch jetzt gegen Jahresende, dass auf der Weinmesse nicht mehr passiert ist – das Potential bei der Enge zwischen den Ständen wäre auf alle Fälle gegeben gewesen. Aber manchmal muss man eben auch Glück haben. Im Blog habe ich mich mit einigen lange aufgeschobenen Projekten bzw. meinem Weihnachtsgeschenk beschäftigt: Zum einen habe ich endlich einmal begonnen meinen eigenen Dyn-DNS-Service aufzubauen (aber nicht einfach nur als “geht” sondern wenn schon dann gleich auch IPv6-tauglich), zum anderen habe ich den neuen Raspi 3B+ an unseren damaligen Fernseher angeschlossen. Wie der Zufall es so will, habe ich dann im Februar noch ein deutlich größeres Ersatzmodell bei Kleinanzeigen gefunden, das preislich absolut top war und vor allem exakt in die Abmessungen unserer Schrankwand passt. Zu dem Zeitpunkt war es eher nach dem Motto: So günstig, passend und noch dazu keine 10km vom Wohnort weg kommt das so schnell nicht wieder. Denn eigentlich nutzen wir den Fernseher primär für die Nachrichten und gelegentlich einen Film am Abend. Es sollte sich aber noch als Glücksgriff erweisen das Gerät im Haus zu haben.

März

Zum Start in den März gab es noch eine letzte größere Laufveranstaltung – die privat organisierte Rheintalquerung – wie immer von Leutershausen nach Bad Dürkheim mit anschließender Erholung im Salinarium – sozusagen eine Pre-Lockdown-Veranstaltung für Läufer. Es gab zu dieser Zeit auch die ersten Panik-Käufe – während ich am Laufen war, ist Marion mit den Kindern unterwegs gewesen zum Einkaufen um dann wieder passend an der nächsten Versorgungsstelle zu stehen. Es war die Zeit als die Regale für Klopapier teilweise leer waren. Selbst mir ist ein Erlebnis im Gedächtnis geblieben, als ich auf die Schnelle noch ein Paket Mehl besorgen wollte um Pfannekuchen zu machen: Mit sehr viel Glück wurde gerade in einem der Supermärkte gerade eine frische Palette aus dem LKW in den Verkaufsraum gerollt. Zusammen mit der klaren Ansage des Personals: Jeder Kunde nur ein Paket. Zudem stand ich zum ersten Mal in einer Schlange vor einem Supermarkt. Irgendwie ein bizarres Gefühl, mit dem Lockdown starteten ja dann auch die Sondersendungen der Sendung mit der Maus bei der auch über die Nachkriegszeit von Amin Maiwald – ebenfalls inklusive Anstehen vor dem Lebensmittelgeschäft – immerhin konnte man noch normal bezahlen (wenn möglich natürlich kontaktlos) und es gab keine Lebensmittelmarken (wobei man das heute wohl als App realisieren wollen würde).

Ebenso gab es die erste gekippte Laufveranstaltung, der Eco Trail in Paris wurde erst einmal in den Oktober verschoben. Leider waren die Erstattungsrichtlinien noch nicht ganz klar – so sind wir ärgerlicherweise auf den Übernachtungskosten in Paris sitzen geblieben. In die Reihe der Absagen fiel dann auch die Mitgliederversammlung der DJK Feudenheim und auch der Weinstraßen-Marathon (der nur alle zwei Jahre stattfindet) wurde ersatzlos abgesagt. All das schöne Training umsonst, immerhin bin ich fit in die Pandemie gestartet.

April

Der April war eine echte Herausforderung – mit der Home-Office-Regelung um Kontakte zu reduzieren und den geschlossenen Schulen und Kindergärten war es vor allem eine sehr anstrengende Zeit. Wir haben uns recht schnell auf einen Familien-Rhythums eingespielt: Papa von morgens ab 5h bis 10h (so konnte ich immerhin die Daily-Standups noch wahrnehmen und sinnvoll mitarbeiten), dann von 10h an Rollenwechsel und Kinderbespassung bis ich dann gegen 17h oder je nach Bedarf auch später die restliche Arbeitszeit abgeleistet habe. Immerhin, es funktionierte alles von Anfang an recht reibungslos und auch unser Arbeitszimmer war recht schnell auf zwei vollwertige Arbeitsplätze erweitert.

Immerhin konnte ich der ganzen Sache auch noch etwas positives abgewinnen: Ich hatte endlich Zeit mich um meinen abgestellten Opel Corsa zu kümmern. Primär um den den gerissenen Krümmer – während die Kinder im Hof wenigstens etwas toben konnten und Marion somit in Ruhe arbeiten konnte habe ich endlich die Zeit gehabt mehrmals täglich die völlig verosteten  Muttern mit Rostlöser zu behandeln.  Ein Kur die sich gelohnt hat – mit etwas Überredung habe ich alle Muttern und Stehbolzen ohne Schaden aus dem Motorblock heraus bekommen und auch die Ersatzteile waren vergleichsweise günstig. Den eigenen Werkzeugpark etwas zu erweitern hat ja bekanntlich noch nie geschadet.

Der angeschaffte Fernseher ist derweil täglich in Betrieb schon allein der Sondersendungen der Sendung mit der Maus wegen – so kommen die Eltern immerhin dazu etwas zum Mittagessen vorzubereiten, das Gerät hätte ich wohl zu keinem besseren Zeitpunkt kaufen können.

Zudem haben wir regelmäßige Touren in den (groß)-elterlichen Schrebergarten gemacht – meist mit dem Rad, so sind wir wenigstens etwas aus dem Stress raus gekommen, der sich über die Woche immer wieder weiter aufgeschaukelt hat.

Mai

Es gibt immerhin erste Lockerungen und der Kindergarten macht unter verschärften Regelungen wieder auf – immerhin ein Lichtblick. Unseren Urlaub in Schweden verschieben wir kurzerhand um ein Jahr – die Fährgesellschaft ist kulant und gestattet angesichts der Pandemie ein Umbuchen (wenn auch nur erst mal auf einen Warteplatz im Dezember, weil der Fahrplan für 2021 noch nicht feststeht). Somit bleiben wir für diesen Urlaub nur auf den Kosten für eine vorab gebuchte Übernachtung auf einem Campingplatz sitzen – mit 30 EUR absolut verschmerzbar. Problematisch wäre für uns auch nicht unbedingt die Quarantäne-Anordnung von 14 Tagen nach Rückkehr gewesen, sondern vielmehr unsere geplante Kombination mit der Hochzeit meiner Schwester – aus dem Hochrisiko-Gebiet direkt zu einer derart großen Familienfeier geht eben nicht. Auch die geplante Kombination des Schwedenurlaubs mit dem Stockholm-Marathon ist natürlich gestrichen.

Ohnehin bereits abgesagt sind der SRH-Marathon in Mannheim und der Rennsteiglauf für den ich mich angemeldet hatte. Auf dem Gelände der DJK darf ich derweil als Malermeister tätig werden – fast einen halben Tag bin ich damit beschäftigt auf dem Boden verschiedenste Markierungen mit neon-pinker Sprühfarbe aufzubringen – Abstand und Einbahnstraßenregelung. Wie praktisch, dass wir mit der Farbe bereits gute Erfahrungen beim Herbstlauf für die Streckenmarkierung gemacht haben. Auch für den Herbstlauf gibt es erst Abstimmungen per Mail – am Ende fällt die Entscheidung: Wir wollen es zumindest einmal versuchen – gleiches gilt für den Laufkurs, auch diesen wollen wir anbieten.

Juni

Im Juni gibt es immerhin ein wenig Urlaub für dieses Jahr, diesen nutzen wir jetzt eben um die Hochzeit meiner Schwester in Leipzig besuchen zu können – da die Regelungen weiter gelockert wurden können wir sogar einen Besuch im Zoo durchführen. Die Hochzeit fällt auch deutlich kleiner und mit viel Abstand aus als es ursprünglich geplant war. Aber auch so tut der Urlaub insgesamt ganz gut nach all den anstrengenden Tagen mit Kinderbetreuung und Home-Office. Mein Training für die nicht stattfindenden Läufe ist auch drastisch eingebrochen – das merke ich einerseits an der Waage (es fehlen einfach die täglichen 40km Radfahren beim Grundumsatz und der ausgezehrte Sportlerkörper legt natürlich gleich mal Polster für den nächsten Ultra-Marathon oder sonstige verrückte Ideen an), andererseits habe ich mir mit den wenigen Trainingseinheiten die dann noch möglich sind einen ordentlichen Fersensporn hintrainiert. Da heißt es dann erst mal langsamer laufen, aber immerhin ist es ja wieder erlaubt mit mehreren Leuten unterwegs zu sein – so treffen wir uns regelmäßig zum Laufen an verschiedenen Orten in Mannheim. Mit regelmäßigen Terminen beim Physio und Einlagen gehen die Schmerzen dann auch recht bald wieder weg, auch wenn mich die Problematik noch einige Zeit begleitet.

Juli

Ein weiteres jährliches Event wird abgesagt: In diesem Jahr findet der Römerman-Triathlon in Ladenburg nur virtuell statt, somit bedarf es auch keiner Helfer, die an der Strecke stehen. Die Arbeit pendelt sich im Wochenrhythmus ein: Eine Woche Home-Office, eine Woche Präsenz. Eine Überraschung gibt es zur Monatsmitte – ohne große vorherige Ankündigungen verlässt unser bisheriger Abteilungsleiter die Firma. Somit sind wir mitten in der Krisenaufarbeitung erst einmal völlig kopflos, aber in jeder Krise steckt ein Chance und so beginnt da große Aufräumen – mehr oder weniger erfolgreich – vor allem treten sehr viele alte Projekte wieder in Erinnerung die nie vollständig abgeschlossen wurden oder immer wieder verschoben wurden. Hier hilft dann oft nur der große digitale Mülleimer – einfach mal ordentlich ausmisten.

August

Im August holen wir zumindest ein Stück des ausgefallenen Schwedenurlaubs nach – wenn wir schon das gesamt Camping-Equipment vorbereitet haben, so wollen wir das doch dieses Jahr wenigstens ein wenig nutzen. Natürlich ist es kein Camping wie sonst, sonder unter Pandemie-Bedinungen – mit Abstand und Maske in den Sanitäranlagen und beim Abwasch. Das Reiseziel ist eine uns eigentlich bereits bekannte Region – es geht nach Riedenburg an Main-Donau-Kanal bzw. der Altmühl. Die Region haben wir im Vorjahr mit dem Fahrrad bereits durchradelt, hatten allerdings zu wenig Zeit uns dort umzusehen bzw. aufgrund des Wetters keine Lust dazu. Somit holen wir in diesem Jahr einige Besichtigungen in der Region nach. Unter anderem machen wir eine sehr schöne Bootsfahrt von Kehlheim durch den Donau-Durchbruch ans Kloster Weltenburg. Von dort geht es mit dem Fahrrad zurück nach Kehlheim – gut dass Marion mittlerweile ein sehr hochwertiges Fahrrad hat – aber schweißtreibend ist es allemal. Die Strecke ist auch nur bedingt für einen Kinderanhänger tauglich, eine Passage müssen wir auslassen und sicheherheitshalber auf der Straße fahren, nachdem mir der Anhänger bei einer der Abfahrten schon fast das Hinterrad “unterm Popo weggeschoben” hat. Ein echtes Highlight für die Kinder ist die Greifvogelschau auf der Riedenburg – auch dort ist die Anfahrt mit dem Rad sehr schweißtreibend aber definitiv lohnend. Im Vergleich zum Vorjahr spielt auch das Wetter diesmal deutlich besser (wenn auch nicht durchgehend sonnig) mit – die Dusche auf der Fahrt nach Kehlheim bleibt diesmal aus.

Zum Abschluss des Urlaubs machen wir auf der Rückfahrt noch den für dieses Jahr einzigen Abstecher nach Nürnberg, der Stadtlauf am 3. Oktober ist zu diesem Zeitpunkt bereits abgesagt. Meine Serie der jährlichen Teilnahme ist somit erst einmal gerissen, wenn auch nicht aus eigenem Antrieb. Eine Zeit lang bin ich fast versucht am Tag der deutschen Einheit einfach meinen eigenen Lauf über die bekannte Strecke zu machen, es sind ja nur 21km.

September

Die erste Septemberwoche haben die Kinder noch etwas Urlaub, das heißt zumindest für die Eltern trotz Home-Office etwas Erholung. Etwas unpraktisch gestaltet sich das Abholen der Kinder bei Oma im Elsass – während wir am Sonntag noch die letzten Sachen dort wieder zusammen packen, erklärt Frankreich das Nord-Elsass zur roten Corona-Zone. Wir sollen aber am Dienstag zum Kindergartenbeginn bestätigen, dass wir nicht in einem Risikogebiet (gemäß Robert-Koch-Institut) waren oder einen negativen Test vorweisen. Somit kommt die ganze Familie auch noch in den “Genuss” eines Drive-Trough-Tests in Landau auf dem Rückweg. Wir stellen uns derweil schon auf Quarantäne ein – allerdings stuft das Robert-Koch-Institut bis zum Kindergartenstart das gesamte Grenzgebiet als “größenteils harmlos” (siehe Per Anhalter durch die Galaxies) ein. Somit haben wir da zumindest eine Sorge weniger, und auch die wenig später eintreffenden Ergebnisse sind alle negativ. Dem Kindergartenbesuch steht also nichts im Wege. Das erspart uns entsprechende Schichtarbeit wie im März/April.

Oktober

Wie bereits erwähnt würde hier natürlich der obligatorische Besuch beim Stadtlauf in Nürnberg stattfinden, es ist sehr ungewohnt am dritten Oktober nicht vorm Opernhaus in Nürnberg in der Startaufstellung zu stehen. Dafür geht die Vorbereitung des Herbstlaufs in die absolut heiße Phase – wir haben nach Einreichen eines umfassenden Hygiene-Konzepts eine Freigabe unter Vorbehalt seitens der Behörden bekommen. Die Veranstaltung wird in sehr reduzierter Form ausgetragen – es finden nur der Hauptlauf (10km) und der Schülerlauf über 1,2km statt. Zudem gibt es kein großes Rahmenprogramm wie sonst mit Bewirtung und sonstigen Aufenthalts und Verweilmöglichkeiten für Sportler und Fans. Zudem natürlich eine strickte Einlasskontrolle und jede Menge Sprühfarbe um die Laufwege und Abstandsregeln klar auszuweisen. Insgesamt wird die Veranstaltung von vielen Sportlern sehr positiv aufgenommen, die Sportler verhalten sich angesichts der Pandemie vorbildlich. Kurzfristig entsteht ein weiteres Problem als drei Tage vor dem Lauf die Inzidenz in Mannheim die 50er Marke durchbricht. Da wir eine reine Outdoor-Veranstaltung sind dürfen wir sie dennoch durchführen, als eine der letzten Laufveranstaltungen in diesem Jahr die überhaupt stattfinden darf.

November

Der November bringt dann den erneuten “Shutdown light” – immerhin bleiben diesmal die Schulen und Kindergärten auf, aber wir richten uns dauerhaft im Home-Office ein. Eine wichtige Erkenntnis: zwei getrennte Arbeitszimmer sind für solche Fälle eigentlich ein muss, damit man nicht ständig den Effekt hat beim Partner in der Telefonkonferenz “mittendrin statt nur dabei” zu sein. Außerdem gönne ich unserer Anschlussleitung endlich ein Upgrade, von 16/2Mbit auf 50/10Mbit – das macht schon einen kräftigen Unterschied und lohnt sich vor allem da wir noch nicht einmal absehen können wie lange die Home-Office-Phase noch weiter geht.

Nachdem ja der herbstliche Ausflug nach Nürnberg entfallen ist, wir aber natürlich nicht auf Lebkuchen verzichten wollten haben wir uns diese kurzerhand liefern lassen, natürlich als Sammelbestellung mit einigen anderen Leuten. Aber ich war doch recht beeindruckt – ein Paket mit rund 10kg Lebkuchen ist es am Ende geworden. Die Jahresendzeit bringt immerhin trotz Lockdown einige Regelmäßigkeiten mit sich. Wie immer gilt es den Versand der Vereinszeitschrift zu organisieren, passende Kuverts bzw. Aufkleber zu drucken. Hierbei entsteht nebenher wieder ein spannendes Lernfeld für mich, unter anderem wie man einen MSSQL-Server in Docker unter Linux ans Laufen bringt. Mit diesem Wissen wird es die kommenden Jahre sicherlich einfacher die entsprechenden Drucksachen zu erzeugen. Zudem gibt es einiges zu tun – mit der Förderung zur Digitalisierung von Sportvereinen machen wir uns daran, verschiedene Termine auch Online anbieten zu können. Anfänglich noch etwas holprig, da noch nicht alle Hardware da ist. Das ändert sich dann im folgenden Monat.

Dezember

Es ist fast ein Jahr vergangen seit die ersten Meldungen zum Corona-Virus aus China in den Nachrichten waren. Anfänglich noch so weit weg, hat uns die Pandemie jetzt doch sehr gut im Griff. Weihnachtsfeiern, Weihnachtsmarkt und alles was sonst so zur Vorweihnachtszeit gehört entfällt nahezu ohne Ersatz. Ebenso eingeschränkt laufen die sonst üblichen Planungen für Wettkämpfe bei mir, die meisten sind nur unter Vorbehalt geplant, ob sie stattfinden können ist größtenteils ungewiss. Dennoch habe ich mal angefangen zu planen – unter anderem steht wie auch dieses Jahr wieder Rodgau als Start in der Liste, es ist nicht mehr lange hin und noch ist nicht klar ob der Wettkampf stattfindet, aber ich habe endlich mal wieder ein Ziel auf das ich hinarbeiten kann. Zudem hilft es auch, dass ich zwingend Urlaub abbauen musste, ich bin dieses Jahr nicht zur Stallwache in der Firma, das eröffnet die Chance das ein oder andere im Haushalt noch in Ordnung zu bringen.

Ausblick

Heute haben die ersten Impfungen gestartet – die Chancen stehen also gar nicht so schlecht, dass es im kommenden Jahr wieder etwas normaler wird. Wann genau wir wieder “Normalität” haben ist noch nicht ganz abzusehen – aber es wird doch hoffentlich werden.

 

 

 

 

Anwendungsfall für MSSQL in Docker unter Linux

Wie in einem meiner letzten Beiträge beschrieben, kann man mittlerweile einen MSSQL-Server auch unter Linux in Docker laufen lassen. Nun gilt es noch die berechtigte Frage zu klären: Weshalb sollte man sowas tun? Gibt es für dieses Konstrukt überhaupt sinnvolle Anwendungsfälle? Für alle die es eilig haben: Ja die gibt es. Wer es im Detail wissen will sollte weiter lesen.

Der Anwendungsfall für mich hängt indirekt auch mit der Jahreszeit zusammen, wie in jedem Jahr fällt mir als Schriftführer unseres Sportvereins die Aufgabe zu, mich um den Versand der Jahreszeitschrift zu kümmern. Man könnte es auch eine Alternative zu Weihnachtskarten nennen. Für die Verwaltung des Vereins haben wir eine fertige Software die leider nicht open source ist, geschweige denn dass sie nativ unter Linux laufen würde. Aus Sicht eines Anwendungsentwicklers ist die Software nicht gerade optimal, aber sie ist nunmal da und die anderen Mitglieder des Vorstands sind damit vertraut. Mal eben etwas zu ändern ist an dieser Stelle nicht drin.

Continue reading

MSSQL-Server mit Docker unter Linux

Der Titel hört sich im ersten Moment etwas schräg an – insbesondere wenn man zu den etwas älteren Semestern gehört, die noch die Anfeindungen Microsofts in Richtung Linux kennen gelernt haben. Unter anderem mit Werbesprüchen wie “ein freies Betriebssystem hat nicht nur Vorteile” – verbunden mit einem Bild welches Piguine als Repräsentanten von Linux zeigte mit nicht ganz passenden Köpfen. Das war 2001 und geworben wurde für Windows 2000. Die Zeiten haben sich geändert und mittlerweile gibt es sogar offizieller Weise ein “Windows Subsystem for Linux” (WSL) und auch erfreuliche Entwicklungen hin zu einer deutlich brauchbareren (Power-)Shell als es die altgediente command.com bzw. cmd.exe je waren. Das Ganze kommt nicht ganz von ungefähr – mit der Microsoft Azure Cloud mussten Werkzeuge her mit denen man Systeme vernünftig remote administrieren kann – da ist es durchaus legitim einmal zu schauen was bei anderen Betriebssystemen für den Erfolg mit verantwortlich ist.

Continue reading

DNS mit Docker Teil II – Recusor

Im letzten Post hatte ich den Anfang des Setups eines vollständigen DNS-Servers mit Docker und PowerDNS beschrieben. Nun folgen die nächsten Schritte. Eigentlich wollte ich diesen Post schon geraume Zeit fertig machen aber besser spät als nie.

PowerDNS-Recursor

Wie beschrieben teilt sich PowerDNS in drei Teile auf, im klassischen BIND-Server ist es ein monolitscher Block (bei dem man per Konfiguration ggf. einzelne Teile stillegen kann).
Der Recursor von PowerDNS übernimmt die Aufgabe der Namensauflösung für Anfragen die der Server nicht selbst auflösen kann. Diese Funktion braucht man im ersten Augenblick ür einen reinenNameserver nicht, aber in der Regel laufen auf dem Server ja auch noch andere Prozesse oder der DNS-Server dient für Clients im Netzwerk als Schnittstelle zum Netz. Dabei legt er praktischer Weise auch noch einen Cache an. Etwas ganz ähnliches macht ganz häufig Router für einen mit, wobei dieser die Anfragen initial dann auch nur an den nächst größeren Nameserver (z.B. beim Provider) abfragt. Ein solcher Cache ist auch für andere Serverprozesse sinnvoll, die viele DNS-Abfragen durchführen. Ein klassicher Fall hierfür ist der Mailserver, wenn er Echtzteit-Blacklists verwendet – diese teilen ihre Einschätzung anhand bestimmter DNS-Antworten mit (das ist schneller und effizienter als http(s), da tcp sondern nur eine upd-Verbindung aufgebaut wird.

Der Recursor ist auch recht schnell eingerichtet, das Dockerfile enthält auch hier keine großen Überraschungen bereit


FROM pschiffe/pdns-recursor:alpine
COPY recursor.conf /etc/pdns/recursor.conf
ENTRYPOINT [ "/usr/sbin/pdns_recursor" ]

Wobei das Config-File wie folgt aussieht:


allow-from=127.0.0.0/8,::1/128,2001:db8:ffff:ffff::/64,192.168.1.0/16
any-to-tcp=yes
#api-key=xxxx
#api-readonly=yes
daemon=no
local-address=::,0.0.0.0
local-port=53
lowercase-outgoing=yes
setgid=recursor
setuid=recursor

das einzig spannende an dieser Stelle ist die oberste Zeile “allow-from” – sie legt fest von welchen Adressen aus überhaupt auf den Server zugegriffen werden kann. Hier führt man natürlich die Localhost-Adressen an, genauso wie die eigene IPv6-Range (ich erlaube es dem gesamten Bereich der mir zugewiesen ist, damit auch andere auf dem Server laufende Prozesse den DNS-Service nutzen können). Zudem erlaube ich dem eigenen Docker-Netzwerk auf IPv4-Basis den Zugriff, das ist aber eher eine Fallback-Möglichkeit. Man sollte sich überlegen einen Recursor generell für jedermann zu öffnen. Der Recursor kann das durchaus ab, aber es besteht leider die Gefahr, dass er missbraucht wird und dann andere Systeme per Denial-of-Service angreift. Hier kann man ggf. mit dem Load-Balancer vornedran die Menge der Requests von extern limitieren, aber selbst dann bekommt man recht bald wahrscheinlich eine Mail vom BSI die auf die Problematik hinweist – ich hatte es beim Aufbauen mit einem Load-Limit auf 10 externe Anfragen pro Minute versucht, aber der Bot der das automatisiert prüft ist etwas stumpfsinnig und prüft nur ob man generell Abfragen für externe Domains an den Port 53 schicken darf.  Wie sinnvoll derartige Prüfungen sind, darf jeder für sich selbst entscheiden.
Auch diese Definition baut man zu einem Image:


docker build -t powerdns-recursor .

Danach startet man den Server ebenfalls im eingerichteten Docker-Netzwerk für die DNS-Services, natürlich auch hier wieder mit einer festen IPv6-Adresse da man auch hier sonst recht schnell ein Henne-Ei-Problem bekommt was die Namensauflösung betrifft.


docker run --ip6 2001:db8:ffff:ffff:ffff:ffff:0053:4 --network dns --name power_dns_recursor -d powerdns-recursor

Es kann natürlich auch als Dokumentation die vergebenen IP-Adressen mit Namen in der eingenen Datenbank in der eingenen DNS-Zone zu hinterlegen z.B. in einem eigenen DNS-Abschnitt wie dns.my.example.com mit sprechenden Namen: primary,secondary,recursor – denn so richtig einprägsam waren schon IPv4-Adressen nur bedingt und mit der zusätzlichen Länge wird das bei Ipv6 nicht besser.


INSERT INTO `records` VALUES (4, 1, 'authorative.my.example.com', 'AAAA', '2001:db8:ffff:ffff:ffff:ffff:0053:3', 3600, 0, NULL, 0, NULL, 1);

INSERT INTO `records` VALUES (4, 1, 'recursor.my.example.com', 'AAAA', '2001:db8:ffff:ffff:ffff:ffff:0053:4', 3600, 0, NULL, 0, NULL, 1);

Den Recursor kann man dann natürlich auch testen und nach beliebigen nicht eigenen Adressen wie www.google.com, www.amazon.de, www.meine-website.org
{{Beispiel mit dig}}


			

Boot-Trick für Linux-Systeme wenn USB per BIOS nicht geht

Da wollte ich nur einen etwas älteren Laptop wieder soweit flott bekommen. Also die eigenen Daten sichern und eine Neuinstallation erzwingen. Leichter gesagt als getan. Backup dank ein wenig Ordnung im System und der Tatsache, dass es ein Linux-System ist war recht flott erledigt. Einfach die betreffenden Home-Verzeichnisse auf ein Backup-Medium (Netzwerk, externe Platte oder Stick) packen und schon ist man so gut wie fertig. Die Einstellungen des Systems waren mir in dem Fall nicht weiter wichtig – die waren ohnehin etwas “verbastelt”, da kam die Neuinstallation ja gerade recht.

Kniffelig wurde es dann aber diesmal beim Neuinstallieren des Betriebssystems: Von wegen einfach USB-Stick einstöpseln – Reboot und gut – leider nicht! Denn das alte Gerät verweigert sich jeglichem Boot-Versucht von einem USB-Stick und auch die SD-Card findet das System nicht beachtenswert wenn es ums Booten geht.

Nächster Versuch: Klassisch eine Boot-CD brennen – scheitert leider daran, dass die meisten Images mittlerweile größer als eine CD mit ihren 700MB sind. Dabei wollte ich schon aus gutem Grund ein ressourcenschonendes Lubuntu installieren (war auch vorher bereits drauf). Älter CD-Images waren auch nicht so ohne weiteres aufzutreiben. DVDs kann das alte optische Laufwerk nach einigen Versuchen nicht lesen (es steht leider auch nichts auf der Laufwerksklappe). Falls jetzt jemand fragt was man mit derart alten Systemen noch anfangen kann: Sie sind als Notbehelf in der ein oder anderen Situation doch ganz nützlich – vor allem wenn die Gefahr besteht, dass man das Gerät im Zweifel nicht wieder sieht oder es irreparabel beschädigt wird (das man auf derartigen Systemen auch keine privaten Daten lagert sollte jedem klar sein).

Jetzt war ich schon fast davor einen PXE-Server zu installieren und dann das System hoffentlich per Netzwerkboot auf die Spur zu bekommen, aber das ist ja doch etwas Umstand. Daher war das der absolut letzte Notnagel den ich gehen wollte. In der Zwischenzeit hatte ich auch irgendwo im Netz noch eine uralte Lubuntu-ISO-Datei gefunden (14.x – steinalt auf gut deutsch). Doch der Download zog sich etwas in die Länge. Mehr als genügend Zeit sich noch mit anderen Optionen zu beschäftigen.

Eigentlich ist die Lösung recht simpel: Was das BIOS nicht kann, kann das OS bzw. der Bootloader vielleicht dann doch. Da auf dem System ja bereits ein Linux samt Grub als Bootloader vorhanden war geht es dann wie folgt, nachdem man aus dem Bootmenü mit “c” in den Consolen-Modus gewechselt ist.

ls
set root=(hd1)
chainloader +1
boot

Wobei ls einem die möglichen vorhandenen Partitionen listet und man dann bei set root=…. natürlich die passende Partition angeben muss – hier hilft im Zweifel ein wenig ausprobieren. Mehr als nicht booten oder das alte OS booten kann ja nicht schiefgehen. Danke an die hilfreichen Kommentare hier.

Von der Kunst der Vereinfachung

Abstrahieren und vereinfachen liegt in der Natur des Menschen. Wir alle haben es natürlich gerne wenn eine Aufgabe “leicht” zu bewältigen ist oder ein Sachverhalt “einfach zu begreifen” ist. Eine grundlegende Eigenschaft dabei ist es, dass wir Dinge “ausblenden” die für die aktuelle Aufgabe nicht relevant sind oder deren genaue Zusammenhänge wir nicht bis ins Detail verstanden haben müssen um die Aufgabe zu lösen oder den Sachverhalt zu verstehen. Oftmals reicht es auch aus, die Hintergründe einmal umfassend bearbeitet zu haben und dann mit den gewonnenen Erkenntnissen und ggf. auch Erfahrungen weiter zu arbeiten. Jeder der ein Kraftfahrzeug fährt, hat sich (hoffentlich) einmal mit der dahinter stehenden Physik beschäftigt – doppelte Geschwindigkeit vervierfacht die Energie usw. Das alles setzt ein geübter Fahrer zusammen mit ggf. weiteren Erfahrungswerten ein um sein Fahrzeug im Verkehr sicher zu führen.

Wir Menschen sind auch Meister darin immer mehr dieser Denkarbeit zu automatisieren und uns somit das Leben noch leichter zu machen. Waren die ersten Computer noch groß und nur mit dem notwendigen Fachwissen zu bedienen, so benutzen wir heute fast schon wie selbstverständlich ein Smartphone dessen technische Komplexität um mehrere Größenordnungen über den ersten Großrechnern oder gar Heim-PCs liegt. Durch den Einsatz von Technik und entsprechenden Schnittstelle (der Fachmann spricht vom User-Interface) kann heute jeder mit minimalen Vorkenntnissen ein Smartphone zumindest grundlegend bedienen. Natürlich gibt es auch weiterhin die PowerUser bzw. Spezialisten die nochmals mehr aus dem Gerät “herausholen” bzw. auch bei bestimmten Fehlerbildern Abhilfe schaffen können (oder zumindest einmal wissen wo man nachschlagen kann um ein Problem zu beheben). Continue reading