Veraltet
Stand des Artikels ist 2009.
Die folgende Anleitung beschreibt die Installation eines Root-Servers mit dem neuesten (2009) Debian Release "Lenny". Der Root-Server ist - wenn man den richtigen Kernel einsetzt - gleichzeitig auch als Xen- oder VServer nutzbar, d.h. man kann mehrere virtuelle Linux Server (auch unterschiedliche Distributionen) installieren. Die einzige Voraussetzung ist, dass der Server mehrere IP-Adressen hat.
BACKUP!!!
Auch wenn einem die vorinstallierte Software eines Root-Servers nicht zusagt, sollte man in jedem Fall das /etc - Verzeichnis packen und auf den lokalen PC retten. Es enthält nämlich wichtige Informationen, z.B. über die Netzwerkkonfiguration, Gateways, Nameserver usw. Diese Informationen sollten auch auf dem rescue-System vorhanden sein, aber man weiß ja nie.
Disks partitionieren
Die Partitionierung eines Linux Servers muss gut durchdacht werden, denn sie ist nachträglich nur schwierig zu korrigieren.
Folgende grundsätzliche Konfiguration hat sich bewährt:
- die Partitionen des Host-Systems werden im ext3 Format angelegt, nicht mit LVM. Man kann so sichergehen, dass man diese Partitionen gegebenenfalls vom rescue-System aus auch wieder reparieren oder mounten kann, da jedes rescue-System ext3-Utilities zur Verfügung stellt.
- die swap-Partition wird auf der zweiten Disk (falls vorhanden) angelegt. Das bringt eine geringfügig bessere Performance, wenn die Systemdaten auf der ersten Platte liegen.
- der gesamte restliche Plattenplatz wird als LVM Partition(en) angelegt.
Die vorgeschlagenen Werte sollten ggf. an die eigenen Anforderungen angepasst werden. Es gibt mehrere gute Gründe, warum man für u.a. directories jeweils ein eigenes file system verwenden sollte:
- die /tmp und /var Partition lassen sich dann mit dem noexec Bit mounten. Das verhindert, dass Angreifer über eventuelle Sicherheitslücken eigene executables hochladen und ausführen können.
- ein gewisser Schutz gegen "disk full" Probleme. Falls durch zu große Logdateien das /var Directory vollläuft, kann man sich wenigstens noch manuell einloggen. Ist /tmp oder / komplett voll, gibt es echte Probleme.
Mount Point | Größe | Device |
---|---|---|
/ | 2 GByte | /dev/sda6 |
/boot | 64 MByte | /dev/sda5 |
/tmp | 512 MByte | /dev/sda7 |
/usr | 2 GByte | /dev/sda8 |
/var | 4 GByte | /dev/sda9 |
/home | nach Bedarf | (LVM) |
swap | 1-4 GByte | /dev/sdb1 |
Partitionen werden mit fdisk angelegt. Da mehr als vier Partitionen auf der ersten Platte genutzt werden, ist die erste Partition eine 'extended' Partition, und die Datei Systeme liegen auf logical partitions. Nach Erstellung der Partitionierung erfolgt die Formatierung im ext3 Format, dazu ist die -j Option von mke2fs zu verwenden.
Hier die Ausgabe von fdisk (die eigentliche Partitionierung wird interaktiv mit dem "n" command durchgeführt und ist hier nicht explizit aufgeführt).
rescue:~# fdisk /dev/sda Command (m for help): p Disk /dev/sda: 320.0 GB, 320072933376 bytes 255 heads, 63 sectors/track, 38913 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 1 38913 312568641 5 Extended /dev/sda5 1 8 64197 83 Linux /dev/sda6 9 259 2016126 83 Linux /dev/sda7 260 322 506016 83 Linux /dev/sda8 323 573 2016126 83 Linux /dev/sda9 574 1074 4024251 83 Linux /dev/sda10 1075 38913 303941736 8e Linux LVM Command (m for help): q rescue:~# fdisk /dev/sdb Command (m for help): p Disk /dev/sdb: 320.0 GB, 320072933376 bytes 255 heads, 63 sectors/track, 38913 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 1 512 4112608+ 83 Linux /dev/sdb2 513 38913 308456032+ 83 Linux Command (m for help): q rescue:~# for i in 5 6 7 8 9; do mke2fs -j /dev/sda$i; done .... rescue:~# mkswap /dev/sdb1
debootstrap installieren
debootstrap ist ein Debian Programm, mit dem man eine Auswahl von Debian Standarddistributionen vollständig über's Netz installieren kann. Im allgemeinen steht debootstrap in einem Rescue-System nicht zur Verfügung, man muss es also zunächst erstmal dort installieren. Und falls es vorhanden sein sollte, ist es möglicherweise auch nicht das neueste Release.
Falls das Rescue-System ebenfalls ein Debian-Linux enthält, kann man es leicht mit apt-get install debootstrap
installieren.
Für alle anderen Linux-Distributionen muss man die debootstrap-binaries manuell installieren. Das geht wie folgt:
Zunächst einmal das Debian - Package holen: http://packages.debian.org/stable/debootstrap. Wir kopieren die deb-Datei mit wget, entpacken es und kopieren den Inhalt manuell ins rescue-System (letzteres sollte man normalerweise nicht so machen, aber das rescue-System ist ohnehin auf einer Ramdisk). Darauf achten, dass man die neueste Version kopiert, u.a. Link mit Versionsnummer ist möglicherweise veraltet.
rescue:~# wget http://ftp.de.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.13_all.deb rescue:~# ar xv debootstrap_1.0.3_all.deb x - debian-binary x - control.tar.gz x - data.tar.gz rescue:~# tar xvfz data.tar.gz -C / ./ ./usr/ ./usr/sbin/ ./usr/sbin/debootstrap ./usr/share/ ./usr/share/man/ ./usr/share/man/man8/ ...
Falls das rescue-System kein wget, ftp oder dergleichen zur Verfügung stellt (ist mir bei einem Hetzner Server mal passiert), kann man Dateien mit folgendem Trick von einem anderen Server auf das rescue-System kopieren:
cat data.tar.gz | ssh [IP-Adresse] 'cat > data.tar.gz'
Neues Debian System installieren
Zuerst muss man die neuen file systems mounten. Danach kann man debootstrap aufrufen und nach wenigen Sekunden ist das gewünschte Debian Release installiert. Das neue Debian 5.0 hat den Codenamen "lenny", das ältere Release 4.0 den Codenamen "etch".
rescue:/# mount /dev/sda6 /mnt rescue:/# mkdir /mnt/boot /mnt/tmp /mnt/usr /mnt/var rescue:/# mount /dev/sda5 /mnt/boot rescue:/# mount /dev/sda7 /mnt/tmp rescue:/# mount /dev/sda8 /mnt/usr rescue:/# mount /dev/sda9 /mnt/var rescue:/# debootstrap --arch=386 lenny /mnt ftp://ftp.de.debian.org/debian/ I: Retrieving Release I: Retrieving Packages I: Validating Packages ... I: Configuring ... I: Base system installed successfully. rescue:/#
Das Grundsystem ist nun installiert.
Um ein 64-Bit-System zu installieren, muss man --arch=amd64
auswählen (übrigens auch, wenn man eine Intel-CPU hat). Das funktioniert aber nur dann, wenn das gerade aktive System ebenfalls unter 64 Bit läuft, sonst läuft debootstrap
nicht korrekt durch. Der Einsatz eines 64-Bit-Systems lohnt nur in bestimmten Einsatzfällen, siehe dazu den Artikel 32 oder 64 Bit Image bei Athlon64 im "RootForum".
Netzwerkkonfiguration
Die Netzwerkkonfiguration ist für jeden Server und für jeden Anbieter etwas anders. Deswegen können hier nur allgemeine Hinweise stehen.
Man benötigt in jedem Fall folgende Informationen:
- IP Adresse
- Netzwerkmaske
- Broadcast Maske
- Gateway Adresse
- Nameserver Adresse
Die korrekte Konfiguration findet man in jedem Fall in den Konfigurationsdateien des ausgelieferten Servers (bevor die Platten neu formatiert hat, siehe Warnung weiter oben), diese Dateien sollte man also tunlichst vorher sichern. Im rescue-System kann man sie aber auch wie folgt auslesen:
rescue:/# ifconfig eth0 Link encap:Ethernet HWaddr 00:E0:4C:12:34:56 inet addr:123.123.97.87 Bcast:123.123.97.95 Mask:255.255.255.224 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:55366 errors:0 dropped:0 overruns:0 frame:0 TX packets:27934 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:71811572 (68.4 MiB) TX bytes:2453978 (2.3 MiB) Interrupt:11 Base address:0xe000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:28 errors:0 dropped:0 overruns:0 frame:0 TX packets:28 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:2172 (2.1 KiB) TX bytes:2172 (2.1 KiB) rescue:/# netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 123.123.97.64 0.0.0.0 255.255.255.224 U 0 0 0 eth0 0.0.0.0 123.123.97.65 0.0.0.0 UG 0 0 0 eth0 rescue:/# cat /etc/resolv.conf search nameserver 123.123.99.99 nameserver 123.123.98.98 nameserver 123.123.100.100
Diese Werte müssen in die Datei /mnt/etc/network/interfaces wie folgt eingetragen werden:
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 123.123.97.87 broadcast 123.123.97.95 netmask 255.255.255.224 gateway 123.123.97.65
Der Name des neuen Servers steht in /mnt/etc/hostname:
server03
Auch die Datei /mnt/etc/hosts muss initialisiert werden:
127.0.0.1 localhost 123.123.97.87 server03
Die Konfiguration des Resolvers steht in /etc/resolv.conf. Es reicht meistens, die vorhandene Datei aus dem rescue-System zu kopieren:
cp /etc/resolv.conf /mnt/etc/resolv.conf
Damit wäre die Netzwerkkonfiguration abgeschlossen.
Dateisysteme
In der Datei /mnt/etc/fstab steht die Zuordnung der Partitionen zu den file systems.
proc /proc proc defaults /dev/sda6 / ext3 noatime 0 1 /dev/sda5 /boot ext3 noatime,nodev,nosuid 0 2 /dev/sda7 /tmp ext3 noatime,nodev,nosuid,noexec 0 2 /dev/sda8 /usr ext3 noatime,nodev 0 2 /dev/sda9 /var ext3 noatime,nodev,nosuid,noexec 0 2 /dev/sdb1 swap swap sw
Die Option "noatime" bewirkt, dass bei Lesezugriffen die Access-Time nicht zurück auf die Platte geschrieben wird. Man spart so ein wenig Disk Performance, und die Access-Time braucht man meistens sowieso nicht.
Weitere nützliche Optionen sind:
- nodev - verhindert, dass böswillige User selbst devices (analog zu /dev/sda) anlegen und über diesen Umweg Schreib-/Lesezugriff auf die Dateisysteme erhalten
- nosuid - verhindert, dass beim Starten eines Executables das SetUID Flag ausgewertet wird. Mit diesem Flag könnte ein unberechtigter User Root-Rechte bekommen
noexec - verhindert das Ausführen von Executables allgemein. Wichtig für /tmp, da in diesem Directory jeder User Schreibrechte hat. So kann man verhindern, dass ein User unerwünschte executables auf den Server kopiert und ausführt.
Achtung
Bei diesen Optionen muss man darauf achten, dass manche Programme legitimerweise an unüblichen Stellen devices anlegen oder executables ausführen. Das verbreitete Debian Package Programm "dselect" will z.B. unter /var während der Installation von Paketen Skripte ausführen, also ist die "noexec" Option für die /var Partition ungeeignet bzw. man muss die Option vor Aufruf von dselect temporär wieder auf exec setzen (mount -o remount,exec /dev/sda9).
Beim Einsatz als VServer Host liegen die Gast-Partitionen unter /var/lib/vservers. Diese Partitionen sind eigenständige Linux-Installationen, die u.a. auch devices enthalten.
Weitere wichtige Pakete installieren
Zuletzt muss noch der SSH Daemon (aus irgendeinem Grund ist sshd in der Basiskonfiguration nicht als Default vorgesehen) sowie der gewünschte Kernel und ein Bootloader installiert werden. Dazu mounten wir /mnt/proc sowie /mnt/dev (diese werden von zahlreichen Programmen zwingend benötigt) und wechseln dann mit "chroot" in das frisch installierte Debian System.
Mit apt-get install holt man sich die benötigten Pakete. Bei der Installation gibt es unter Umständen einige Fehlermeldungen, die ignoriert werden können.
rescue:/# mount -o bind /dev /mnt/dev rescue:/# mount -t devpts none /mnt/dev/pts rescue:/# mount -t proc none /mnt/proc rescue:/# chroot /mnt rescue:/# mkdir /boot/grub rescue:/# apt-get install ssh grub .... rescue:/#
Zum Schluss noch ein sehr wichtiger Schritt..... nämlich das Root-Passwort. Wird gerne vergessen und man merkt es erst dann, wenn man den neuen Server gebootet hat und nicht reinkommt.
rescue:/# passwd Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully rescue:/# exit rescue:/# reboot
Linux Kernel installieren
Der Linux Kernel ist das Programm, welches unmittelbar nach Systemstart ausgeführt wird. Es stellt im wesentlichen den Zugriff auf die Hardware zur Verfügung (Netzwerkkarte, Festplatten usw.) und verteilt die CPU Rechenzeit auf die einzelnen Userprogramme.
Jede Linux Distribution enthält eine Reihe fertig konfigurierter Kernel. Sie unterscheiden sich durch die Kernel-Version, die enthaltenen Hardwaretreiber, eventuelle Patches sowie den Prozessor, für den der Kernel compiliert wurde.
Eine Linux Distribution soll natürlich auf möglichst vielen unterschiedlichen PCs lauffähig sein und möglichst viele zusätzliche Hardware unterstützen. Ein Root-Server dagegen hat nur die unbedingt erforderlichen Hardwarekomponenten, die über die Betriebsdauer auch nicht verändert werden. Die in einem Standard-Kernel zusätzlich enthaltene Software kostet sowohl wertvolle RAM- als auch Plattenkapazität. Unter Umständen ist so ein Kernel auch etwas langsamer.
Daher lohnt es sich, sich für seinen Rootserver einen maßgeschneiderten Kernel zu erstellen. Man konfiguriert sich nur die nötigen Treiber, optimiert für die CPU des Rootservers und erhält so einen kleinen und schnellen Kernel. Wie man das macht, ist im Kapitel "Kernel" in Installation der Linux-VServer Software beschrieben.
Alternativ (oder um überhaupt erstmal den Root-Server ans Laufen zu kriegen) kann man natürlich auch einen fertigen Kernel verwenden.
Unter Debian macht man folgendes, um die zur Verfügung stehenden Kernel anzuzeigen:
rescue:/# apt-cache search linux-image ... linux-image-2.6-486 - Linux 2.6 image on x86 linux-image-2.6-686 - Linux 2.6 image on PPro/Celeron/PII/PIII/P4 linux-image-2.6-686-bigmem - Linux 2.6 image on PPro/Celeron/PII/PIII/P4 linux-image-2.6-amd64 - Linux 2.6 image on AMD64 linux-image-2.6-k7 - Linux 2.6 image on AMD K7 - transition package linux-image-2.6-openvz-686 - Linux 2.6 image on PPro/Celeron/PII/PIII/P4, OpenVZ support linux-image-2.6-vserver-686 - Linux 2.6 image on PPro/Celeron/PII/PIII/P4, Linux-VServer support linux-image-2.6-vserver-686-bigmem - Linux 2.6 image on PPro/Celeron/PII/PIII/P4, Linux-VServer support linux-image-2.6-xen-686 - Linux 2.6 image on i686, oldstyle Xen support linux-image-2.6.26-2-486 - Linux 2.6.26 image on x86 linux-image-2.6.26-2-686 - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4 linux-image-2.6.26-2-686-bigmem - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4 linux-image-2.6.26-2-amd64 - Linux 2.6.26 image on AMD64 linux-image-2.6.26-2-openvz-686 - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4, OpenVZ support linux-image-2.6.26-2-vserver-686 - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4, Linux-VServer support linux-image-2.6.26-2-vserver-686-bigmem - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4, Linux-VServer support linux-image-2.6.26-2-xen-686 - Linux 2.6.26 image on i686, oldstyle Xen support linux-image-486 - Linux image on x86 linux-image-686 - Linux image on PPro/Celeron/PII/PIII/P4 linux-image-686-bigmem - Linux image on PPro/Celeron/PII/PIII/P4 linux-image-amd64 - Linux image on AMD64 linux-image-k7 - Linux image on AMD K7 - transition package linux-image-openvz-686 - Linux image on PPro/Celeron/PII/PIII/P4, OpenVZ support linux-image-vserver-686 - Linux image on PPro/Celeron/PII/PIII/P4, Linux-VServer support linux-image-vserver-686-bigmem - Linux image on PPro/Celeron/PII/PIII/P4, Linux-VServer support linux-image-xen-686 - Linux image on i686, oldstyle Xen support rescue:/#
Wenn man den CPU-Typ kennt, wählt man die entsprechende Variante aus. Die Variante "686" sollte auf jedem moderneren Hardware funktionieren. Für ein AMD System sollte "K7" gewählt werden.
Also:
apt-get install linux-image-vserver-686
GRUB konfigurieren
Grub ist der Standard Linux Bootloader. Mit dem Script update-grub
generiert man automatisch die Konfigurationsdatei /boot/grub/menu.lst
, und mit grub-install
wird der Bootblock auf die Platte geschrieben. Grub bootet auch eventuell auf der Platte vorhandene Windows- oder andere Linux-Versionen.
update-grub grub-install --recheck /dev/sda
Debugging
Nach dem Reboot und ein paar Sekunden Wartezeit sollte man sich nun erneut über SSH einloggen können. Interessant wird es natürlich, wenn der Server sich nicht meldet und auch nicht auf ein Ping reagiert. Dann muss man wieder das rescue-System aktivieren, manuell die Dateisysteme mounten und die Einträge in /mnt/var/log untersuchen.
- Gibt es überhaupt keine Daten (auf Datum und Uhrzeit achten), ist vermutlich der Kernel nicht korrekt konfiguriert. Mögliche Probleme sind falsche CPU, falscher Chipsatz oder SATA nicht konfiguriert. Oder es ist irgend was anderes. Wenn die Ursache nicht einzukreisen ist, muss man halt den Original-Kernel verwenden.
- Falls Einträge vorhanden sind, dann stimmt die Kernelkonfiguration zumindest schon mal halbwegs. Da der Server offensichtlich gebootet ist, aber nicht auf Pings oder SSH Logins reagiert, könnte die falsche Netzwerkkarte konfiguriert sein. Die Log Daten mit der dmesg-Ausgabe des rescue-Systems vergleichen (sie sollten mehr oder weniger übereinstimmen).
- Falls die Netzwerkkarte erkannt wurde, die sonstige Netzwerkkonfiguration überprüfen. Sind überall die richtigen IP-Adressen, Netzwerkmasken usw. eingetragen?
- Ist /mnt/etc/fstab korrekt?
Noch Fragen?
Dann hier einen entsprechenden Eintrag hinterlassen. Weitere Informationen zu Thema Rootserver erhält man auf http://www.rootserver.de .
4 Comments
Anonymous
Super Howto!! Danke!!
Aber:
Wie mache ich nun von meiner Installation ein Backup, damit ich z.B. fuer mehrere ThinClients nicht jedesmal neu installieren muss, sondern eines immer kopiere?
Ich habs mit vielen Varianten versucht aber immer sind Dateien nicht kopierbar (/proc /sys). dd hilft auch nicht, kein Blockdevice..
Hast Du da auch so eine patente Loesung parat? Danke schon mal
Gruss, Andre
Administrator
Du musst die Directories /proc und /sys weglassen, da es sich um System-Directories handelt. Du brauchst auf dem Zielsystem nur leere /proc und /sys Directories anlegen, den Rest macht dann der Kernel.
Ich nehm' zum Backuppen immer
Anonymous
hallo Arne,
eine Frage von Harry.
Ich möchte gerne Linux und XP auf einer Platte laufen lassen. XP weil es für einige Hardware die ich habe keinen Linux Treiber gibt (Scanner Astra Umax 4500, Eumex 400). So Google.
Nun habe ich eine Platte , auf der ich eine Linuxversion schon einmal aufgespielt habe, wieder mit exFAT neu formatiert. Grund: besser ist erst XP dann Linux installieren. so habe ich es in irgendeinem Forum gelesen. Nun kommt mir bein starten- also leere Platte, XP im CD-Fach, Bootmanager auf Booten von CD- fogende Meldung:
GRUB Loading
Error: Unknow Filesystem
GRUB rescue>
bitte was kann/soll/muß ich dort eingeben?
Grüße aus Dssd
Harry P.
Administrator
Auf der Platte ist noch der alte Grub-Bootloader installiert. Da er sich in den Boot-Blocks befindet und nicht auf der Partition, kriegt man ihn durch bloßes Neuformatieren der Platte nicht weg.
Abhilfe:
sudo dd if=/dev/zero of=/dev/sda
eingebenCTRL-C
beendenDies überschreibt die gesamte Platte
sda
(bzw die ersten paar MByte) mit Nullen, somit auch den Boot-Block.Unbedingt darauf achten, dass man auch die richtige Platte erwischt. Falls man mehrere Platten hat, sicherheitshalber von den anderen Platten die Stromversorgung abziehen.