Arch Linux Tux

[ENC]BladeXP's Blog

Was die Welt nicht alles braucht!


Docker Startoptionen mit systemd ändern

2014-11-25 21:32 | categories: arch debian linux software ubuntu

In letzter Zeit habe ich, sofern etwas freie Zeit vorhanden war, etwas mit Docker experimentiert. Das Resultat meiner Experimente soll aber nicht Inhalt dieses Artikels sein, sondern eher der mögliche Einfluss von systemd als Init System.

Die System Units liegen wenn man systemd verwendet unterhalb von /usr/lib/systemd/system, im Falle vom Docker Unit wäre dies folgender Inhalt:

[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target docker.socket
Requires=docker.socket

[Service]
ExecStart=/usr/bin/docker -d -H fd://
LimitNOFILE=1048576
LimitNPROC=1048576

[Install]
WantedBy=multi-user.target
Dies findet man im oben genannten Verzeichnis in der Datei docker.service.

Da ich gerne LVM für alle möglichen Anwendungen verwende, möchte ich natürlich auch das Docker mein LVM für seine Experimente verwendet. Hierzu müssen Docker beim Start ein paar zusätzliche Parameter mit auf den Weg gegeben werden. Bei einem klassischen Init System würde man an dieser Stelle einfach, aber unschön, das Init Script anpassen und so einen Konflikt mit der Paketverwaltung provozieren. Mit systemd haben wir die Möglichkeit gezielt einzelne Bestandteile eines Unit Files zu überschreiben. In meinem Fall war hierzu die Datei /etc/systemd/system/docker.service.d/10-dockerstartup.conf erforderlich, mit folgendem Inhalt:

[Service]
ExecStart=
ExecStart=/usr/bin/docker -d -H fd:// --storage-driver=devicemapper\
  --storage-opt dm.datadev=/dev/main/docker\
  --storage-opt dm.metadatadev=/dev/main/dockermeta

Offensichtlich ist also das ein Verzeichnis docker.service.d im /etc/systemd/system Verzeichnis ein Unit docker.service aus dem Systemordner /usr/lib/systemd/system überschreiben bzw. verändern kann. Dieses Verhalten ist auch in der Manpage systemd.unit dokumentiert.

Zusätzlich lernen wir auch noch etwas Wichtiges aus der Manpage systemd.service. Dort wird nämlich erklärt das bei Service Units welche einen anderen Typ als oneshot haben, zuerst die Befehlsliste mit ExecStart= geleert werden muss, um einen anderen Befehl zur Ausführung zu verwenden. Der Hintergrund ist das es z.B. bei oneshot Units möglich ist durch ein weiteres StartExec beim überladen weitere Befehle zur Ausführung zu definieren.

Die Alternative zu diesem Konstrukt wäre ein "Environment File" gewesen, ich halte es aber für hässlich, Konfiguration von Startparametern zusätzlich außerhalb der Units zu haben. Übrigens kann mit dem Befehl systemd-delta angezeigt werden, welche Units erweitert oder überschrieben wurden.


Wo sind die OpenVPN Logs bei systemd zu finden?

2014-10-22 16:03 | categories: arch debian linux software ubuntu

Mit dem Artikel „Wo sind die OpenVPN Logs zu finden?“, welcher heute durch den (ubuntuusers.de) Planet gerauscht ist, wurde ich wieder auf ein tolles Problem vom klassischen syslog aufmerksam gemacht: Es gibt keine Verknüpfung von einem Dienst zu einem Logfile, diese entsteht erst, wenn man der Anwendung mitteilt, ihre Logs in ein spezifisches Log zu schreiben.

Die Frage vom Autor kann unter Verwendung von systemd und dem dort enthaltenen Journal wie folgt beantwortet werden:

sudo journalctl -u openvpn@server
Eine Anpassung der Konfiguration oder umständliches durchsuchen von /var/log kann entfallen. Nicht vorhandene zusätzliche Logfiles müssen auch nicht rotiert werden ;)


Linux Software-RAID Metadaten

2014-10-14 17:40 | categories: arch debian homeserver linux software ubuntu

Linux Software-RAID ist eine gerne verwendete Lösung, um auf die schnelle ein RAID System an dem einen oder anderem Server zu realisieren. In den meisten Fällen funktioniert dies auch einfach so, doch lästige moderne Systeme haben durch zunehmend dynamischere Hardware (USB, SATA, …) und stetige Verbesserungen am Init Prozess (z.B. Upstart, systemd) ein großartiges Potential sich bei der beliebten Kombination RAID und LVM in den Fuß zu schießen.

Doch auch andere Kombinationen sind möglich, genau genommen jede Option, bei welcher eine Anwendung oder ein Systembestandteil pauschal alle Block Devices nach einem bestimmten Header durchsucht. Auf einem RAID System können genau diese Header, in exakt gleicher Form, nämlich auf mehreren Block Devices zur gleichen Zeit vorhanden sein. Problematisch ist dies vor allem bei RAID1, aber ich gehe davon aus das auch andere RAID-Level hier Probleme bereiten könnten.

Um das Problem zu verstehen, muss man dessen Ursache kennen, daher ein kleiner Überblick über die gängigen RAID Metadatenversionen:

0.90
Dabei handelt es sich um das nach wie vor oft verwendete, aber inoffiziell als PITA bezeichnete Metadatenversion. Limitierungen sind u.a. maximal 2TB bei einem RAID-Level größer oder gleich 1 und zusätzlich die Limitierung auf maximal 28 Geräte im Verbund, welche weniger problematisch sein sollte. Dummerweise ist bei dieser Metadatenversion je nach Partitionierung auch nicht definiert ob sich ein RAID Verbund über die gesamte Platte oder nur einen Teil davon (Partition) erstreckt.
1.0
Das neue Metadatenformat, hier liegt der RAID Header genauso wie beim 0.90er Format am Ende der Partition/Platte. Die Bugs aus 0.90 wurden hierbei gefixt und es gibt auch einen Satz neue Features welche in der Manpage erläutert werden.
1.1
Wie 1.0, jedoch liegt der RAID Header hier nicht am Ende, sondern am Anfang einer Partition/Platte.
1.2
Wie 1.0, jedoch liegt der RAID Header hier nicht am Ende der Platte/Partition, sondern 4KB nach dem Startsektor derselben.

Das PITA (0.90) Format möchten wir wirklich nicht mehr einsetzen, aber die anderen Versionen klingen doch sehr verlockend. Aufpassen muss man hier aber bei der Wahl der Version, den einzig 1.1 sorgt dafür das am Anfang der Partition der RAID Header ist. Dadurch erkennen die meisten Tools welche ihre Header ebenfalls am Start der Partition/Platte erwarten dort keinen eigenen Header mehr und kommen nicht auf die blöde Idee diesen zu verwenden.

Durch eine ungünstige Situation (z.B. eine Race Condition) kann es z.B. beim Startvorgang vorkommen das so /dev/sda1 in eine LVM Volume Group aufgenommen wird obwohl nur wenig später das richtige Block Device, nämlich /dev/md0 zu Verfügung stehen würde. Der Schutz durch das RAID besteht so ggf. nicht, im schlimmsten Fall überschreiben sich das Software-RAID und LVM gegenseitig die Daten, ein großartiges Szenario.

Beobachten konnte ich das recht theoretische Problem bisher 2-3x auf meinem Homeserver, durch viele Schutzmaßnahmen ist aber nichts passiert, mal davon abgesehen das die gängige LVM Befehle auf einmal jammerten, dass keine PVs verfügbar wären, obwohl das System schon seit Wochen stabil läuft. Beobachten konnte ich ebenfalls das dieses Problem nur auftritt wenn der lvmetad verwendet wird, dies ist z.B. bei Arch Linux der Fall. Ich gehe auch davon aus das dieses LVM spezifische Problem eher dort zu suchen ist, unabhängig davon gibt es neben LVM noch einige andere Dinge die gerne mal Metadaten am Anfang der Partition/Platte suchen, durch die Wahl der richtigen Metadatenversion können hier schon beim erstellen des RAIDs potentielle Probleme vermieden werden.


Wacom Bamboo Pen fixen

2014-10-12 09:00 | categories: arch debian hardware linux software ubuntu

Seit einiger Zeit verfüge ich ja über ein Grafiktablet vom Typ Wacom Bamboo Pen. Dieses hab eich schon etwas länger nicht mehr benutzt, und durch ein neuliches Update auf eine neuere Version des X-Servers wollte dies nur noch als Mausersatz, nicht aber als Grafiktablet funktionieren.

Durch die Meldungen im Journal bin ich darauf aufmerksam geworden das sich wohl evdev spontan dazu entschieden hat sich um mein Grafiktablet zu kümmern, eine Entscheidung, welche dieser Treiber ohne meine Zustimmung getroffen hat!

Der evdev Treiber bekommt hier unter Arch Linux seine Konfiguration über die Datei /etc/X11/xorg.conf.d/10-evdev.conf. Dort wird, für eine reihe typischer Eingabegeräte, ein sog. Catchall eingerichtet, also eine Regel, die für alle Geräte einer bestimmten Klasse greift. Nachfolgende Regeln müssen daher durch ein # am Anfang der Zeile deaktiviert werden:

Section "InputClass"
        Identifier "evdev tablet catchall"
        MatchIsTablet "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

Section "InputClass"
        Identifier "evdev touchscreen catchall"
        MatchIsTouchscreen "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection
Hintergrund ist, dass so ein Wacom neben der Nutzung als Grafiktablet auch als Mausersatz taugen könnte, das wollen wir nicht, wir haben ja schließlich nicht umsonst den Wacom Treiber xf86-input-wacom installiert. Die Änderungen an dieser Datei greifen übrigens erst nach einem Neustart des X-Servers.


Be A Sheep

2014-10-04 13:05 | categories: allgemeines android arch debian linux software ubuntu windows

Keine Angst, ich werde jetzt nicht Anfangen mit Fremdsprachen in meinem Blog zu experimentieren. Aber ich möchte gerne etwas auf Be a Sheep eingehen, natürlich aus technischer Sicht, von Biologie habe ich zu wenig Ahnung.

Jens hat im Forum von ubuntuusers.de ein paar tolle Ansätze in einem ausgezeichneten Beitrag erläutert. Der Themenersteller hatte hier einige, teilweise berechtigte, Bedenken wegen Maßnahmen zum Fingerprinting einiger Kommunikationsanbieter.

Einen Fingerabdruck kennen wir, egal ob neuer Personalausweis, Reisepass oder eine Ermittlung der Polizei. Als Steigerung gibt es noch den genetischen Fingerabdruck, dieser wird auf Basis unseres einmaligen genetischen Profils erstellt. Doch beide Varianten des Fingerabdrucks sind auch mit möglichen Fehlern belastet, beim genetischen Fingerabdruck kann es sich z.B. um einen Zwilling handeln oder um den Patienten einer Knochenmarkstransplantation. Die oft geforderten 100% Sicherheit gibt es auch mit diesem Verfahren nicht.

Für viele gilt eine IP-Adresse als Fingerabdruck, eine Spur, die an jedem "Tatort" hinterlassen wird und unweigerlich auf meine Person schließen lässt. Doch in Wahrheit kann man mit einer IP-Adresse bestenfalls den Eigentümer eines Gerätes, in der Regel sogar nur den Anschlussinhaber, ermitteln. Zusätzlich ändern sich in Zeiten von Zwangstrennung (IPv4), NAT (IPv4) und Privacy Extensions (IPv6) diese Adressen auch ständig. Eine IP-Adresse ist damit nach heutigem Standard für viele Anwendungen ungeeignet, wobei hier Gerichtsurteile oft noch an der technisch bedingten Realität scheitern.

Zusätzlich zur IP-Adresse generiert bzw. versendet unsere moderne Software, meist der Browser unserer Wahl, viele weitere Informationen. Dazu gehören unter anderem bevorzugte Sprachen, installierte Plugins, Betriebssystem und natürlich die jeweiligen Versionsinformationen. Als Sahnehäubchen gibt es noch einen ordentlich Satz Cookies, DOM Storage und Flash Supercookies. Je mehr und genauer Informationen durch meine Software versendet werden, desto besser kann ich zweifelsfrei von der breiten, mehr oder weniger anonymen, Masse unterschieden werden. Die meisten dieser Informationen sind unabhängig von einer IP-Adresse, niemand arbeitet gerne mit sich ständig verändernden Informationen. Mit einem Login beim Dienst unserer Wahl können all diese Informationen definitiv mit einer bestimmten Person, genauer einem Account, verknüpft werden.

Doch nur sehr große Anbieter, wie Facebook, Twitter oder Google, sind in der Lage durch eine sehr breit angelegte Datensammlung und ständige Nutzung brauchbare Informationen und Verknüpfungen zu erzeugen. Die breite Masse der Dienste ist zu klein und unbedeutend, was die Quantität und Qualität der entstandenen Profile schmälert. Allgegenwärtige Like Buttons und omnipräsente Werbenetzwerke der wenigen großen Provider ermöglichen eine gigantische Datensammlung.

Durch eine intelligente Kombination aus Firefox und den teilweise umstrittenen Addons Adblock Plus und Ghostery wird unser Profil weniger umfangreich und aussagekräftig ausfallen. Je unschärfer unser Profil wird, desto mehr Schaf sind wird auch. Und wir alle wissen, dass nur die Schwarzen Schafe in der Masse auffallen.

Auf der anderen Seite muss man aber auch aufpassen nicht durch zu viel Individualisierung ein neues, vielleicht sogar noch besseres, Profil zu erstellen. Hier ist ein wenig gesunder Menschenverstand gefragt, den es geht hier primär um Werbenetzwerke und nicht um Geheimdienste.

Zum Abschluss noch ein paar kleine Hinweise, wie man ein besseres Schaf bzw. unbrauchbareres Profil wird:

  • Nutze Firefox als Browser, andere verfügen zwar oft über Adblock Implementierungen aber nur selten über eine wirksame API, um vor Cookies zu schützen.
  • Adblock Plus, Adblock Edge, oder von mir aus auch eine andere Implementierung eines Werbeblockers sollte bis auf sehr wenige Ausnahmen stets aktiv sein.
  • Ghostery hilft gegen Zählpixel und gängige Cookies, wichtig ist hier ein automatische Library Update, um auch gegen neue Maßnahmen wirkungsvoll geschützt zu werden.
  • Informationen die nicht in dein normales Profil einfließen sollten gehört in den Private Mode vom Browser, den was mit dem Private Mode passiert, bleibt auch dort ;)
  • Nutze, falls möglich, die Suchmaschine der Seite und nicht eine externe Suche wie Google. Natürlich ist eine site:domain.tld bla Suche bei Google sehr bequem, aber zusätzlich zum Anbieter (z.B. Amazon) informierst du hier auch Google über dein neues Hobby.
Mit diesen, wenigen, Tipps wird dein Profil bei den meisten Anbietern deutlich weniger aussagekräftig. Für die Netzwerke bist du nur noch einer dieser vielen Menschen die Adblock liegen und Cookies hassen, aber nur noch nach einem aktiven Login bei den großen Diensten auch ein identifizierbares Individuum. Zum Abschluss möchte ich noch darum, bitten den oben verlinkten Beitrag von Jens auch vollständig durchzulesen.