Sicherungsprogramm für Unified Kernel Images
Ein Unified Kernel Image enthält alle Teile, die zum Booten des Systems notwendig sind. Es enthält den Kernel, die initrd und die Kernel-Kommandozeile in einer einzigen Datei. Sichert man diese Datei, lässt sich ein komplettes Backup der Boot-Systemkonfiguration erstellen. Diese lässt sich einfach zum Boot-Menü hinzufügen. Wenn etwas mit dem aktuellen Kernel-Image oder dessen Konfiguration schiefläuft, kann man im Boot-Menü einfach die Sicherungskopie auswählen und die vorhergehende Kernel-Konfiguration starten. Das Tool ukibak
automatisiert das Erstellen des Backups.
Bandbreitenlimit für Interfaces mit systemd
Mit systemd lässt sich leicht ein WireGuard-Interface anlegen. Aber was, wenn man nicht die gesamte Bandbreite des DSL-Anschlusses für die WireGuard-Verbindung opfern will?
Wireguard Kompletttunnel mit DHCP
Wireguard soll mit Version 5.6 offiziell Teil des Linux Kernels werden. Aber auch schon vorher konnte man Wireguard bei vielen Linux-Distributionen ausprobieren. Als Kompletttunnel, für den Einsatz unterwegs, funktioniert es hervorragend. Will man allerdings sicherstellen, dass kein Netzwerkverkehr am Tunnel vorbei geht, muss man ein paar Dinge beachten, um sich nicht selbst nach kurzer Zeit komplett aus dem Netz zu werfen.
Systemhärtung mit systemd
Kein System ist frei von Fehlern. Das trifft auch auf Netzwerkdienste zu, welche auf Serversystemen laufen. Das Problem dabei ist, dass sich hier lange Laufzeit des Programms und große Angriffsfläche sehr unvorteilhaft ergänzen. Systemd bietet hier allerdings einige fortschrittliche Möglichkeiten das Risiko, unter anderem mit Hilfe von Containertechnik, drastisch zu reduzieren.
ASN.1 Byteorder
Bei der Kodierung des Längenfeldes in ASN.1 stellt sich unter bestimmten Umständen die Frage nach der Bytereihenfolge. Leider ist die Festlegung im Standard nicht gerade leicht zu finden und bedarf auch noch der Interpretation. Daher hier die Antwort auf die Frage nach der Endianess des Längenfeldes in ASN.1.
Wie baut man einen Hardwarezufallsgenerator?
Computerprogramme sollen deterministisch sein und immer auf die gleiche Weise ablaufen. Doch für manche Anwendungsfälle ist Zufall eine entscheidende Komponente. Sei es zum Erzeugen von sicheren kryptografischen Schlüsseln oder um Stichproben aus einer Gesamtmenge auszuwählen. Aber wie erzeugt man zuverlässig Zufall auf einem deterministischen System?
Discard für KVM-Gäste
Einer KVM VM möchte man am liebsten ein schönes großes Image zuweisen, damit man es nicht schon nach kurzer Zeit vergrößern muss. Macht man dies allerdings mit vielen VMs sammelt sich ein Haufen ungenutzter Verschnitt an. Dieser ist zwar in der VM leer, belegt auf dem Host jedoch unnötig Speicherplatz. Dieser Artikel beschreibt, wie man mit qcow2-Sparse-Images Speicherplatz ganz leicht überprovisionieren kann. Auch wer seine VM-Images auf einer SSD ablegt, sollte einen Blick in diesen Artikel werfen. Denn das gleiche Setup kann auch dafür sorgen, dass SSDs immer genügend freie Blöcke für eine gute Performance parat haben.
Port-Forwarding mit systemd
Manchmal braucht man auf einem System mal schnell ein Port-Forwarding. Zuerst fallen einem dann die üblichen Verdächtigen in Form von iptables, NetCat und inetd ein. Doch es gibt auch andere Möglichkeiten und auf einem System mit systemd braucht man dafür nicht mal andere Tools.
dm-crypt, Dienste und ein eigenes Runlevel
Auf meinem Homeserver liegt die Datenpartition auf einem mit dm-crypt verschlüsselten Volume. Dienste wie samba oder syncthing sollen warten, bis das Volume eingehängt ist bevor sie mit der Arbeit beginnen. Andererseits soll der Server bei einem Neustart nicht stehen bleiben und auf das Kennwort warten, da er auch einige unverschlüsselte Dienste bereitstellt. Die Lösung für dieses Dilemma liefert systemd.
GVFS Mount - Probleme mit Samba
Gnome 3 ist eine tolle Desktopumgebung. Allerdings passiert es von Zeit zu Zeit, dass beim Öffnen von per GVFS eingebundenen Laufwerken (zum Beispiel Samba Shares) der Zugriff für eine Programme nicht funktioniert. Woran das liegt und wie man es reparieren kann beschreibt dieser Artikel.
Linux journalctl cheat sheet
Mit systemd kommt auch journald welcher das Logging übernimmt. Natürlich lassen sich auch weiterhin normale Log-Dateien nutzen, allerdings bietet journalctl
einige interessante Optionen, mit denen man sich die Arbeit mit Logdateien deutlich erleichtern kann. Dieses Cheat-Sheet stellt die wichtigsten Funktionen vor.
Linux systemctl cheat sheet
Systemd setzt sich bei immer mehr Linux Distributionen als Init-System durch. Diese Cheat-Sheet bietet einen Überblick über die wichtigsten Parameter zur Verwaltung von Diensten unter Linux.
Installation von Debian in der VM
Dies ist der dritte Teil der Artikelserie zur Linux-Virtualisierung mit KVM. Er befasst sich mit der Installation von Linux in der VM. Die hierfür notwendigen Vorarbeiten sind im Artikel “Virtualisierung mit KVM” und “Firewalling und NAT für die private Cloud” beschrieben.
Firewalling und NAT für die private Cloud
Der Artikel Virtualisierung mit KVM hat gezeigt, wie man eine virtuelle Maschine auf dem eigenen Heimserver einrichtet. Nun stellt sich die Frage: Wie kommt die VM ins Netz und wie kann man aus dem Internet auf die VM zugreifen?
Virtualisierung mit KVM
Nachdem der Trend immer mehr zur private Cloud geht, stellt sich natürlich die Frage, wie man so etwas auch sicher realisieren kann. Viele haben einen kleinen Server im Keller oder Abstellraum stehen, der sich prima für die eigenen Cloudexperimente eignen würde. Aber möchte man wirklich den Internetzugriff auf dieses System erlauben?
Dateien mit regulären Ausdrücken suchen
Unter Windows durchsucht man die lokale Festplatte meist nur mit Hilfe des “Suchen”-Dialogs aus dem Startmenü. Diese Methode erweist sich jedoch als unzureichend, wenn etwas komplexere Abfragen durchgeführt werden sollen. Spätestens, wenn der Dateiname oder der Pfad mit einem regulären Ausdruck verglichen werden soll, ist schluss. Aber wer braucht schon einen “Suchen”-Dialog, wenn Microsoft mit der Powershell völlig neue Möglichkeiten geschaffen hat?
Kleiner endlicher Automat (finite state machine)
Für ein Mikrocontrollerprojekt brauchte ich einen kleinen, übersichtlich zu implementierenden endlichen Automaten (FSM - finite state machine). D.h. ein Softwarekonstrukt, welches aufgrund bestimmter Ereignisse (hier Tastendrücke auf einer Fernbedienung) zwischen verschiedenen Zuständen wechselt. Zustandsautomaten habe ich schon eine ganze Menge implementiert und dafür auch fertige Bibliotheken genutzt. Doch für einen Mikrocontroller musste es eine besonders leichtgewichtige Implementierung sein.
Die fehlenden Arrayfunktionen in PHP
PHP bietet einen riesigen Fundus an Array-Funktionen. Unter diesen 77 Funktionen fehlen kurioser Weise drei, die man eigentlich erwarten würde.
Die Rolle des Fehlers
Heutzutage werden Fehler häufig als unerwünscht betrachtet. Viel Aufwand wird investiert um Fehler zu vermeiden und Risiken zu minimieren. Dabei sind Fehler gerade das, was häufig zu neuen, besseren Technologien führt.
Gastnetz und VLANs mit DD-WRT
Der Linksys Wireless Router WRT54GL ist bei Amazon schon für unter 40€ zu haben. Das Gerät hat es wirklich in sich. Es beherrscht echte 802.1q VLANs und dazu noch Multi-SSID. Was liegt also näher, als endlich ein Gast-WLAN aufzubauen, welches Freunden und Bekannten bequemen Zugriff ins Internet ermöglicht, ohne dass deren Geräte sich direkt im internen Netzwerk einbuchen müssen.
Mediatomb und BDP7500/MKII
Nachdem es mich mehrere Tage gekostet hat, die richtigen Einstellungen für das reibungslose Streaming auf den Philips Blue-Ray-Player BDP7500/MKII zu finden, möchte ich diese hier einfach dokumentieren. Zusätzlich gibt es einen kleinen Tipp für die Nutzung als Medienplayer, wenn man nicht immer den Fernseher einschalten möchte.
Datumsrechnung in Shell-Scripten
Wer häufiger Shellscripte für Linux erstellt, hatte bestimmt schon häufiger das Problem, dass er das Datum des nächsten Ersten oder die Uhrzeit minus eine Stunde ermitteln musste. In vielen Scripten wird dann wild mit Shellvariablen und Shell-Funktionen herumoperiert. Dabei gibt es doch unter Linux einen viel einfacheren - und besseren - Weg mit dem Datum zu jonglieren.
Header für Bash Shellscripte
Für Shell-Scripte unter Linux gilt das gleiche wie für jedes andere Programm: “Das aktuelle Arbeitsverzeichnis wird durch den Aufrufer bestimmt.” Das ist natürlich dann ein Problem, wenn man bestimmte Konfigurationsdateien oder Programme im aktuellen Arbeitsverzeichnis erwartet. Wenn dem so ist, kann folengder Scriptschnipsel das Arbeitsverzeichnis auf das Installationsverzeichnis des Shellscriptes setzen.
Freihand Icons für WPF
Ich arbeite gerade an einer WPF-Applikation, welche wie ein Notizblock aussehen soll. Natürlich passen die von Windows bereitgestellten Icons und Buttons nicht wirklich zu diesem Design. Also habe ich überlegt, wie ich handgezeichnete Icons in WPF übernehmen kann. Der erste Versuch einfach eingescannte PNG-Bilder zu verwenden sah - zumindest in höheren Zoomstufen - schrecklich aus. Doch zum Glück gibt es eine Möglichkeit Icons als Vektorgrafik in WPF zu überführen.
Eclipse zerschießt SVN
Für das Entwickeln von Java-Anwendungen ist Eclipse das Open-Source-Werkzeug der Wahl. Wenn man jedoch nicht die integrierten SVN-Features von Eclipse verwendet, sondern beispielsweise TortoiseSVN so wird beim Kompilieren das “.svn”-Verzeichnis aus dem Source-Baum in den Ausgabebaum kopiert. Dabei zerschießt Eclipse dann das Repository und das Einchecken funktioniert nicht mehr.
Komplexität
Einen Satz, den sich jeder Programmierer oder IT-Architekt über den Schreibtisch hängen sollte, habe ich in einem Interview mit James Gosling (einem der Urväter von Java) gefunden.
Eclipse RSE zeigt falsche Dateien
Das RSE-Plugin für Eclipse erlaubt es, Dateien auf entfernten Systemen zu bearbeiten und sogar Code entfernt zu compilieren. Ich verwende es überwiegend um bequem PHP-Dateien auf einem LAMP-Server zu bearbeiten. Leider kommt es ab und an vor, dass sich RSE und der Server über den Inhalt des Arbeitsverzeichnisses nicht ganz einig sind.
Java: The Good Parts
Gestern war ich im Buchladen und als ich das hier gesehen habe, musste ich es einfach fotografieren:
RTSP und IPTables
Das Realtime Streaming Protocol kurz RTSP wird genutzt um den Verbindungsaufbau mit Streamingservern zu koordinieren. Die Mobilversion von YouTube nutzt beispielsweise dieses Protokoll. Nach dem Verbindungsaufbau werden die Nutzdaten dann meist über RTP übertragen. Da dieses UDP-basierte Protokoll die verwendeten Ports dynamisch aushandelt, ist es schwierig, dieses ohne geeignetes Conntrack-Modul durch die Firewall zu bekommen. Wenn man also - so wie ich - eine IPTables-Firewall nutzt um den eingehenden und ausgehenden Traffic zu filtern, so hat man mit RTSP ein Problem.
NTP-Anfragen auf localhost umlenken
Manch einer mag sich, ob des seltsamen Titels, fragen, was das soll. Nun ja, viele mobile Geräte - darunter auch viele Android-Geräte - lassen es nicht zu, den Zeitserver einzustellen. Zwar synchronisieren Sie die Uhrzeit automatisch mit einem NTP-Server, jedoch ist dieser fest eingestellt und kann nicht geändert werden. Das ist besonders ärgerlich, wenn im lokalen Netzwerk - zum Beispiel auf einem DSL-Router oder Server - bereits ein NTP-Server läuft. Die Uhrzeit wird dann über etliche Hops hinweg aus dem Internet synchronisiert, anstatt den lokalen Zeitserver zu nutzen. Mit Hilfe von iptables kann man hier jedoch leicht Abhilfe schaffen.
Bash Verzeichnisnavigation
Manchmal ist es nicht ganz einfach, sich auf der Linux-Konsole in einer größeren Verzeichnisstruktur zu bewegen. Doch es gibt eine Hand voll Tricks, um sich das Leben zu erleichtern. Man spart sich viele Tippfehler und die “."-Taste nutzt sich auch weniger ab.
.svn-Ordner loswerden
Ab und an kopiere ich Dateien, die ich aus SVN ausgechecked habe irgendwo hin und stellt hinterher fest, dass überall diese .svn-Ordner herumliegen. Jetzt kann man natürlich alles löschen und neu exportieren (anstatt auszuchecken) oder man verwendet die folgenden Einzeiler.
Deklaratives Multithreading
Heute habe ich meinen Artikel zum Thema “Deklaratives Multithreading” auf CodeProject online gestellt.
Fallback mit MD-RAID
Nachdem ich meinen Heimserver einmal wieder upgraden musste und es vielen evtl. ähnlich geht, möchte ich hier eine Methode beschreiben, wie ein RAID 1 Softwareraid (MD-Device) als schnelle Fallbackmethode verwendet werden kann.
Shellscript INI-Parser
Manchmal müssen auch Shell-Scripte konfigurierbar sein. Um mehrere, zufällige Playlisten für meine Musiksammlung zu erstellen, wollte ich ein Script haben, welches eine Konfigurationsdatei auswertet und für jeden Abschnitt die gleiche Aktion ausführt. Gleichzeitig sollte es sich durch falsche INI-Direktiven nicht durcheinander bringen lassen und wie eine gängige INI-Datei aufgebaut sein. Die Lösung ist dieses Shellscript, welches eine INI-Datei abarbeitet.
Vim Kurzreferenz
Vi ist neben Emacs der Texteditor auf Linux Systemen. Leider ist seine Lernkurve ziemlich steil. Das zeigt sich schon daran, dass Anfänger häufig schon daran scheitern den Editor wieder zu beenden, nachdem sie ihn aus versehen geöffnet haben. Dabei sind Vi und sein Nachkomme Vim (Vi improved) sehr mächtigte Editoren. Daher hier eine (nicht ganz so kurze) Kurzübersicht der wichtigsten Kommandos für Vim.
Batch-Dateien und Netzlaufwerke
Wer schon einmal versucht hat eine Batch (BAT oder CMD-Datei) von einem, über den UNC-Pfad geöffneten, Netzwerklaufwerk zu starten wird schnell feststellen, dass Windows sich beharrlich weigert, einen UNC-Pfad als aktuelles Arbeitsverzeichnis zu setzen. Dafür setzt Windows den Pfad gleich auf das Windows-Verzeichnis. Dieses Verhalten sorgt dafür, dass man sich gleich das denkbar schlechteste Verzeichnis mit temporärem Müll voll schreibt. Also musste eine Lösung her, welche dafür sorgt, dass das Arbeitsverzeichnis immer auf dem Verzeichnis steht, aus welchem das Script gestartet wurde. Auch wenn es sich dabei um einen UNC-Pfad handelt.
Lasst mich hier raus!
Wer häufiger über Putty auf einem Linux-System arbeitet kennt das. Man hat sich über telnet auf einen Port verbunden und kommt jetzt nicht mehr aus der Telnet-Sitzung heraus. Telnet sagt einem zwar, dass das “Escape character” “^]” ist. Aber wie gibt man das ein?
Ungültige Symlinks löschen
Heute war ich auf der Suche nach einer Möglichkeit schnell alle ungültigen SymLinks auf Dateien aus einem Verzeichnis zu entfernen.
Onyx Boox 60
Im Januar habe ich mir - nach längerem Überlegen - einen E-Book-Reader gekauft. Meine Anforderungen unterschieden sich hier etwas von denen eines “normalen” E-Book-Nutzers. Ich wollte ein Gerät um RSS-Feeds im Bus und in der Bahn lesen zu können. Bisher habe ich dafür mein N800 verwendet. Doch das Display ist mit 4,1" hierfür eigentlich zu klein und sobald die Sonne etwas heller scheint, kann man auf dem transmissiven Display nichts mehr erkennen. Also musste etwas Größeres her.
VDR Sanitizer
Der Linux VDR von Klaus Schmidinger hat mittlerweile einen Reifegrad erreicht, in dem er vielen kommerziell erhältlichen Festplattenrekordern überlegen ist. Auch Hardwareprojekte wie z. B. das AV-Board oder der Flash VDR Remote Adapter1 gehören zu den Produkten, welche für den VDR entwickelt wurden. Jedoch ist ein (aus meiner Sicht gravierendes) Manko bisher nicht beseitigt worden: Der VDR hat an bestimmter Hardware Probleme Dolby Digital Ton über die DVB-Karte auszugeben.
Disk Optimizer
Der Flash Systems Disk Optimizer ist ein Defragmentierungsprogramm für NTFS-Laufwerke. Es ordnet die Dateien auf dem Laufwerk neu an, um den Zugriff auf diese zu beschleunigen.
VDR Remote Adapter
Der Flash VDR Remote Adapter ist das erste Hardwareprojekt von Flash Systems. Mittlerweile ist das Projekt schon etliche Jahre alt, allerdings ist es als Referenz immer noch zu gebrauchen.