Veraltet
Stand des Artikels ist 2009.
Die folgende Anleitung beschreibt die Installation eines Root-Servers mit dem neuesten Debian Release "Etch". Der Root-Server ist - wenn man den richtigen Kernel einsetzt - gleichzeitig auch als 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.
Der einfachste Weg ist, das gewünschte Release manuell zu installieren. Das Debian Package für debootstrap gibt es hier: http://packages.debian.org/stable/admin/debootstrap . Wir kopieren es 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.3_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 4.0 hat den Codenamen "etch", das ältere Release 3.1 den Codenamen "sarge".
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 etch /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.
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.
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 kernel-image kernel-image-2.6-386 - Linux 2.6 image on 486-class - transition package kernel-image-2.6-686 - Linux 2.6 image on PPro/Celeron/PII/PIII/P4 - transition package kernel-image-2.6-686-smp - Linux 2.6 image on PPro/Celeron/PII/PIII/P4 SMP - transition package kernel-image-2.6-amd64-generic - Linux kernel image for version 2.6 on generic x86_64 systems - transition package kernel-image-2.6-amd64-k8 - Linux kernel image for version 2.6 on AMD64 systems - transition package kernel-image-2.6-amd64-k8-smp - Linux kernel image for version 2.6 on AMD64 SMP systems - transition package kernel-image-2.6-em64t-p4 - Linux kernel image for version 2.6 on Intel EM64T systems - transition package kernel-image-2.6-em64t-p4-smp - Linux kernel image for version 2.6 on Intel EM64T SMP systems - transition package kernel-image-2.6-k7 - Linux 2.6 image on AMD K7 - transition package kernel-image-2.6-k7-smp - Linux 2.6 image on AMD K7 SMP - transition package kernel-package - A utility for building Linux kernel related Debian packages. rt2400-source - RT2400 wireless network drivers source rt2500-source - RT2500 wireless network drivers source rt2570-source - RT2570 wireless network drivers source rt2x00-source - RT2x00 wireless network drivers source 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. Der Einsatz eines 64-Bit-Kernels lohnt nur in bestimmten Einsatzfällen, siehe dazu den Artikel 32 oder 64 Bit Image bei Athlon64 im "RootForum".
Also:
apt-get install kernel-image-2.6-k7
Dieser Kernel kann mit folgender /etc/lilo.conf gestartet werden. Bei der Erstellung der lilo.conf Datei darauf achten, dass die Pfadnamen zum Kernel oder zur initrd Datei korrekt sind.
boot=/dev/sda root=/dev/sda6 map=/boot/map delay=20 vga=normal default=Default image=/boot/vmlinuz-2.6.18-5-k7 label=Default initrd=/boot/initrd.img-2.6.18-5-k7 read-only
Falls man einen eigenen Kernel ohne initrd verwendet, z.B. den VServer Kernel, muss folgende /etc/lilo.conf verwendet werden:
boot=/dev/sda root=/dev/sda6 map=/boot/map delay=20 vga=normal default=VServer image=/boot/vmlinuz-2.6.20.4-vserver label=VServer read-only
Installation fertigstellen
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 (es wird von zahlreichen Programmen zwingend benötigt) und wechseln dann mit "chroot" in das frisch installierte Debian System.
Lilo benötigt bestimmte devices, die mit MAKEDEV erstellt werden.
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 -t proc none /mnt/proc rescue:/# chroot /mnt rescue:/# cd /dev rescue:/# ./MAKEDEV generic rescue:/# apt-get install ssh lilo .... Setting up lilo (22.6.1-9.3) ... mount: /dev/sda5 already mounted or /boot busy dpkg: error processing lilo (--configure): subprocess post-installation script returned error exit status 32 ... Errors were encountered while processing: lilo E: Sub-process /usr/bin/dpkg returned an error code (1) rescue:/#
Nach Aufruf von Lilo sollte der Kernel installiert sein.
rescue:/# cp vmlinuz-2.6.20.4-vserver /boot/vmlinuz-2.6.20.4-vserver rescue:/# lilo Added VServer * 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
Debugging
Nach 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 .
14 Comments
Anonymous
Vielen Dank für diesen informativen Walkthrough , um Etch auf einem Remote Server zu installieren. Hat bei meinem IPX-Server auch fast auf Anhieb funktioniert. Einzig das Programm "ar" zum Entpacken von Debootstrap war nicht im Rescue-System. Um all den Anderen Usern, die an der gleichen Stelle hängen, das Suchen zu ersparen: "ar" steckt in den Binutils
Also Rescue System starten und folgenden Befehl absetzen: "aptitude install binutils", dann steht "ar" zur Verfügung. Der Rest läuft mit dem Walkthrough wie geschmiert, einfach Klasse!
Anonymous
Was den "Trick" mit der Datenübertragung per SSH angeht: cat ist nicht binary-safe, d. h. das kann in die Hose gehen. Besser ist es, hierfür scp einzusetzen. Vom Rechner zu Hause genügt dann folgender Befehl:
Administrator
schon richtig, war aber nur als Krücke gedacht, wenn man scp, wget oder so nicht zur Verfügung hat.
Wenn scp vorhanden ist, sollte man es natürlich auch verwenden.
Anonymous
Super Anleitung.
Cool wäre allerdings noch, wenn hier nochmal schnell das erstellen eines RAID1 auf dem System behandelt würde (hat mich beim ersten mal Stunden und einige neuanfänge gekostet...)
Gruß
Administrator
Könntest Du nicht Deine Erfahrungen eben mal zusammenschreiben? Dann kann ich sie hier posten. Bei mir würde es natürlich auch etliche Stunden dauern, wenn ich es selbst mache - und die habe ich z.Zt. nicht.
Anonymous
Leider ist mein Server bei 1und1 nach dem folgenden output nicht mehr erreichbar (d.h. Putty meldet den Abbruch der Verbindung, diese kann dann auch nicht mehr neu aufgebaut werden, ping ist ebenfalls nicht mehr möglich)
rescue:/# debootstrap etch /mnt ftp://ftp.de.debian.org/debian/
I: Validating Packages
I: Resolving dependencies of required packages...
I: Resolving dependencies of base packages...
I: Checking component main on ftp://ftp.de.debian.org/debian...
I: Retrieving adduser
I: Validating adduser
I: Retrieving apt
I: Validating apt
I: Retrieving apt-utils
I: Validating apt-utils
I: Retrieving aptitude
I: Validating aptitude
I: Retrieving base-files
I: Validating base-files
I: Retrieving base-passwd
Administrator
Ich glaube nicht, dass dies mit dem Installationsvorgang zu tun hat. Probier's einfach nochmal.
Anonymous
Hallo. Läuft der hier angegebene Kernel mit einem AMD Athlon 64 X2 5600+ Dual Core?????
Oder wäre es der kernel-image-2.6-amd64-k8
Administrator
Der Debian Kernel müsste eigentlich funktionieren. Ich habe jedoch gerade selber einen Server mit 2 * AMD Athlon 64 X2 5600+ Dual Core bekommen (neuer Hetzner DS5000) und einen maßgeschneiderten Kernel konfiguriert. Kann man sich hier downloaden:
Installation der Linux-VServer Software
Anonymous
1. Im ersten Abschnitt oben bei der Partitionierung der Festplatten fehlt das Schreiben der Tabelle mit "w"
2. Beim Kernel compilieren muss die Option SMP mit eingeschaltet werden für das Multi Processing
3. Prüfen ob 32,- oder 64 bit System
Anonymous
Wow, vielen Dank dafür! Das wäre ansonsten ein mehrstündiger Try&Error-Marathon geworden!
Anonymous
Hey, vielen vielen Dank für diese Geile Anleitung. Habe so lange nach sowas gesucht, noch nie gemacht und hat auf anhieb funktioniert. Echt klasse
Anonymous
kernel-image heisst mittlerweile linux-image
Anonymous
Hallo,
mir ist folgendes aufgefallen:
Bei 'wget http://ftp.de.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.3_all.deb' kommt bei mir Error 404.
Höchste Version ist debootstrap_1.0.23_all.deb vom 19-May-2010
Die Swap-Partition in /dev/sdb1 hat eine falsche ID. Angegeben ist 83 (Linux), sollte aber 82 sein (Linux Swap)