Schicht für Schicht …

… wird das alte abgepellt und das ursprüngliche Haus kommt drunter zum Vorscheinen. Z.b. die hübschen Dielen. Im Wohnzimmer muss man nur das Linoleum zusammenrollen und den Dreck wegfegen:

In der Küche kleben ekelige Pappreste unterm Linoleum:

Im Spielzimmer Ochsenblut:

Woanders muss saniert werden:

mit kleinen Helfern geht alles schneller:

Ta-taaaaa:

Im Kinderschlafzimmer muss auch ein Brett ausgetauscht werden:

Überhaupt – der Kinderzimmerfußboden ist schon speziell. Scheinbar wurden gebrauchte Bretter verbaut, original noch mit uralten Nägeln im Holz. Die Astlöcher und Unebenheiten wurden mit Gips geglättet. Sieht ja keiner…

Dann müssen noch eine Million Nägel eingeschlagen werden. Ein schöner Job, den man besser mit Gehörschutz und Knieschoner macht.

Dann ist der große Tag gekommen und die Schleifmaschine dreht die ersten Runden:

Ubuntu auf einem Rootserver mit ZFS

Es ist mal wieder so weit: der alte Server ist zu klein, ein neuer muss her. Dieser Artikel ist ein Update zu meinem Update meiner alten Anleitung zum Setup des Rootservers.

Ein Serverumzug ist eine gute Gelegenheit, ein paar Dinge anders zu machen als bisher:

  • ZFS: die bisherige Lösung aus Raid + LVM + Dateisystem funktioniert zwar, aber das vergrößern / verkleinern der Partitionen ist doch immer eine recht spannende Angelegenheit und kann nicht immer online durchgeführt werden. Btrfs bietet noch nicht alle Features, die ich haben möchte (quotas auf FS-Ebene) und mit ZFS on Linux steht ZFS auch nativ als Kernelmodul zur Verfügung.
  • LXC statt OpenVZ: der Betrieb mit OpenVZ war nie ganz frei von Sorgen. Es ist super, dass man so viele Parameter hat und Resourcen flexibel zuweisen kann, aber speziell beim Webserver hatten wir das Gefühl, dass nie genug RAM vorhanden ist. Stößt der Server an das RAM-Limit, kommt es zu den seltsamsten Effekten, incl. Stillstand des Webserver. LXC ist im Mainline-Kernel und für unsere Zwecke gut genug, d.h. ich will Resourcen flexibel zuweisen und kann auf die höhere Sicherheit einer echten Virtualisierung verzichten.
  • nginx statt Apache: weil man es mal gemacht haben sollte 😉

Eine Sache, die sich hingegen bewährt hat, ist alle Dienste (PAM, Mail, sonstige Accounts) über LDAP abzuwickeln. Damit ist LDAP der „single point of administration and failure“, der sich besonders gut scripten lässt.

Hier also wieder die Copy & Paste Anleitung für das Setup von

Ubuntu auf einem Rootserver mit ZFS

Ich habe meinen Server bei Hetzner, aber das muss jeder selbst wissen. Als erstes bootet man ins Rescue-system und sichert den Inhalt der Datei /etc/network/interfaces:

Festplatten einrichten

Dieses Mal soll der Server mit zfs betrieben werden. Es gibt zwar diverse Anleitungen, wie man Ubuntu in ein natives Root-ZFS-Dateisysten installiert, ich wähle aber bewusst einen anderen Weg.

Im Recovery-Fall komme ich nicht an den physikalischen Server. Ich kann nur ein Rescue-System booten, das kein ZFS-Kernelmodul hat, damit würde ich nicht an das root-Dateisystem kommen.
Deswegen installiere ich das Basissystem auf einer ext4-Partition. Hier läuft lediglich der LDAP-Server und ein SSH-Server. Alle anderen Dienste laufen in LX-Containern und diese können auf dem ZFS untergebracht werden.

Der Server ist mit 2×3 TB Festplatten ausgestattet, d.h. mit einem MBR kommt man nicht sehr weit, statt dessen wird eine GUID Partition Table (GPT) eingerichtet. Neben Root, Swap, ZFS wird auch eine „BIOS boot partition“ benötigt (ein EFI-Requirement).

Der Rechner hat 32 GB Ram, also sollten 16 GB Swap genügen. Für das Root-System stelle ich 10GB bereit. Auf LVM verzichte ich bewusst um die Komplexität gering zu halten. Ich verliere damit die Möglichkeit das Basissystem über LVM-Snapshots zu sichern, den Kompromiss kann ich eingehen. Root und Swap werden aber in einem Raid-1 betrieben um einen Plattenausfall abzufangen. So sieht das gewünschte Layout aus:

Die Platte /dev/sdb wird analog eingerichtet. Jetzt ist ein guter Zeitpunkt um das System zu rebooten (wir müssen nochmal das Rescue-System auswählen), damit die neue Partitionstabelle verwendet wird.

Dann können swap und / angelegt werden:

Wichtig: --metadata=0.90 sollte unbedingt gesetzt werden, sonst kann man große Probleme mit grub bekommen.

Swap aktivieren:

Root-Dateisystem anlegen und mounten:

Jetzt können wir

Ubuntu installieren

Wir benötigen erstmal ein neueres debootstrap und installieren damit dann Ubuntu 12.04 LTS:

Die fstab muss angepasst werden:

ausserdem muss die Netzwerk-Config, die wir vorhin gesichert haben wieder gesetzt werden:

Die Spezialmounts werden noch gemountet:

Dann können wir ins System chrooten…

… und ein paar Einstellungen vornehmen. Zuerst ein neues root-Passwort:

Wir brauchen das Universe-Repository

Dann werden ein paar grundsätzliche Tools installiert:

Ausserdem wird mdadm zur Raidverwaltung benötigt. Da in Ubuntu eine Abhängigkeit zu einem MTA existiert und der default Postfix ist, installieren wir das sehr schlanke Tool SSMTP mit:

Dann brauchen wir noch einen Bootloader. Dieser wird als Abhängigkeit des Kernels installiert:

Damit die Boot-Partitionen durch die initrd auch einwandfrei gemountet werden, sollte Änderung der Datei mdadm.conf noch die initrd neu angelegt werden, z.B. durch Ausführen von

Sofern die entsprechenden Module, md bzw. raid0, raid1, noch nicht in der /etc/initramfs-tools/modules aktiviert wurden, muss dies noch erfolgen:

und anschließend das initramfs mit

aktualisiert werden.

Zum Schluss solle die Option „quiet splash“ aus /etc/default/grub entfernt werden. Die Remote-Konsole LARA bei Hetzner kommt sonst mit dem Bildschirmmodus nicht klar und man würde bei bootproblemen nichts sehen.

Dann noch grub updaten, aus dem Chroot aussteigen und rebooten.

Wenn kein Fehler aufgetreten und der Server wieder hoch gekommen ist, können wir

ZFS installieren

Für Ubuntu ist die Installation sehr einfach. Wir brauchen erstmal das Paket python-software-properties, da sonst add-apt nicht funktioniert:

Dann kann nach der Installationsanleitung verfahren werden:

Das Kernelmodul zfs.ko sollte jetzt gebaut und geladen sein. Jetzt können wir einen zpool auf dem verbleibenden Festplattenplatz anlegen.

Die Option ashift=12 sort für ein passendes Alignment. Die Namen der Festplatten müssen natürlich angepasst werden.

Der Pool ist angelegt…

…und kann jetzt mit Filesystemen bestückt werden:

Ich habe zunächst nur ein Filesystem für /home und für die Linuxcontainer angelegt. Ab hier weiss sicherlich jeder selbst am besten, wie das System organisiert wird.

Credits: Das Setup des Basissystems mit GPT hätte ich ohne die Anleitung von Mattias nicht so schnell hinbekommen.

Ofenrohr…

Du bist ein schöner Lied, Du bist ein feiner Lied, Du hast so schön geklingt, drum wird’s nochmal gesingt: 2-3-4 Ofenrohr…

20120803-010233.jpg

Held der Arbeit: Zp.: Ofenrohr im Wohnzimmer angepasst und eingemauert, den durch die Bauarbeiten in Mitleidenschaft gezogenen Fussboden im Bad saniert, überzählige Öffnungen im Schornstein im HWR zugemauert, Putzschinen drangeklebt, Kinder mit einer Mörtelwanne voller Wasser zum Matschen und Planschen glücklich gemacht.

Und sonst? T. und m. kratzen die fiesen Tapetenreste in der Küche von der Wand, m. kleistert zwei Wände mit Haftgrund voll und beginnt die Kabelkanäle mit Putz zu verschließen.

20120803-011416.jpg

Hurra, wir haben ein Bad!

Ein Hoch auf den Trockenbau. In nullkommanix haben Zp. und A. die Rigipsplatten angeschraubt:

20120801-010114.jpg

(man beachte die wunderschöne Lampenkabel-durchfädel-Vorrichtung)

Im Hauswirtschaftsraum sind jetzt auch zwei Wände und die Decke beplankt.

20120801-010554.jpg

Außerdem war heute der Telekom-Mensch da. Die Freude währte leider nicht lange. Lausige 1.9 MBit fallen aus der Leitung. Das ist ja wie vorm Krieg…
Nunja, wenigstens hat die Baustelle jetzt WLAN.

20120801-011054.jpg

Weiter geht’s

Die Wasserinstallation geht voran, prächtige Rohre haben wir. Hauptsache Zp. weiss noch welche wo hin gehört.

Der Boiler wurde mit zwei Wandhaken geliefert. Natürlich hat Zp. kein Vertrauen und holt erstmal zwei 16er Gewindestangen, die durch die ganze Wand gehen und nochmal in der Küche gesichert werden. Jetzt ist der Boiler erdbebensicher.

Papas ganzer Stolz: das größte Kind hat ganz alleine ein Stück Putz ausgebessert. Respekt!

 

 

(Mamas geheime Befürchtung: Die Flecken gehen nie wieder von den Fliesen ab.)

Lieferungen

Internet ist super. Am Sonntag Abend einen Boiler bestellt, am Dienstag steht er auf der Baustelle:

Weitere Überraschung: die Mülltonne wurde ebenfalls geliefert.

Das DSL-Modem ist auch angekommen. Am Monatsende ist Schalttermin und die Spannung steigt, wie viel Bits pro Zeiteinheit aus der Leitung fallen. Ein Blick in den Keller beruhigt, notfalls können weitere fünf Doppeladern angemietet werden um auf brauchbare Geschwindigkeiten zu kommen.

Trockenbau

Mit Malermeister A. wurde das Ständerwerk für den Trockenbau in nullkommanix an die sehr, sehr schiefen Wände geschraubt. Bevor die Rigipsplatten montiert werden, muss erstmal die Wasserinstallation vervollständigt werden.

The internet is for porn

Natürlich muss in jedes Zimmer mindestens eine Dose mit 2x Gigabit Ethernet. Auch ins Kinderzimmer und ins Bad. Diskussionen über die Sinnhaftigkeit dieses Unterfangens werden mit vernichtenden Blicken und bösartigem Sysadmin-Knurren unterbunden. Schliesslich lassen sich acht Kupferadern auch anderweitig verwenden, zum Beispiel für … äh… na uns wird schon was einfallen. Und schliesslich gibt’s bald Zahnbürsten mit Ethernet.

Dank der Abrissarbeiten hinterm Haus, hat sich ein Weg aufgetan, vom Hauswirtschaftsraum in die erste Etage zu gelangen.

Was einem vorher niemand sagt: wie man das Gewirr aus zig Lan- und Elektroleitungen in einer 10mm dünnen, bröseligen Putzschicht unterbringt.

Aber nach diversen Flüchen, viel mit dem Hammer auf den Finger hauen und diversen Flaschen Club-Mate ist es geschafft:

Im angrenzenden Arbeitszimmer setzt sich der Kabelwust fort:

Die spannende Frage ist, wie viele Kabel überlebt haben. Den Unterschied zwischen LAN-Kabel und Verlegekabel begreift man auch erst, wenn diverse Male der Biegeradius unterschritten wurde und der Hammer das Kabel statt den Nagel getroffen hat (oder der Nagel durch’s Kabel ging…).

Wie auch immer: 22 Kabelenden warten nun geduldig im Hauswirtschaftsraum auf die Ankunft des Serverschranks.

Kabelgewirr

B. war zwischendurch da und hat schon die meisten Kabel in der Wand mit einem Klecks Gips befestigt. Der ganze Stolz des Hausherren ist die 8er Dosenecke mit 3x Strom, Lautsprecher vorn, center, hinten, 2x LAN und 1x HDMI. Zum Glück steht kleiner Schrank davor, so dass Gästen der Anblick erspart bleibt.

In Ermangelung tauglicher HDMI-Dosen wurde kurzerhand ein normales Kabel mit fertig konfektionierten Steckern in die Wand gegipst. Ob es eine schlaue Idee war, das billigste no-name-Kabel von Amazon zu nehmen, wird sich rausstellen, wenn der noch zu kaufende Beamer an der Decke erstmalig ausprobiert wird.
Topchecker-M.: das Kabel über allen anderen in die Wand gelegt, so dass man es im Notfall einfach wieder rausreißen kann.

Nachmieter gesucht: 3 Zimmer in der Potsdamer City

Wir suchen ab September 2012 einen Nachmieter für unsere Wohnung in der Potsdamer Innenstadt (Charlottenstraße / Wilhelm-Staab-Straße). Die Wohnung ist super, wird uns aber mit drei Kindern langsam zu klein 🙂

Update (8.8.2012): für die Wohnung ist ein Nachmieter gefunden.

  • 73 m^2
  • 792€ Warmmiete
  • 3. Etage unterm Dach
  • 3 Zimmer, großer Flur
  • WG-tauglich
  • ruhige Innenhof-Lage
  • großer Balkon von jedem Zimmer zugänglich
  • Bad mit Fenster, Badewanne
  • optional: Tiefgaragenstellplatz im Haus (+42 Euro)
  • optional: kostenloser Internetzugang über Freifunk Potsdam

Wer Interesse hat oder jemanden kennt, der jemanden kennt, einfach Bescheid geben.

An one finger rotation gesture recognizer

Last year we developed the Raumfeld iPhone App. The goal was to build something that could replace our native controller completely. The main design feature of the native controller is the massive volume knob. Of course we wanted to have something similar in our App, so the designer created the volume screen with a big knob, as shown in the right picture.

To create a volume control, we needed a way to detect if the user performs a rotation gesture on the knob image. There is no default UIGestureRecognizer that detects such a gesture, so we had to implement a custom gesture recognizer. It was surprisingly easy – to be honest, the hardest part was to do the math right.

To track the finger movement, we need to check for every touch event, whether it is within the defined area. The gesture is rotating, so there is a center point m, the radius a which defines the minimum distance from m and the radius b which defines the maximum distance from m. Finally we need to calculate the angle ? between the startpoint and the current finger position (relative to m).

For the first check, we calculate the distance d from the center and make sure, that a < d < b is true.

The rotation angle is the angle between the two lines a and b. The arc tangent function atan() is the key:

Ok, that was the hard part 🙂 To implement a custom gesture recognizer, let’s have a look at the UIGestureRecognizer API docs, especially the subclassing notes. We just need to overwrite five methods

The key is touchMoved:withEvent: This method checks the distance of the touch event from the center point. If the touch is within the valid area, the angle between the start point and the current touch position is calculated. The result is sent to the delegate object of our class.

target needs to implement some kind of protocol to allow the gesture recognizer notification of movements:

And that’s the whole magic. To use the gesture recognizer, create an image of a rotating control and add a gesture recognizer to your view:

As soon as a gesture is detected, the delegate method is called and you can rotate the image according to the angle:

I’ve created a sample project on github, feel free to play with. Also make sure to read Ole Begemanns article about the UX details on gesture recognition.

Namensschilder für Polizisten: potentiell tödliche Waffen!!!1!!

Nein, ernsthaft. Wenn jetzt alle Polizisten in Berlin ein Namensschild tragen, kann jeder dahergelaufene Gelegenheitsmörder dem Polizisten das Namensschild entreißen und damit ein Massaker anrichten. Bodo Pfalzgraf, Vorsitzender der deutschen Polizeigewerkschaft demonstriert die von den Namensschildern ausgehende Gefahr an einem Eisbein.

Die Plastikteile könnten den Polizisten entrissen und als lebensbedrohliche Waffe eingesetzt werden.

Große Sprüche auch von Rainer Wendt:

Die Zwangskennzeichnung ist ein gigantischer Misstrauensbeweis in unsere Polizei“, sagt Rainer Wendt, Bundesvorsitzender der Gewerkschaft. Das Vertrauensverhältnis der Bürger in die Polizei sei hervorragend, die individuelle Kennzeichnung daher überflüssig.

Richtig! Es ist ja noch NIE vorgekommen, dass die Polizei versehentlich Demonstranten mit verprügelt hat. Nie! NIE! Ehrenwort! Die Leidtragenden sind letztendlich die armen Polizisten:

Einige Kollegen hätten sich beim Anschnallen im Auto an den Kanten in den Arm geritzt.

Ich muss mir erstmal ein Taschentuch holen… schnüff..

Huch, schon August?

Oh, es ist ja Camp. Und gutes Wetter… Wir haben erstmal einen Graben gezogen, in der Hoffnung, dass das Zelt nicht absäuft.
Sehr cool: schon mit Kind 1 ein Throwie (LED + Batterie + Magnet) gebastelt und morgen für den Raketenworkshop angemeldet. Noch keinen Vortrag gesehen, aber dabei sein ist alles 🙂

Pages: <<< 1 2 3 4 5 6 7 8 ... 94 95 96 >>>