Dienstag, 19. Juli 2016

HP Microserver: OS Installation

Irgendwie bin ich nie dazu gekommen, den letzten Teil der Server-Serie zu posten. Das soll nun nachgeholt werden:

Heute installieren wir das Betriebssystem: Debian natürlich – die aktuelle stabile Version AKA Jessie AKA Debian 8.

Ein CD Laufwerk hat mein Server nicht, denn im ODD Slot ist ja die SSD eingezogen. Also gibt es im Wesentlichen folgende Optionen für das Installationsmedium:
  1. CD/DVD von externem Laufwerk
  2. Vom USB-Stick
  3. Via debootstrap
  4. Via iLO Virtual Media Image
Außerdem ist zu entscheiden, ob man Tastatur und Monitor anschließen, oder über die Remote Konsole installieren möchte.

Variante 1 ist doof, denn dann muss ich erst eine CD brennen und mit dem externen Laufwerk rumhantieren. Und CDs sind soooo 90er....

Variante 2 ist meine normalerweise favorisierte Option und extrem einfach zu machen: Debian installation image runterladen (ich nehm immer netinst) und dann einfach roh auf den Stick bügeln:

$ dd if=foo/debian-netinst.iso of=/dev/sdX

Dann den Stick einfach einstecken, Server starten, los geht's.

Variante 3 ist etwas aufwändiger und eher was für embedded Systeme wie Raspberry Pi. debootstrap ist im Wesentlichen ein System, mit dem man aus einer anderen Debian Installation heraus eine Neuinstallation auf einem gemounteten Laufwerk machen kann. So hab ich mein Debian z.B. auf eine SD-Karte installiert, um den RPi zum Laufen zu bekommen. Für einen Server nicht uninterressant, denn man kommt so ohne  Keyboard und Monitor aus, aber dafür gibt es auch andere Möglichkeiten.

Variante 4 ähnelt denen in 1 und 2, nur dass das installations image nicht auf ein physikalisches Medium kopiert, sondern auf einem Webserver zur Verfügung gestellt wird und dann von dort gebootet werden kann.

Vorbereitung

Aber erstmal müssen wir ein paar grundlegende Probleme lösen:

Der Server hat zwei SATA Controller. Die SSD hängt am zweiten, der erste bedient die 4 drive bays an der Front. Leider gibt es für Debian keinen Treiber für den RAID-Controller, also Software RAID. Auch gut.

Im allwissenden Netz fand ich eine Installationsanleitung, die empfiehlt, den Controller in den AHCI Modus zu schalten (BIOS). Leider kann man dann immer noch nicht direkt von der SSD booten, da das BIOS keine Konfiguration der Boot-Präferenz bezüglich der beiden Controller bietet. Die vorgeschlagene Lösung dafür lautet, grub auf einen USB Stick, oder eine SD-Karte zu installieren, die man dann in die entsprechenden Slots auf dem Motherboard steckt. Dann bootet das System von SD-Karte, der dortige Bootloader startet das System dann von der SSD. Nicht sehr elegant. Und auch nicht unproblematisch, denn die grub Konfiguration ist eine Wissenschaft für sich...

Nach etwas Rumprobieren fand ich dann heraus, dass man die Bootreihenfolge der beiden Controller aber sehr wohl konfigurieren kann, wenn man statt AHCI den SATA Legacy Mode verwendet. Sehr gut - so machen wir das!

Also erstmal ins BIOS booten (F9 oder via iLO: Boot to System RBSU). Dort dann den Modus einstellen:
System Options 
  -> SATA Controller Options 
    -> Embedded SATA Configuration 
      -> Enable SATA Legacy Support

Als nächstes müssen wir die Bootreihenfolge festlegen:

Boot Controller Order
  -> Ctlr:2 
    -> Controller Order 1

Und

Standard Boot Order (IPL) 
  -> IPL:1  Hard Drive C:

OS Installation

Als erstes brauchen wir einen Webserver. Auf diesem stellen wir das Installations-Image per http bereit. Die URL wird dann im iLO als virtuelles Medium eingetragen:

Virtual Media
  -> Scripted Media URL 
    -> http://192.168.0.99/debian-8.5.0-amd64-netinst.iso
  -> Boot on Next Reset -> check
  -> Insert Media


Nun können wir den Server starten/rebooten. Das geht auch aus dem iLO heraus (Server Reset) - sehr cooles Gefühl ;-).

An dieser Stelle trennen sich die Wege: Wenn wir mit Tastatur und Monitor, oder der graphischen iLO remote Konsole (Java oder .NET) installieren, können wir ganz normal arbeiten. Wer's etwas nerdiger mag, der schaltet sich nun per ssh auf das iLO und startet die remote console mit dem Befehl TEXTCONS. Das funktioniert aber nicht out of the box, weil der Debian Installer gerne den VGA Modus verstellt und den Framebuffer aktiviert, womit die virtuelle serielle Konsole nicht klarkommt. Deshalb muss man beim Booten der CD sofort Esc drücken, sobald sich der Isolinux Boot prompt zeigt. Auf diese Weise gelangt man in ein Kommandozeilen-Interface in dem man die Boot-Optionen von Hand eingeben kann. Und genau das tun wir:

    install vga=normal fb=false

Diesen Tip habe ich übrigens im Debian Wiki gefunden.

Die eigentliche Installation ist dann eher unspektakulär – alles wie bei jedem anderen Computer auch. Ein Tipp allerdings: Ich installiere zunächst komplett auf der SSD, als gäbe es die großen Disks nicht. Der Installer unterstützt das komplexe Szenario nicht nach meinem Geschmack und ich richte /home inklusive RAID lieber von Hand ein.

Als nächstes bearbeite ich gewöhnlich /etc/network/interfaces und konfiguriere dort eine statische IP-Adresse. Das ist für Server erheblich angemessener, als DHCP:

iface eth0 inet static
            address 192.168.0.10
            netmask 255.255.255.0
            gateway 192.168.0.1


Nun nur noch die gewünschte Software installieren und es kann losgehen. Apropos Software – mindestens die folgenden Tools sollten an dieser Stelle installiert werden, damit man vernünftig konfigurieren kann:
  • sudo
  • vim
  • hdparm
  • mdadm
Und der verwendete non-root user sollte in /etc/sudoers angelegt werden. Von root logins rate ich grundsätzlich ab – auch unter ssh.

Software RAID einrichten

Als Erstes müssen wir mal herausbekommen, wie unsere diversen Platten heißen:

$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda           8:0    0   3.7T  0 disk  

sdb           8:16   0   3.7T  0 disk 
sdc           8:32   0 117.4G  0 disk 
|-sdc1        8:33   0 112.6G  0 part  /
|-sdc2        8:34   0     1K  0 part 
`-sdc5        8:37   0   4.8G  0 part  [SWAP]


OK - also sda und sdb sind unsere RAID-Platten. Diese partitionieren wir nun:

$ sudo fdisk /dev/sda

'g':  create a new empty GPT partition table (for disks >2TB)
'n':  create new partition (accept all defaults)
't':   change partition type to 'LINUX RAID' (21)
'w':  write changes to disk and exit:w

Und analog auch für sdb.

Bei einem RAID Server ist es ratsam, den write-cache der Platten nicht zu verwenden. Also erstmal Status checken:

$ sudo hdparm -W /dev/sda
    /dev/sda:
     write-caching =  0 (off)


Sehr gut – ist aus. Wenn nicht hilft dies:

$ sudo hdparm -W0 /dev/sda

Und natürlich analog für sdb.

Nun legen wir das RAID-System an. In meinem Fall RAID1:

$ sudo mdadm --create /dev/md0 --level=1 \
    --raid-devices=2 /dev/sda1 /dev/sdb1

Das geht recht schnell, aber die eigentliche Musik spielt im Hintergrund, denn vom User unbemerkt wird das RAID synchronisiert.  Den Fortschritt kann man so prüfen:

$ cat /proc/mdstat
    Personalities : [raid1]
    md0 : active raid1 sdb1[1] sda1[0]
          3906887488 blocks super 1.2 [2/2] [UU]
          [>....................]  resync =  0.3% (15118784/3906887488) finish=1872.7min speed=34633K/sec
          bitmap: 30/30 pages [120KB], 65536KB chunk

    unused devices: <none>


Das dauert ewig (bei mir >30 Stunden), aber man muss nicht warten bis es fertig ist.

Nun haben wir ein RAID1, aber dieses ist das Äquivalent einer rohen Platte – d.h. wir müssen noch (mindestens) eine Partition anlegen:

$ sudo fdisk /dev/md0

Und ein Filesystem kann auch nicht schaden:

$ sudo mkfs.ext4 -m 0.1 /dev/md0p1

Die Option -m legt fest, welcher Prozentsatz für root reserviert wird. Default sind 5%, was bei einer 4TB Platte einfach viel zu viel ist.

Als nächstes müssen wir das RAID einbinden, d.h. in /etc/fstab eintragen, damit es automatisch gemountet wird. Nun könnte man das Device /dev/md0p1 verwenden, doch sicherer ist es, die UUID zu verwenden. Und die findet man so:

$ sudo blkid /dev/md0p1
    /dev/md0p1: UUID="0a39c667-1947-4e97-993e-d294cedc6752"

    TYPE="ext4" PARTUUID="1ed56347-2adc-4454-8fb5-c11af8c7e1eb"

In /etc/fstab tragen wir dementsprechend ein:

UUID=0a39c667-1947-4e97-993e-d294cedc6752 /home/ ext4 errors=remount-ro 0 1

Nur noch mounten und das System ist im Wesentlichen fertig:

$ sudo mount -a


Sehr gut. Nun kann es losgehen: D.h. weitere Software je nach Anwendungsfall installieren, Daten draufspielen etc. etc.

Sonntag, 17. Juli 2016

Verflixter Wasserhahn

Grumpf!

Als ich neulich den Katzennapf auswaschen wollte hatte der Wasserhahn eine Überraschung für mich parat: Schwungvoll, wie immer drehte ich den Hahn auf und genauso schwungvoll schoss mir der Kopf des Auslaufs samt Perlator entgegen – dicht gefolgt von jeder Menge Wasser. Genau in mein Richtung. Dabei wollte ich nicht duschen, sondern nur den Napf spülen! Megagrumpf! Wie kann das passieren? Ganz einfach: Am Auslauf hat der Hahn ein drehbares Element, damit man sich leichter tut das Spülbecken zu säubern:
Bisher hatte ich mich nie gefragt, wie dieses drehbare Element sich eigentlich am Auslauf festhält.  Aus gegebenem Anlass interessiert mich die Frage nun. Wie man sieht, sind da zunächst mal zwei Dichtungsringe, damit nix tropft, aber darüber hinaus findet sich ein weißer Plastikring. Letzterer presst sich in eine Vertiefung im Auslauf und fixiert das Ganze:
Und genau dieser Ring ist einigermaßen abgenutzt, weswegen mich der Auslauf so freudig angesprungen hat. Also erstmal ausbauen und genauer studieren:

3D-Drucker zu Hilfe


Wozu habe ich einen 3D-Drucker? Das Teil muss man doch leicht duplizieren können. Also habe ich alles vermessen und die Form so gut es ging nachmodelliert:





Schnell musste ich jedoch feststellen, dass das nicht so der Königsweg war: PLA ist ein echt ein sprödes Zeug und nicht so toll für den Job geeignet. Besser ABS oder Nylon?  Vor allem aber kamen diese Submillimeter-Strukturen des Rings in der Praxis nicht gut raus. Aber braucht man die echt? Eigentlich muss der Ring sich doch nur in die passende Rille pressen und die genaue Form sollte ziemlich wurscht sein – oder?

Low-Tech Ansatz

Also mal weg von High-Tech Lösungen und kurz nachgedacht. Wenn man einfach ein Stück Nylon oder anderes Plastik mit geeigneten Maßen hätte... Zuerst dachte ich daran, ein Plastikrohr mit passendem Durchmesser zu finden und einen Ring abzusägen. Aber dann probierte ich erstmal was viel simpleres: Nylonfilament. Und das gibt's im Baumarkt, Gartencenter oder auf Ebay für kleines Geld – nur heißt es dort nicht Filament, sondern Mähfaden oder Trimmerschnur. Also dieser Faden, den eine Motorsense mit einem Affenzahn im Kreis schleudert, um wucherndes Gras und andere Gewächse in die Schranken zu weisen. In meinem Fall brauchte ich eines mit ca. 2mm Durchmesser. Auf Ebay habe ich für ein paar Euro 25 Meter davon gefunden:

Das ist genug um die Wasserhähne einer mittleren Stadt zu reparieren. 2mm sind etwas mehr, als der original-Ring hatte, d.h. man muss den Faden mit etwas Gewalt in die Rille pressen. Das ist jedoch ganz praktisch, denn so hält das Ganze ohne Klebstoff oder irgendwelche Verrenkungen:

Noch ein bisschen Silikonfett drauf (aber nur auf die schwarzen Dichtungsringe, sonst hält das nicht!) und mit etwas Nachdruck in den Auslauf drücken.
Und siehe da: Wasserhahn repariert. Anfangs war der Auslauf noch etwas schwergängig zu drehen, aber nach einer Weile hatte sich der Plastikfaden offenbar gut eingeschliffen und das Ganze fühlt sich an, wie neu.