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
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.
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.
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
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.
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
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
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
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.
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
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.