Rootserver mit RAID unter Debian GNU/Linux lenny

Autor: B.Sc. Inf. Dominik Schulz <lkml@ds.gauner.org>
Version: 0.1.1
Date:2010-03-10 10:05:00 +0100
Copyright: This document is released under the terms of the GNU Free Documentation License.
Status: Draft
Abstract:Dieses Dokument beschreibt die Einrichtung eines Rootservers mit Software-RAID unter Debian GNU/Linux lenny.

Inhalt

Amazon Partnerlinks

Einleitung

Dieses Tutorial soll die Einrichtung eines Rootservers mit Debian GNU/Linux auf einem Software RAID erläutern. Als Grundlage dient hierzu ein aktuelles Rootserver Modell von Hetzner. Alle anderen großen Anbieter von Rootservern sollten aber ähnliche Produkte im Angebot haben. Wichtig ist, dass Sie Zugang zu einem sog. Rescue-System haben und der Server über zwei identische Festplatten verfügt. Ob der Anbieter des Rootservers hingeben Debian oder Zusatzfunktionen wie eine serielle Konsole, o.ä. im Angebot hat spielt für dieses Tutorial keine Rolle. Zur Vereinfachung verzichte ich darauf auch das Root-Dateisystem / auf dem Software-RAID abzulegen, da an dieser Stelle der Schutz vor dem Verlust der Daten wichtiger sein soll als maximale Uptime. Ich gehe davon aus, dass im Falle eines Festplattenschadens, eine kurze Downtime des Rechners unumgänglich ist. Durch das Software-RAID soll dann allerdings ein Datenverlust verhindert werden. Bei der Nutzung des des Servers gehe ich davon aus, dass Sie einen Web- sowie einen Mailserver betreiben wollen. Natürlich kann er auch anderweitig genutzt werden, aber z.B. für einen Gameserver macht ein Software-RAID eher weniger Sinn.

Backup

Nachdem Sie sich auf Ihrem neuen Rootserver eingeloggt haben sollten Sie zunächst ein Backup des Verzeichnisses /etc erstellen. Hier liegen wichtigen Informationen zur Netzwerkonfiguration und andere Angaben die Sie später möglicherweise noch benötigen werden.

Partitionierung

Die Partitionierung der Festplatten sollte von vorneherein gut überlegt sein, da sich Änderungen später kaum noch vornehmen lassen. Ich bevorzuge ein schlanke Root-Partition für das Hostsystem und ein LVM für alle weitern Partitionen. Da ich die meisten Systeme virtualisieren bleibt das Hostsystem überschaubar und die Partitionen der virtuellen Server können dank LVM flexibel wachsen.

Ein Vorschlag zur Partitionierung:

Mount Punkt Größe Dateisystem RAID Gerät
/boot 1GB ext2   sda1/sdb1
/ 10GB ext3   sda2/sdb2
LVM Rest LVM   sda3/sdb3

Nachdem Sie sich über die gewünschte Partitionierung klar geworden sind können Sie Ihren Server in das Rescue-System starten. Diese muss bei den meisten Providern über eine Verwaltungsinterface aktiviert und der Rootserver danach mittels reboot neu gestartet werden.

Warnung

Nach dem partitionieren der Festplatten sind alle Daten die sich vorher auf der Festplatte befunden haben verloren. Denken Sie daran alles Wichtige vorher zu sichern!

cfdisk:

                                                                                        cfdisk (util-linux-ng 2.13.1.1)

                                                                                                Disk Drive: /dev/sda
                                                                                        Size: 750156374016 bytes, 750.1 GB
                                                                Heads: 255   Sectors per Track: 63   Cylinders: 91201

        Name              Flags            Part Type       FS Type                  [Label]               Size (MB)
---------------------------------------------------------------------------------------------------------------------
        sda1              Boot              Primary        Linux ext2                                       1019.94
        sda2                                Primary        Linux ext3                                      10240.48
        sda3                                Primary        Linux raid autodetect                          738893.36

        [Bootable]  [ Delete ]  [  Help  ]  [Maximize]  [ Print  ]  [  Quit  ]  [  Type  ]  [ Units  ]
        [ Write  ]

                                                                        Toggle bootable flag of the current partition

Nachdem Sie sich am Rescue-System angemeldet haben werden die Festplatten partitioniert. Dafür existieren verschiedene Programme. Ich bevorzuge cfdisk. Rufen Sie es auf und löschen Sie alle vorhandenen Partitionen. Danach können die neuen Partitionen über den Menüpunkt "New" angelegt werden. Erstellen Sie die Partitionen einfach in der Reihenfolge wie sie in der Tabelle angegeben sind. Zunächst auf Festplatte sda (bzw. hda) und danach auf sdb. Beachte Sie dabei, dass alle Partitionen über die ein Software-RAID erstellt wird die identische Größe haben sollten, da es sonst zu Problemen kommen kann. Die Partitionen sda1/sdb1 müssen das Boot-Flag erhalten sowie den Typ 83, der gleiche Typ muss für sda2/sdb2 vergeben werden. Die (optionale) Swap-Partitionen benötigen den Typ 82. Die restliche Partitionen sind für das Software-RAID und brauchen den Typ FD.

Nachdem die Festplatten partitioniert sind, dürfen Sie nicht vergessen das neuen Partitionierungsschema auf die Platte zu schreiben. Dann können die neuen nicht-RAID Partitionen auch sofort formatiert werden. Die /boot Partition mit ext2 ...

mkfs.ext2 /dev/sda1
mkfs.ext2 /dev/sdb1

... und die neue Root-Partition mit ext3.

mkfs.ext3 /dev/sda2
mkfs.ext3 /dev/sdb2

(optional) Die Swap-Partitionen formatieren und aktivieren.

mkswap /dev/sda4
mkswap /dev/sdb4
sync; sync; sync
swapon /dev/sda4
swapon /dev/sdb4

Ein Verzeichnis zum einbinden der neu formatierten Laufwerke erstellen ...

mkdir /mnt/newroot

... das RAID für / anlegen ...

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sd[ab]2

... den neuen Root / einbinden ...

mount -t ext3 /dev/md0 /mnt/newroot

... darunter ein Verzeichnis für die Boot-Partition erstellen ...

mkdir /mnt/newroot/boot

... und diese ebenfalls einbinden.

mount -t ext2 /dev/sda1 /mnt/newroot/boot

Damit es später im chroot keine Probleme gibt sollten proc und dev gemountet werden

mkdir -p /mnt/newroot/proc
mount -t proc proc /mnt/newroot/proc
/mnt/newroot/dev
mount --bind /dev /mnt/newroot/dev

Danach wird noch das Array für LVM erstellt

mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sd[ab]3

Vor einem Reboot sollte man unbedingt warten bis die RAID Verbünde synchronisiert sind. Dies kann man über die Datei /proc/mdstat verfolgen.

watch cat /proc/mdstat

Festplatte mit Zufallszahlen überschreiben:

dd if=/dev/urandom of=/dev/md1 bs=100M

Das Cryptodevice erstellen:

cryptsetup -y --cipher aes-cbc-essiv:sha256 --key-size 256 luksFormat /dev/md1

Das Cryptodevice einbinden:

crpytsetup luksOpen /dev/md1 croot

Ein Physical Volume erstellen:

pvcreate /dev/mapper/croot

Eine Volume Group anlegen:

vgcreate vg /dev/mapper/croot

Die gewünschten Logical Volumes erstellen:

lvcreate -L20G -nsrv_vserver vg

Die LVs formatieren:

mkfs.ext3 /dev/mapper/vg-srv_vserver

Die LVs mounten (optional):

mkdir -p /mnt/newroot/srv/vserver
mount -t ext3 /dev/mapper/vg-srv_vserver /mnt/newroot/srv/vserver

debootstrap

Bei debootstrap handelt es sich um ein sehr nützliches Werkzeug, das es erlaubt eine Debian System aus einem anderen, laufenden, System heraus zu installieren. Zwar ist es nicht ganz so komfortabel wie der Debian Installer, aber es erledigt alle grundlegenden Schritte. Auf den meisten Rescue-Systemen dürfte debootstrap bereits installiert sein. Ansonsten kann man es auch von Hand nachinstallieren.

cd /tmp
wget http://ftp.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.10lenny1_all.deb
ar -x debootstrap_1.0.10lenny1_all.deb
cd /
zcat /tmp/data.tar.gz | tar xv

Weitere Informationen zur Installation von debootstrap gibt es in den, sehr lesenwerten, Release Notes zu Debian.

Nachdem es installiert wurde wird das Programm mit der richtigen Architektur (z.B. i386 oder AMD64) und Release aufgerufen:

debootstrap --arch amd64 lenny /mnt/newroot http://ftp.de.debian.org/debian

Es wird eine Weile benötigen um das Debian-Grundsystem zu installieren. Wenn es seine Arbeit beendet hat wechselt man mit chroot in das neue System, stellt ggf. das Terminal korrekt ein und passt die Datei /etc/fstab an. Diese Datei enhällt die Informationen über die verfügbaren Dateisysteme und sorgt dafür, dass diese beim Startvorgang das Systems über den Befehl mount -a automatisch eingebunden werden.

LANG=C chroot /mnt/newroot /bin/bash
export TERM=xterm-color
vim /etc/fstab

Anstelle von vim können Sie natürlich einen anderen Editor Ihrer Wahl verwenden, z.B. emacs oder pico.

Der Inhalt von /etc/fstab ist hier exemplarisch aufgeführt. Sie müssen ihn ggf. für Ihr System anpassen.

# file system   mount point     type    options                 dump    pass
/dev/md0        /               ext3    defaults                0       1
/dev/sda1       /boot           ext2    ro,nosuid,nodev         0       2

In der der List der Paketquellen unter /etc/apt/sources.list sollte die Paketquelle eingetragen sein die auch von debootstrap benutzt wurde. Öffnen Sie die Datei in einem Editor und fügen Sie weitere Paketquellen hinzu. Mindestens die Adresse für Sicherheitsupdates.

rescue:/# cat /etc/apt/sources.list
deb http://ftp.de.debian.org/debian lenny main
deb http://security.debian.org/ lenny/updates main contrib non-free

Bringen Sie die Paketliste auf den neusten Stand und installieren Sie auch im neuen System mdadm und einige weitere nütliche Tools.

aptitude update
aptitude dist-upgrade
aptitude install mdadm tcpdump screen vim util-vserver vserver-debiantools

Rufen Sie tzconfig auf um die Zeitzone einzustellen. Am besten installieren Sie mit apitude install ntpdate auch noch gleich das Paket ntpdate das die Serveruhr mit der Referenzzeit abgleicht.

Netzwerk konfigurieren

Nach der Grundinstallation müssen die Netzwerkschnittstellen konfiguriert werden. Dies erfolgt unter Debian in der Datei /etc/network/interfaces. Öffnen Sie diese Datei und tragen Sie dort die Informationen ein die Sie sich vor dem Reboot gesichert haben. Wichtig ist auf keinen Fall die Konfiguration des localhost Interfaces zu vergessen.

Warnung

Netzwerkeinstellungen

Die hier gezeigten Einstellungen sind nur ein Beispiel und werden so bei Ihnen nicht funktionieren. Sie müssen in jedem Fall die Adressen für Ihr Netzwerk anpassen!

Die Datei /etc/network/interfaces

rescue:/# cat /etc/network/interfaces
# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or
# /usr/share/doc/ifupdown/examples for more information.

# Loopback device:
auto lo
iface lo inet loopback

# device: eth0
auto eth0
iface eth0 inet static
  address 88.77.66.55
  broadcast 88.77.66.54
  netmask 255.255.255.224
  gateway 88.77.66.53

# default route to access subnet
up route add -net 88.77.66.52 netmask 255.255.255.224 gw 88.77.66.53 eth0

Dann muss noch die DNS Konfiguration in /etc/resolv.conf eingestellt und die Datei /etc/hosts angelegt werden.

Die Datei /etc/resolv.conf:

nameserver 111.222.33.1
nameserver 111.222.33.2
nameserver 111.222.33.3

Die Datei /etc/hosts:

# nameserver config
# IPv4
127.0.0.1       localhost
88.77.66.55   hostname.domain.tld  hostname
#
# IPv6
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Dannach muss noch der Hostname gesetzt werden.

hostname <hostname>
echo <hostname> > /etc/hostname

Kernel installieren

Installieren Sie noch einen passenden Kernel. Die Kernel Pakete heißen unter Debian linux-image. Wenn Sie ein AMD64 System installiert haben brauchen Sie einen Kernel für amd64.

aptitude install linux-image-2.6-vserver-amd64

Bootloader einrichten

aptitude install grub
grub-install /dev/sda
update-grub

An dieser Stelle ist es bei mir wiederholt zur Fehlermeldung /dev/sda: Not found or not a block device gekommen. Wenn dieses Problem auftritt muss man die chroot-Umgebung mit exit verlassen und im Rescue-System den folgenden Befehl ausführen um Grub von dort zu installieren:

grub-install --recheck --no-floppy --root-directory=/mnt/newroot /dev/sda

Grub Fehlermeldung:

rescue:/# grub-install /dev/sda
Probing devices to guess BIOS drives. This may take a long time.
/dev/sda: Not found or not a block device.
rescue:/# exit

Installation ausserhalb des Rescue-Systems:

root@rescue ~ # grub-install --recheck --no-floppy --root-directory=/mnt/newroot /dev/sda
Probing devices to guess BIOS drives. This may take a long time.
Due to a bug in xfs_freeze, the following command might produce a segmentation
fault when /mnt/newroot/boot/grub is not in an XFS filesystem. This error is harmless and
can be ignored.
xfs_freeze: specified file ["/mnt/newroot/boot/grub"] is not on an XFS filesystem
Installation finished. No error reported.
This is the contents of the device map /mnt/newroot/boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(hd0)   /dev/sda
(hd1)   /dev/sdb

Sofern man die chroot Umgebung für die Installation von Grub verlassen hat, so sollte man nicht vergessen update-grub auszuführen nachdem man die chroot-Umgebung wieder betreten hat.

Nachdem diese Installation abgeschlossen ist wechselt man wieder in die chroot Umgebung.

LANG=C chroot /mnt/newroot /bin/bash

Root-Passwort

Vor dem Neustart muss man unbedingt noch ein root-Passwort vergeben. Dazu ist es wichtig, dass man sich sicher in der chroot Umgebung befindet.

passwd

Damit man sich auch über das Netz einloggen kann muss noch der SSH-Server installiert werden.

aptitude install openssh-server

Um in das frisch installierte System zu wechseln verlässt man den chroot und veranlasst mit reboot einen Neustart. Vorher sollte man sichergehen, dass das Rescue-System im Verwaltungsmenü des Providers deaktiviert ist.

Grundeinrichtung

Der Neustart des Systems sollte sehr schnell gehen, kann aber unter Umständen auch mal 20 Minuten in Ansruch nehmen. Soviel Zeit sollte man dem System jedenfalls geben bevor man einen Reset auslöst und wieder in das Rescue-System wechselt um auf Fehlersuche zu gehen.

Wenn alles geklappt hat meldet man sich als root am System an und sichert das System erstmal ein wenig ab. Es empfielt sich root-Logins in der Datei /etc/sshd_config abzuschalten und die Benutzung von su auf Mitglieder bestimmer Gruppen einzuschränken.

Zunächst wird dazu ein neuer, administrativer, Benutzer angelegt.

hostname:~# adduser admin
Lege Benutzer »admin« an ...
Lege neue Gruppe »admin« (1000) an ...
Lege neuen Benutzer »admin« (1000) mit Gruppe »admin« an ...
Erstelle Home-Verzeichnis »/home/admin« ...
Kopiere Dateien aus »/etc/skel« ...
Enter new UNIX password:
Retype new UNIX password:
passwd: Kennwort erfolgreich geändert
Ändere Benutzerinformationen für admin
Geben Sie einen neuen Wert an oder ENTER für den Standardwert
        Name []:
        Raumnummer []:
        Telefon geschäftlich []:
        Telefon privat []:
        Sonstiges []:
Sind die Informationen korrekt? [j/N] j

Dieser sollte dann zu allen relevanten Gruppe hinzugefügt werden.

hostname:~# addgroup wheel
Lege Gruppe »wheel« (GID 1001) an ...
Fertig.
hostname:~# usermod -G admin,adm,www-data,staff,wheel admin

Danach wird die Datei /etc/pam.d/su angepasst. Diese Datei kontrolliert wer su wie benutzen darf. Dabei wird die folgende Zeile ausgetauscht.

# auth       required   pam_wheel.so

Die neue Zeile lautet:

auth    required        pam_wheel.so    group=wheel

Damit ist es nur noch Mitgliedern der Gruppe wheel möglich mit su root zu werden. Jetzt müssen noch root Logins über ssh abgeschaltet werden. Dazu wird die Datei /etc/ssh/sshd_config geöffnet und PermitRootLogin auf no gesetzt.

PermitRootLogin no

Nun sollten auch noch die Regionaleinstellungen vorgenommen werden.

aptitude install locales
dpkg-reconfigure locales

Nach dem Aufruf von dpkg-reconfigure locales werden die zu generierenden Regionaleinstellungen abgefragt. Wählen Sie am besten das Ihrere Landessprache entsprechende, also z.B. de_DE.UTF-8, aus.

Danach kann man mit der eigentlichen Softwareinstallation beginnen. Ein paar Programme die ich meist zuerst installiere sind munin zur Serverüberwachung, dirvish zur Datensicherung und htop als moderner Ersatz für top.

aptitude install munin munin-node dirvish htop vim nload

Danksagung

Kontakt

Sie können dieses Formular nutzen um mir schnell und unkompliziert eine Nachricht zukommen zu lassen. Wenn Sie eine Antwort erwarten, dann denken Sie bitte daran eine Kontaktmöglichkeit anzugeben.



Mein Linux Blog | Rezepte mit Bild | Software Projects | Hosted by id-schulz

Valid XHTML 1.0 Transitional CSS ist valide!