Gesucht: Agile Softwareentwickler

Wir sind der Meinung, dass agile Softwareentwickler bei MeinAuto.de einen Arbeitsplatz haben, an dem sie ihr Potential voll ausschöpfen können. Und wir sind der Meinung, dass agile Softwareentwickler nicht mit drögen, nichtssagenden Stellenanzeigen abgespeist werden sollten. Daher ist unsere Anzeige ein wenig “anders”:

Dein Arbeitsumfeld bei MeinAuto.de

Softwareentwicklung und Produktmanagement bei MeinAuto befinden sich in einer spannenden und herausfordernden Umbruchsphase, die engagierten Entwicklern die Chance bietet ein Umfeld mitzugestalten, das die Prinzipien und Praktiken von agiler Softwareentwicklung, basierend auf Scrum und eXtreme Programming, ernsthaft lebt und weiterentwickelt.

Die Softwareentwicklung ist die Stelle im Unternehmen, an der Produktideen Realität werden. Aber dies ist nicht unsere einzige Rolle. Als agile Softwareentwickler begreifen wir uns als konstruktive, aber auch fordernde und kritische Partner des Product Owners. Das heißt: wir liefern Ergebnisse und Antworten, aber wir stellen auch Fragen: Ist diese User Story wirklich verstanden? Gibt es eine intelligentere Lösung? Passt eine Anforderung zur übergeordneten Produktvision?

Wir begreifen uns als Craftsmen, das bedeutet: Wir nehmen unsere Profession ernst. Wir weisen Anforderungen ab, die nicht durchdacht sind. Wir bringen keinen relevanten Code live, der nicht durch Tests abgedeckt ist. Wir kommunizieren nur Aufwandsabschätzungen, die wir sicher halten können. Wir entwickeln im Pair Programming. Wir bereiten einen Sprint optimal vor, ziehen ihn diszipliniert durch, und schließen ihn sauber ab. Wir sammeln keine Bugs, wir beheben sie umgehend.

Wir brauchen Menschen, die nicht nur ein Rädchen im Getriebe sein möchten, sondern die eigenverantwortlich, selbstorganisiert und äußerst produktiv arbeiten wollen und können.

Deine Aufgaben

  • Du unterstützt zusammen mit deinem Team den Product Owner bei der Erarbeitung von sinnvollen und konstruktiven Anforderungen
  • Diese Anforderungen setzt du gemeinsam mit deinem Team testgetrieben und mittels Pair Programming um
  • Gemeinsam mit allen Entwicklern und Administratoren arbeitest du mit an Design und Optimierung der Software- und Systemarchitektur
  • Du beteiligst dich an der kontinuierlichen Verbesserung unserer internen Entwicklungsumgebung
  • Du bringst dich mit deinem Wissen und deinem Feedback ein, um unseren agilen Entwicklungsprozess stetig zu optimieren

Dein Profil

  • Ausgiebige praktische Erfahrung in der objektorientierten Softwareentwicklung, entweder in Python, PHP, Ruby, Java oder C++
  • Hohe Ansprüche und Disziplin in Hinblick auf Clean Code und testgetriebene Entwicklung
  • Sehr gute Kenntnisse im Design von relationalen Datenbankstrukturen, mit Fokus auf optimaler Performance
  • Sattelfest im Umgang mit der Linuxkonsole und den zentralen Komponenten eines LAMP Stacks
  • Ehrliches Interesse an einem Blick über den Tellerrand. Jedes Teammitglied ist, mit unterschiedlichen Schwerpunkten, zuständig für die gesamte Plattform von der GUI bis zum Betriebssystem
  • Absolut tadellose Kommunikations- und Teamfähigkeiten, denn nur so können agile Softwareentwicklung und Scrum ihre Stärken entfalten

Unser Angebot

  • Festanstellung mit Perspektive und Entwicklungspotential
  • Fachliche und persönliche Weiterentwicklung durch regelmäßige Feedbackgespräche, Wissensaustauch und Weiterbildungen
  • Angenehme und positive Arbeitsatmosphäre mit flexiblen Arbeitszeiten
  • Sehr dynamisches, sich schnell entwickelndes Unternehmen
  • Koffein in allen Varianten von Latte Macchiato bis tiefschwarzen Filterkaffee
  • Verkehrsgünstiger Arbeitsplatz (direkt am Bahnhof Köln West, KVB-Anschluss Linie 3, 4, 5)

Deine Bewerbung

Gerne beantworten wir Deine Fragen per E-Mail oder telefonisch unter 0221 29 28 31-141. Wir freuen uns, wenn deine Bewerbung neben den “üblichen” Unterlagen auch auf eventuelle Open Source Projekte verweist, oder vielleicht hast du ja einen StackOverflow Account, der erwähnenswert ist.

Interessiert? Dann sende bitte Deine vollständige Bewerbung per E-Mail an itjobs512@meinauto.de oder per Post an:

MeinAuto GmbH
Frau Miriam Rieck
Personalabteilung
Venloer Straße 151-153
50672 Köln

Kurzes Video zum Holtzbrinck Technology Day 2013 in Berlin

Unsere Software-Entwickler Kris und Ingo waren beim gestrigen Holtzbrinck Technology Day 2013 in Berlin. Bereits heute gibt es ein schönes Video mit kurzen Zusammenschnitten:

Schnell in die Buchläden…

Ein Gastbeitrag von Sebastian Müller, Leiter Marketing, MeinAuto GmbH:

Endlich Klarheit! Vorlesen, Fischöl und Kindergärten steigern den IQ von Kindern nachhaltig – ohne störende Nebeneffekte auf die erfolgreich verödete emotionale Intelligenz
 
 
Bald haben hysterische Eltern Weiland, Thalia und Mayersche leergekauft. Amazon fährt bereits den Notfallplan2. Weihnachten“ hoch.
 
Greenpeace forciert jetzt schon Studien, die den Omega3-Gehalt von Fischen kleinrechnen, um einer konsequenten Leerfischung aller Gewässer durch riesige Fangflotten mit Vater-Sohn-Anglergespannen inklusive vorlesender Mütter (Anglerlatein für hochbegabte Nachwuchsgoethes) vorzubeugen. Der Trend, den Fisch direkt vom Haken zu verspeisen (wenn der Fisch noch kalt ist, sind die Fettsäuren besonders antioxidant und permutativ) hat in der WHO bereits zu einer neuen Taskforce zum menschlichen Befall mit Fischwürmern geführt.
 
Die deutsche Regierung hat angekündigt, den unbeschränkten Zugang unserer Nation zu fischreichen Gewässern und allen bekannten Druckerzeugnissen auf der Welt auch am Hindukusch, an der türkisch-syrischen Grenze und bald auch im für seine forellenreichen Seen und eloquenten Haiku-Dichter bekannten Mali weiter zu verteidigen. Darüber hinaus wird das Land der Dichter und Denker umgehend ein neues imperialistisches Entwicklungshilfeprogramm auflegen: Nach der Wiederindienststellung der noch vorhandenen Ju52-Geschwader wird der Leseraum im Osten wie auch das marode Albion aus der Luft mit Romanen von Hera Lind und Rosamunde Pilcher zwangsversorgt (ugs. „suhrkampisiert“).
 
Ich selbst werde jetzt meinen eigenen – durch frühes Vorlesen meiner Mutter und aller Tanten und Onkel gleichzeitig bereits ins Unermessliche trainierten IQ – durch den späten Nachholbesuch einer Krabbelgruppe sowie eine Abführkur mit Lebertran noch mal um locker 14 Punkte steigern.
 
Dann hau ich in den Sack und mache einen Kleinkind-Vorlese-Kindergarten mit Omega3-FS-Ernährungsprogramm auf. Den Kindern wird dort überall und zu jeder Gelegenheit vorgelesen.
 
Sie werden konsequent von der Hand der Eltern direkt an einen speziell trainierten Voicecoach übergeben, der ihnen auf dem Weg zur Tür die intellektuelle Dehnungsübung mit Grimms Märchen (rückwärts vorgelesen, wahlweise mit der Stimme von Tom Hanks) verpasst.
 
Nach dem Frühstück (Waltranpellets (ohne Gelatine) als Suppe und Fischöl als Heißgetränk) und dem obligatorischen Ohrenspülen mit Gletscherwasser aus Tibet (GoGreen-Transport der Post) wird ein kurzes intensives Readout-Programm absolviert:
 
In je 3-Minuten-Einheiten (ab 3 Jahre 10 Minuten) werden Kants Kritik der praktischen Vernunft, Euklids Elemente und je nach politischer Ausrichtung der Eltern Marxens Kapital, die Memoiren Kohls oder die Autobiografie von Heinz Guderian mit hoher Vorlesegeschwindigkeit durchtrainiert.
 
In den 10sekündigen Pausen wird als Entspannung von den Bewohnern eines Altersheim (Demenzvorbeugung, Integrativer Ansatz, Generationenvertrag) Schillers Glocke im Kanon aufgesagt. Danach gibt es zum Mittag Walsteak (artgerecht aufgewachsen!) oder Tümmlerragout, jeweils mit einer Soße aus Rapsöl (kaltgepresst und auf ohne Einsatz von Mineralölen gerodeten Urwaldflächen angebaut).
 
Für Eltern, die Wert auf eine von Großcousinen der wichtigsten DAX-Aufsichtsräte empfohlene 6-sprachige Erziehung legen, gibt es das neue Multichannel-Reading: Das gleichzeitige Vorlesen von Tageszeitungen aus 12 verschiedenen Sprachregionen – auf Wunsch auch mit 6 chinesischen Dialekten und westsibirischer Mundart für die berufliche Zukunft. Um einem attavistischen Fluchtverhalten der Kinder vorzubeugen, werden sie in speziellen Vorlesestühlen mit bionisch optimierten Hörverstärkern fixiert. Die kleinen Narben der Verschraubung an den Schläfen werden später ein dezentes, aber sichtbares Symbol der hyperelitären Erziehung sein.
 
Für musische Eltern, deren Mozart-Babybauchbeschallung-Strategie ja nun endgültig als gescheitert gilt, habe ich das Spezialprogramm „Vorlesen der geheimen Brahm’schen Notenblättern“ aufgelegt. Wahlweise gibt es auch die Bedienungsanleitung favorisierter Musikinstrumente oder die Memoiren des unbekannten Geigenrestaurators.
 
Wenn ich keine Lust mehr habe, das ganze Erziehungsgeld (angereichert mit einer leckeren Herdprämie) zu zählen, werde ich mich dem wichtigen Feld der Erwachsenen-Nachbildung widmen. Denn das kann man in jedem Alter machen.
 
Die Konzepte
 
„You’ll never grow up: Babyschwimmen für Führungskräfte ab 50“
 
Räumliches Denken aus neuen Perspektiven: Krabbelgruppe für arbeitslose Ingenieure“
 
Hör doch auch mal zu: Kinder lesen gescheiterten Buchautoren vor“
 
sind bereits so gut wie umgesetzt.
 
Später lasse ich von mindestens 50 Ghostwritern wichtige Sachbücher verfassen. Das erste: „Vorlesen als Mitschuld – die Verbrechen der Eltern von mindestens 20 Erzbösewichten und Jakob Augstein“.

Das war der Code Retreat 2012

Code Retreat Panorama

Am Samstag, dem 8. Dezember 2012, hat das MeinAuto.de IT Team eingeladen zur Kölner Ausgabe des Global Day of Code Retreat 2012.

Wie muss man sich den Tag vorstellen? Zusammengefunden hatten sich die Software-Entwickler der MeinAuto GmbH sowie sieben externe Gäste, um einen Tag lang frei von jeglichen Deadlines testgetriebene Softwareentwicklung zu trainieren. Nach einem gemeinsamen Frühstück wurde der Ablauf vorgestellt: Der Tag war unterteilt in 6 Sessions von je 45 Minuten, plus 15 Minuten Retrospektive nach jeder Session.

Foto

Das Ziel: In jeder Session von Neuem beginnen mit der Implementation von Conway’s Game of Life, testgetrieben und im Pair Programming – und daran zu lernen, wie man sauberen Code schreibt.

“Sauberer Code” war hierbei definiert als derjenige Code, der die von Kent Beck formulierten 4 Bedingungen für Simple Design: Er besteht alle Tests, er drückt klar aus, was er beabsichtigt, er enthält keinerlei Redundanz, und er besteht nur aus den absolut notwendigen Modulen, Klassen und Methoden.

Die wirklich interessante Regel aber war: Nach jeder Session wird sofort sämtlicher erzeugter Code vollständig gelöscht – eine durchaus erst einmal verwirrende Regel, die aber Sinn machte; sie hat allen Beteiligten den Druck genommen, irgend etwas “fertig” bekommen zu müssen. Denn das ist nicht das Ziel des Code Retreats – das Ziel ist das Lernen.

Weiterhin wurden für jede Session die Pairs neu gemischt, so dass jeder die Chance hatte, jeden anderen (und dessen Programmiersprache) kennenzulernen.

Angestrengtes Nachdenken beim Global Day of Coderetreat 2012

Ein bedeutender Spaßfaktor entstand zusätzlich durch die sogenannten “Activities”. Beispielsweise durften die Paare, bei denen einer den Test schrieb und der andere die Implementation, in einer der Sessions nicht miteinander sprechen – Kommunikation war lediglich mittels Code erlaubt. In einer anderen Runde musste dann an einer Implementation gearbeitet werden, ohne Entscheidungskonstrukte wie if oder switch zu benutzen.

Jede der Activities hat den Fokus auf einen anderen Aspekt von testgetriebener Softwareentwicklung und einfachem Design gelegt; daraus entstand echter Erkenntnisgewinn für den Arbeitsalltag.

Eine Wiederholung im kommenden Jahr ist bereits fest vorgenommen!

Erste Infomail zum Global Day of Code Retreat in Köln

Dies Mail haben wir soeben an die Teilnehmer des diesjährigen Global Day of Code Retreat in Köln versandt. Zur Info: Es gibt noch Wartelistenplätze, siehe http://coderetreat2012cologne.eventbrite.com/

Hallo,

dies hier ist die erste Infomail zur Vorbereitung auf den Global Day of Code Retreat am Samstag, dem 8. Dezember 2012 bei der MeinAuto GmbH in Köln.

Es sind noch 20 Tage bis zum Veranstaltungstag, und es freut mich euch mitteilen zu können, dass bereits alle 20 Plätze komplett ausgebucht sind. Eine volle und damit lebendige Veranstaltung ist also garantiert!

Ich möchte euch im Vorfeld mit den wichtigsten Informationen versorgen und euch eine grobe Idee davon vermitteln, wie der Tag strukturiert sein wird. Vorab: Meine Kolleginnen Christin und Miriam übernehmen den Part der Hosts, das bedeutet, sie managen die Veranstaltung im Wesentlichen, stellen also sicher, dass wir einen optimalen Veranstaltungsort haben, an dem es unter anderem im Sinne des leiblichen Wohls an nichts mangelt. Ich selbst übernehme die Rolle des Faciliators, das heißt, ich führe euch durch die Code Retreat Übungen.

Beginnen wir mit den wichtigsten Eckdaten:

Datum:
Samstag, 8. Dezember 2012

Uhrzeit:
Von 8 Uhr morgens bis 18 Uhr abends, mitteleuropäische Standardzeit

Ort:
MeinAuto GmbH
Venloer Straße 151-153
50672 Köln
http://goo.gl/maps/jmGcb

(Weitere Angaben zum exakten Veranstaltungsraum werdet ihr vor Ort in Form von Wegweisern vorfinden)

Zur Erinnerung: Diese Veranstaltung ist für euch in jeglicher Hinsicht komplett kostenlos!

Das müsst ihr sonst noch wissen:

  • Für Getränke und Essen ist den gesamten Tag über gesorgt
  • Eine WLAN-Verbindung steht zur Verfügung
  • Bequeme Tische und Stühle sind ausreichend vorhanden
  • Aber: Um teilzunehmen, müsst ihr eure eigene Hard- und Software mitbringen!

    Ein hinreichendes Setup könnte man definieren als dasjenige, welches euch erlaubt, ohne weitere Hard- oder Software lauffähigen Code in einer Programmiersprache eurer Wahl testgetrieben zu entwickeln.

    Etwas weniger sperrig formuliert: Ihr braucht euren Laptop, einen Editor, und eine Umgebung, in der ihr den im Editor produzierten Code laufen lassen könnt.

Wie läuft so ein Code Retreat eigentlich ab?

  • Die Teilnehmer treffen morgens um 8 Uhr ein, es gibt Snacks und Getränke, und wir begrüßen die Runde
  • Die Teilnehmer nehmen ihre Plätze ein und stellen sicher, das sie programmierbereit sind
  • Der Faciliator stellt Idee und Prinzipien des Code Retreat und die erste Aufgabe vor
  • Inhaltlich beschäftigen sich sämtliche Aufgaben des Tages mit Conway’s Game of Life – eine Einführung zu diesem Thema findet ihr hier: http://coderetreat.org/gol
  • Die Teilnehmer beginnen im Pair Programming und testgetrieben mit der ersten Aufgabe.
  • Nach 45 Minuten beendet der Faciliator die erste Runde, und es folgt eine Retrospektive.
  • Dieses Muster – Vorstellung der Aufgabe, Arbeit an der Aufgabe, Retrospektive – wird über den gesamten Tag wiederholt, unterbrochen von einer Mittagspause mit warmer Mahlzeit sowie Snacks am Nachmittag
  • Der Faciliator wird jede neue Aufgabe zusätzlich mit einer Activity anreichern – diese könnte zum Beispiel lauten, dass in den nächsten 45 Minuten keinerlei if, for oder while Konstrukte benutzt werden dürfen – lasst euch einfach überraschen :-)
  • Zum Abschluß lassen wir den Tag bei einer kühlen Flasche Bier und einem Plausch unter Nerds ausklingen

Und sonst?

    • Um sicherzustellen, dass kein Platz leer bleibt, der von jemandem auf der Warteliste hätte genutzt werden können, werde ich euch am 6. Dezember noch einmal anschreiben und um eine kurze Bestätigung eurer Teilnahme bitten – bleibt diese aus, wird der nichtbestätigte Platz an jemanden auf der Warteliste vergeben
    • Alle wichtigen Informationen werdet ihr in jedem Fall vor der Veranstaltung per Mail erhalten, ihr könnt darüber hinaus aber auf das MeinAuto Dev Blog unter http://devblog.meinauto.de/ im Auge behalten, oder unserem Twitter Account unter https://twitter.com/MeinAutoDev folgen
    • Das Hashtag für die Veranstaltung ist #gdcr, gerne auch kombiniert mit #cologne.

Wir, alle, also Miriam, Christin und ich, sowie das gesamte MeinAuto.de IT Team, welches natürlich ebenfalls am Code Retreat teilnehmen wird, freuen uns sehr auf diesen Tag – lasst ihn uns gemeinsam zu einem großartigen Erlebnis machen!

Software-RAIDs unter Linux mittels md

Über das md Modul (“Multiple Device driver”) verfügt der Linux-Kernel bereits seit geraumer Zeit über einen äußerst soliden Treiber, um rein softwaregesteuerte Festplatten-RAIDs zu konstruieren.

Diese Software-RAIDs bringen zwar nicht die Performance eines dedizierten hochwertigen Hardware-RAID-Controllers mit, sind aber definitiv mehr als eine Notlösung. Die Benchmarks am Ende des Artikels zeigen, dass sich zumindest für ein strukturell einfaches RAID1-Setup keine praktisch relevanten Performanceeinbußen messen lassen.

Im folgenden wird beschrieben, wie man ein Software-RAID1 unter Ubuntu 12.04 LTS Precise Pangolin aufbauen und betreiben kann.

Als Beispiel gehen wir davon aus, dass das Betriebssystem unter /dev/sda1 liegt, mit einer swap Partition unter /dev/sda2. Das System verfügt über zwei weitere, bisher unbenutzte Festplatten, die als /dev/sdb und /dev/sdc verfügbar sind. Über beide Platten soll ein RAID1 gebildet werden. Die Schritte sind nun wie folgt:

  • Anlegen von je einer Linux RAID Partition auf beiden ungenutzten Platten
  • Aufbau einer virtuellen Partition /dev/md0 als RAID1 über die neuen Partitionen
  • Formatierung der virtuellen RAID Partition mit einem Dateisystem
  • Mounten der virtuellen Partition
  • Erzeugen einer permanenten Konfiguration für das erzeugte RAID Setup

Virtuelle Software-RAIDs werden über zwei oder mehr Partitionen physikalischer Platten angelegt. Diese Partitionen müssen von einem bestimmten Typ sein (“Linux raid autodetect”). Angelegt werden können sie beispielsweise mit cfdisk. In unserem Szenario reicht es völlig, nur eine primäre Partition /dev/sdb1 anzulegen, welche die gesamte Festplatte beansprucht, und ihr den Typ “Linux raid autodetect” (Typcode: fd) zuzuweisen.

Das Ergebnis sähe dann wie folgt aus:


cfdisk (util-linux 2.20.1)

Disk Drive: /dev/sdb
Size: 320072933376 bytes, 320.0 GB
Heads: 255 Sectors per Track: 63 Cylinders: 38913

Name Flags Part Type FS Type [Label] Size (MB)
------------------------------------------------------------------
sdb1 Primary Linux raid autodetect 316067.03

/dev/sdc muss nun genau identisch strukturiert werden, ein Schritt, der sich sehr elegant abkürzen lässt:

sfdisk -d /dev/sdb | sfdisk /dev/sdc

Nun haben wir zwei Partitionen auf zwei unterschiedlichen physikalischen Festplatten, und können somit das Software-RAID aufbauen. Dies geschieht mittels mdadm:

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1

Danach steht dem System eine neue (virtuelle) Festplatte /dev/md0 zur Verfügung. Diese bildet unser RAID1 ab.

Den RAID-Status kann man mittels cat /proc/mdstat einsehen – zu Beginn muss md die RAID1-Spiegelung noch synchronisieren, das sieht dann in etwa so aus:


Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[2] sdc1[0]
8384448 blocks super 1.2 [2/1] [U_]
[>....................] recovery = 3.1% (260608/8384448) finish=2.0min speed=65152K/sec

Sobald dieser Vorgang abgeschlossen ist, das RAID1 also im “Normalbetrieb” ist, wird der Status wie folgt ausgegeben:


Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[1] sdc1[0]
8384448 blocks super 1.2 [2/2] [UU]

Einsatzbereit ist das virtuelle Volume aber sofort, das bedeutet, wir können unmittelbar nach dessen Erzeugung ein Dateisystem darauf anlegen…


mkfs.ext4 /dev/md0

…und es dann auch umgehend mounten und nutzen:


mount /dev/md0 /mnt

Einige wenige Handgriffe sind noch notwendig, damit das RAID Volume auch nach einem Neustart wieder eingebunden wird, man muss einerseits die /etc/fstab erweitern:


# <file system> <mount point> <type> <options> <dump> <pass>
/dev/md0       /mnt            ext4    errors=remount-ro  0       1

…und damit das System auch dann hochfährt, wenn eine der am RAID beteiligten Platten ausgefallen ist (irgendwie ja der Witz eines RAIDs), muss auf Ubuntu-Systemen die Datei ”/etc/initramfs-tools/conf.d/mdadm” um den Eintrag BOOT_DEGRADED=true erweitert und dann mit sudo update-initramfs -u die initrd neu gebaut werden. Bei nicht-Ubuntu Systemen kann man denselben Effekt erreichen, indem man die grub Konfiguration um den Kernelparameter bootdegraded=true erweitert.

Und wie schnell ist das Ganze nun? Folgender (aus dem hervorragenden KVM Buch von Ralf Spenneberg und Michael Kofler geklaute) Benchmark:


#!/bin/bash
mkdir test1
tar xjf kernel.tar.bz2 -C test1
for i in $(seq 2 10); do
cp -a test1 test$i
find test$i -type f | xargs md5sum > /dev/null
done
diff test1 test2
rm -rf test*
sync

bei dem “kernel.tar.bz2″ der aktuelle Linuxkernel ist, bringt folgendes Ergebnis auf einer normalen nicht-RAID Partition:


real 1m31.016s
user 0m20.293s
sys 0m18.081s

und auf einer RAID1-Partition, bei der die darunterliegenden Platten gleicher Bauart sind:


real 1m6.894s
user 0m20.261s
sys 0m18.069s

Das kann sich meiner Meinung nach sehen lassen.

KVM Gäste über WLAN ins Netz bringen

Folgende Situation: Ihr habt einen KVM-Host, auf dem mehrere virtuelle Maschinen laufen. Diese sind alle mit einer Bridge verbunden, die auf dem Host eingerichtet wurde, wobei eth0 ein Teil dieser Bridge ist:

~# brctl show
bridge name	bridge id		STP enabled	interfaces
lan0		8000.dc0ea1540a0e	no		eth0
							vnet0
							vnet1

Soweit, so gewöhnlich. Was aber, wenn der Zugang zum Internet auf dem Host nicht über eth0 erfolgt, sondern über eine WLAN-Verbindung? In diesem Fall kommen die KVM-Gäste über die Bridge zwar an alle Hosts, die entweder Teil der Bridge sind oder an eth0 hängen, sie gelangen aber nicht ins Internet.

Dazu müssen nämlich Pakete, die aus der Bridge kommen, und für ein Netz bestimmt sind, das nicht auf der Bridge liegt, weitergeleitet werden. Und genau dieses Forwarding kann man mit normalen Linux Bordmitteln einrichten.

In unserem Beispiel haben wir folgende Konstellation:

  • Der KVM Host ist über wlan0 mit dem WLAN verbunden und hat auf diesem Interface die 10.10.10.11
  • Das default Gateway des KVM Host ist die 10.10.10.1, worüber dieser bereits ins Internet gelangt
  • Er hat eine Bridge lan0, zu der auch eth0 gehört. Die Bridge hat die IP 192.168.1.22
  • Es gibt einen KVM Gast, dessen eth0 an vnet0 hängt und die IP 192.168.1.33 hat
  • Zuerst einmal müssen wir grundsätzlich IP Forwarding auf dem KVM Host aktivieren:

    sysctl -w net.ipv4.ip_forward=1

    Dann sorgen wir dafür, dass sämtliche Pakete aus dem Interface lan0, die nicht für das Netzwerk 192.168.1.0/24 bestimmt sind, an das Interface wlan0 weitergeleitet werden:

    iptables -A FORWARD -o wlan0 \
    -i lan0 \
    -s 192.168.1.0/24 \
    ! -d 192.168.1.0/24 \
    -m conntrack --ctstate NEW -j ACCEPT

    Alle bereits etablierten Verbindungen werden dann weitergeleitet:

    iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

    Und zu guter Letzt wird auf der ausgehenden Schnittstelle NAT aktiviert und somit Anfragen aus dem 192.168.1.0er Netz maskiert, da sonst die Pakete aus diesem Netz mit einer 192.168.1.0er Quell-IP-Adresse ins Internet gelangen würden und nicht beantwortet werden können:

    iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

    Nun muss man auf den KVM-Gästen lediglich noch den KVM-Host als default Gateway eintragen (was vermutlich eh schon der Fall war), und schon gelingt von diesen die Verbindung ins Internet über die WLAN Verbindung des Hosts:


    route add default gw 192.168.1.22

Direktes mounten eines KVM RAW Images

Ich habe ein mir weitgehend unbekanntes RAW Image eines KVM-Gastes, und möchte auf die darin vorhandenen Partitionen direkt zugreifen, d.h. ich will sie auf dem KVM Host einmounten.

Dies geht mit folgendem Kommando:

mount -t ext4 -o loop,offset=OFFSET /var/lib/libvirt/images/foo.raw /mnt

Das Problem ist der Offset – es ist eine Byte-Angabe die dem Mount-Befehl sagt, an welcher Stelle in der RAW Datei die Partition beginnt. Diese Zahl muss man zuerst ermitteln. Hierbei hilft das Tool kpartx, welches unter Ubuntu im gleichnamigen Paket verfügbar ist.

Der Aufruf von

kpartx -l /var/lib/libvirt/images/foo.raw

liefert eine Auflistung der Partionen:


loop0p1 : 0 15955968 /dev/loop0 2048
loop0p2 : 0 815106 /dev/loop0 15960062
loop0p5 : 0 815104 /dev/dm-1 2

Die Zahl in der letzten Spalte, also bei loop0p1 die 2048, ist die Blocknummer, an der diese Partition beginnt. Die Blocksize ist üblicherweise 512 Byte, daher müssen wir Mount mitteilen, dass die Partition bei Byte

2048 x 512 = 1048576

startet:

mount -t ext4 -o loop,offset=1048576 /var/lib/libvirt/images/foo.raw /mnt

Bash: Zeit sparen in der Shell

Bash ist eine wundervolle Sache, falls es mal schnell gehen muss. Doch dann kommt der Blick in den Cron Job und Du willst schnell noch Logs wegschreiben, Nachrichten raushauen, Parameter und Optionen anhängen.

Da kommt libui wie gerufen. Die kleine Funktionssammlung bringt alles mit um genau das zu tun.

Zunächst clonen wir das Repository von github und richten die Library auf unserem System ein:

make install

Danach kann libui folgendermassen eingebunden werden:

#!/bin/bash

source /usr/lib/libui.sh
ask_yesno 'bist du sicher?' || return
libui_sh_init cli /tmp /tmp/yourlogfile
log '.. und wir wissen was du beim letzten Cron Start getan hast'

Wer noch etwas nachhelfen will, kann sich noch das aktuelle Verzeichnis und das TEMPDIr ranziehen:

#!/bin/bash

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
TMP_FOLDER=${TMPDIR-/tmp}

source /usr/lib/libui.sh
ask_yesno 'bist du sicher?' || return
libui_sh_init cli ${TMP_FOLDER} ${TMP_FOLDER}/yourlogfile
log '.. und wir wissen was du beim letzten Cron Start getan hast'

Ein praktischer Bash-Werkzeugkasten

Ich habe vor kurzem angefangen, einen Werkzeugkasten für die Bash zu bauen, den ich auf alle Maschinen, auf denen ich arbeite, mitnehmen kann.

Letztlich handelt es sich um eine einfache Sammlung von “dotfiles”, also Dingen wie .bashrc oder meiner Vim-Konfiguration in .vim. Diese pflege ich in einem GitHub Repository, welches ich auf einer neuen Maschine dann einfach nur noch nach /home/manuel/dotfiles klonen muss. Das darin vorhandene Skript install.sh muss ich dann einmalig ausführen, wodurch alle dotfiles, die im Repository vorliegen, die entsprechenden Dateien im Homeverzeichnis ersetzen (indem ein symbolischer Link von z.B. ~/.bashrc auf ~/dotfiles/.bashrc erzeugt wird).

Bisher ist der Werkzeugkasten noch recht überschaubar, hier ein paar Beispiele:

Das Alias search ermöglicht es, schnell und einfach das aktuelle Verzeichnis nach einem Text zu durchsuchen: search foo. Es führt ein rekursives und case-insensitives grep aus.

Meine gesamte Vim Konfiguration ist enthalten, allen voran das Solarized Farbschema, ohne das ein Leben definitiv nicht möglich ist.

Mein Bash Prompt hat das Format:

12:27:53 manuel@lifebook:~/dotfiles$

Die Vorteile: Dank der Farben sehe ich immer sofort, wo in einem gut gefüllten Terminalfenster der Output eines Befehls aufhört und der des nächsten anfängt, ich habe immer die Zeit im Blick, und zusätzlich kann ich grob erkennen, wie lange ein Befehl gelaufen ist.

Alltags-Hacks

Eine wunderbare visuelle Aufstellung nützlicher kleiner Alltags-Hacks.

(via mnowiasz)

Follow

Bekomme jeden neuen Artikel in deinen Posteingang.