Debian Etch auf Strato HighQ-Server XPro4 mit RAID 1 Installation
Sonntag, 09. Dezember 2007
Strato hat neue Root-Server im Angebot.
Das größte Modell ist der HighQ-Server Xpro4, mit 4 Gbyte Arbeitsspeicher, einem Opteron 1218 HE (energiesparende Version) und 2 400 Gbyte SATA-Festplatten.
Leider bildet der verbaute RAID-Controller das Array nicht als sda ab, sonder man kann beide Festplatten direkt ansprechen und muss sich also sein Software-Raid selbst basteln.
Performancetechnisch sollte das kein Problem sein, da RAID-Controller in dieser Preisklasse sowie keine eigene Recheneinheit haben, sondern nur die Verwaltung des Arrays übernehmen. Die CPU muss also in jedem Fall die Arbeit übernehmen.
Strato bietet zwar mittlerweile ein Debian 4.0 "Etch" Image an, hier ist die Festplatte aber in meinen Augen ungünstig partitioniert.
Ich möchte mehrere Partitionen, da ich mir davon einen Performancevorteil aufgrund der kleineren Datei-Zuordnungstabellen verspreche, außerdem muss ich dann bei Verlust eines FileSystems nur eben dieses eine FileSystem restoren.
Auf LVM verzichte ich, da ich bei der Laufzeit eines gemieteten Servers keine großartigen Änderungen am Platten-Layout erwarte.
Diese Installationsanleitung behandelt die Installation der aktuellen Debian Version 4.0 "Etch" auf diesem Server. Folgende Features werden verwendet:
- Debian 4 "Etch" Minimalsystem
- Festplatten als RAID Arrays (Software-Raid)
- GNU Grub kommt als Boot-Loader zum Einsatz
- Automatische Boot-Loader-Konfiguration nach Kernel-Änderungen
- Netzwerkkonfiguration via DHCP
Bei einem RAID-System muss man natürlich gewisse Überlegungen bezüglich der Ausfallsicherheit treffen.
Hierbei gibt es aber Einiges zu bedenken:
- Wenn eine Festplatte defekte Sektoren hat, bleibt der Server beim Booten evt. stehen, da der Boot-Loader nicht gelesen werden kann
- Fällt die Platte physikalisch aus, erkennt der Server die verbleibende Platte als sda, man müsste also, falls die erste Platte ausfällt, auf der 2ten Platte einen Boot-Loader so einrichten, dass er beide Platten zu laden versucht.
Das ist zwar mit Grub kein Problem, aber....
Ziel war ja, wie oben beschrieben, eine Automatisierbarkeit des Boot-Loaders, da wird es hier schwierig.
Erstes Ziel ist ja die Spiegelung der Daten, sollte eine Platte ausfallen, muss man dann auf die konkrete Gegebenheit reagieren und die getauschte Platte entsprechend einbinden. Alle möglichen Szenario zu testen, ist bei einem Mietserver nicht möglich, daher soll der Artikel dies nicht berücksichtigen.
Folgendes Partitionierungsschema habe ich mir überlegt:
| Partition | Mount | FS | Type | Array |
Größe
|
|---|---|---|---|---|---|
| sda1 (active) | /boot | ext3 | fd | md0 |
1024
|
| sda2 | swap | swap | 82 | - |
4048
|
| sda5 | / | ext3 | fd | md1 |
15360
|
| sda6 | /home | ext3 | fd | md2 |
25600
|
| sda7 | /usr | ext3 | fd | md3 |
10240
|
| sda8 | /var | ext3 | fd | md4 |
102400
|
| sda9 | /backuppartition | ext3 | fd | md5 |
Rest
|
Die Backup-Partition ist mit Abstand die größte Partition, die Emails landen auf /home, die Web-Daten auf /var/www. /var/www ist übrigens deswegen keine eigene Partition, da ich für chroot-Umgebungen Hardlinks an andere Stellen von /var benötige. Hardlinks sind aber nicht über Partitionsgrenzen möglich.
- Zuerst müssen wir ins am Strato-Recue-System anmelden. Dazu wird im Strato-Web-Backend die Bootreihenfolge auf Rescue-System umgestellt, dann der Server rebootet.
Der Zugriff ist dann per SSH über den Servernamen möglich, das Passwort wird im Backend angezeigt.
Alternativ kann man auch die serielle Konsole benutzen, später werden wir diese zur Kontrolle des Boot-Vorgangs benötigen.
- Um alle Reste einer vorherigen Installation auf den Festplatten zu beseitigen, schreiben wie ein paar Nullen in den ersten Sektor der Festplatten, danach ist die Festplatte "logisch" wie neu, da die Partitionstabelle fehlt und keine Daten mehr gefunden werden.
- root# dd if=/dev/zero of=/dev/sda count=1
1+0 records in
1+0 records out - root# dd if=/dev/zero of=/dev/sdb count=1
1+0 records in
1+0 records out
- Wenn nun zuvor schon Arrays existierten (z.B. von vorherigen Tests), müssten wir diese nun stoppen, der Einfachheit halber führen wir stattdessen einfach einen Reboot durch.
- root# reboot -n
...
The system is going down for reboot NOW!
- Nach der erneuten Anmeldung am Rescue System, beginnen wir nun mit der Partitionierung der Festplatte. Hierzu setzen wir die geplante Partitionstabelle in die Praxis um. Die Wahl des Partitionierers bleibt dem persönlichen Geschmack überlassen. Ich habe sda mit cfdisk partitioniert und anschliessend dieses Layout mit sfdisk nach sdb kopiert. Detailwissen zur Partitionierung setze ich bei den Lesern dieses Artikels voraus. Der Partitionstyp "fd" = "Linux RAID Autodetect" sorgt für eine automatische Aktivierung der Arrays durch den Kernel. Wir können uns also Konfigurationsdateien (/etc/raidtab) für die Arrays sparen.
- Nun kopieren wir die eben erzeugte Partitionstabelle von sda nach sdb:
- root# sfdisk -d /dev/sda | sfdisk /dev/sdb
Checking that no-one is using this disk right now ...
OK
Disk /dev/sdb: 48641 cylinders, 255 heads, 63 sectors/track
sfdisk: ERROR: sector 0 does not have an msdos signature
/dev/sdb: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0
Device Boot Start End #sectors Id System
/dev/sdb1 63 1992059 1991997 fd Linux raid autodetect
/dev/sdb2 1992060 9896039 7903980 82 Linux swap / Solaris
/dev/sdb3 9896040 781417664 771521625 5 Extended
/dev/sdb4 0 - 0 0 Empty
/dev/sdb5 9896103 39889394 29993292 fd Linux raid autodetect
/dev/sdb6 39889458 89883674 49994217 fd Linux raid autodetect
/dev/sdb7 89883738 109884599 20000862 fd Linux raid autodetect
/dev/sdb8 109884663 309877784 199993122 fd Linux raid autodetect
/dev/sdb9 309877848 781417664 471539817 fd Linux raid autodetect
Warning: no primary partition is marked bootable (active)
This does not matter for LILO, but the DOS MBR will not boot this disk.
Successfully wrote the new partition table
Re-reading the partition table ...
If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
- Nun prüfen wir den Erfolg, indem wir uns mit fdisk den Inhalt der beiden Partitionstabellen anzeigen lassen:
- root# fdisk -l /dev/sda /dev/sdb
Disk /dev/sda: 400.0 GB, 400088457216 bytes
255 heads, 63 sectors/track, 48641 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 124 995998+ fd Linux raid autodetect
/dev/sda2 125 616 3951990 82 Linux swap / Solaris
/dev/sda3 617 48641 385760812+ 5 Extended
/dev/sda5 617 2483 14996646 fd Linux raid autodetect
/dev/sda6 2484 5595 24997108+ fd Linux raid autodetect
/dev/sda7 5596 6840 10000431 fd Linux raid autodetect
/dev/sda8 6841 19289 99996561 fd Linux raid autodetect
/dev/sda9 19290 48641 235769908+ fd Linux raid autodetect
Disk /dev/sdb: 400.0 GB, 400088457216 bytes
255 heads, 63 sectors/track, 48641 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 124 995998+ fd Linux raid autodetect
/dev/sdb2 125 616 3951990 82 Linux swap / Solaris
/dev/sdb3 617 48641 385760812+ 5 Extended
/dev/sdb5 617 2483 14996646 fd Linux raid autodetect
/dev/sdb6 2484 5595 24997108+ fd Linux raid autodetect
/dev/sdb7 5596 6840 10000431 fd Linux raid autodetect
/dev/sdb8 6841 19289 99996561 fd Linux raid autodetect
/dev/sdb9 19290 48641 235769908+ fd Linux raid autodetect
- Damit ist die Partitionierung der Festplatte abgeschlossen. Dateisysteme werden an dieser Stelle noch nicht erzeugt, da wir die Dateisysteme ja nicht direkt auf den Partitionen, sondern auf den noch einzurichtenden RAID-Arrays erzeugen wollen.
- Die Partitionen haben wir erzeugt, nun können wie RAID-Arrays einrichten. Hierzu werden jeweils die entsprechenden Partitionen zu einem Array zusamengefasst. Den SWAP Space spiegeln wir nicht.
- Zuerst prüfen wir, dass auch wirklich keine Arrays vorhanden sind:
- root# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
unused devices: <none>
- Wie erwartet sind keine Arrays vorhanden, beginnen wir also mit der Erzeugung der Arrays (Die Frage mit yes beantworten):
- root# mdadm --create /dev/md0 --level=mirror --raid-devices=2 /dev/sda1 /dev/sdb1
mdadm: /dev/sda1 appears to contain an ext2fs file system
size=979840K mtime=Thu Jan 1 01:00:00 1970
mdadm: /dev/sdb1 appears to contain an ext2fs file system
size=979840K mtime=Thu Jan 1 01:00:00 1970
Continue creating array? YES
mdadm: array /dev/md0 started
root# mdadm --create /dev/md1 --level=mirror --raid-devices=2 /dev/sda5 /dev/sdb5
...
root# mdadm --create /dev/md2 --level=mirror --raid-devices=2 /dev/sda6 /dev/sdb6
...
root# mdadm --create /dev/md3 --level=mirror --raid-devices=2 /dev/sda7 /dev/sdb7
...
root# mdadm --create /dev/md4 --level=mirror --raid-devices=2 /dev/sda8 /dev/sdb8
...
root# mdadm --create /dev/md5 --level=mirror --raid-devices=2 /dev/sda9 /dev/sdb9
...
- Das Erzeugen der Arrays haben wir nun eingeleitet, das Synchronisieren wird aber eine Zeit lang dauern. Überprüfen können wir den Status mit:
- root# cat /proc/mdstat
md5 : active raid1 sdb9[1] sda9[0]
230773568 blocks [2/2] [UU]
resync=DELAYED
md4 : active raid1 sdb8[1] sda8[0]
99996480 blocks [2/2] [UU]
resync=DELAYED
md3 : active raid1 sdb7[1] sda7[0]
14996544 blocks [2/2] [UU]
resync=DELAYED
md2 : active raid1 sdb6[1] sda6[0]
24996992 blocks [2/2] [UU]
resync=DELAYED
md1 : active raid1 sdb5[1] sda5[0]
14996544 blocks [2/2] [UU]
[>.] resync = 16.3% (2454976/14996544) finish=3.1min speed=66380K/sec
md0 : active raid1 sdb1[1] sda1[0]
995904 blocks [2/2] [UU]
unused devices: <none>
- Wir könnten nun schon die Dateisysteme erzeugen, dies bremst aber die Synchronisierung der Arrays aus, da diese nur mit freien Systemresourcen durchgeführt wird. Daher ist nun ein guter Zeitpunkt für die Vorbereitung des Bootstraps.
- Das Basis-System wollen wir mit Debootstrap installieren. Strato hat auf dem aktuellen Rescue-System kaum Hilfsmittel integriert, dpkg, apt-get usw., alle diese Tools sind nicht vorhanden.
Wir benötigen mindestens das Programm "ar", um die dann zu verwendenden .deb Dateien zu entpacken. - Hier packen wir uns auf einem bestehenden Debian Etch System ein Archiv mit "ar", alternativ kann die Datei hier:
http://www.hotzeltopf.de/downloads/highq-xpro/etch_strato_ar.tar
heruntergeladen werden. - Wir benötigen also "ar" und vermutlich noch Bibliotheken, die auf dem Strato-Rescue-System nicht vorhanden sind.
Suchen wir nun also "ar" und seine Bibliotheken, die im Pfad "/usr/lib/" liegen:
- root# which ar
/usr/bin/ar
root# ldd /usr/bin/ar | grep usr
libbfd-2.17.so => /usr/lib/libbfd-2.17.so (0xb7f01000)
- Diese beiden Dateien packen wir nun in ein Archiv und überprüfen anschliessend den Inhalt des Archivs:
- root# tar -cf /tmp/etch_strato_ar.tar /usr/bin/ar
root# tar -rf /tmp/etch_strato_ar.tar /usr/lib/libbfd-2.17.so
root# tar tf /tmp/etch_strato_ar.tar
usr/bin/ar
usr/lib/libbfd-2.17.so
- Nun wechseln wir wieder zum Strato Rescue-System und laden die benötigten Dateien herunter.
- Zuerst laden und entpacken wir das eben erzeugte Archiv mit "ar"
- root# wgethttp://www.hotzeltopf.de/downloads/highq-xpro/etch_strato_ar.tar
--15:44:22-- http://www.hotzeltopf.de/
downloads/highq-xpro/etch_strato_ar.tar
=> `etch_strato_ar.tar'
Resolving www.hotzeltopf.de... 85.214.39.69
Connecting to www.hotzeltopf.de[85.214.39.69]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 686,080 [application/x-tar]
100%[====================================>] 686,080 --.--K/s
root# tar xvf etch_strato_ar.tar -C /
usr/bin/ar
usr/lib/libbfd-2.17.so
- Nun benötigen wir die PaketeDebootstrap undPerl-Base aus dem Debian Repository. Aktuelle Versionen und Links kann man sich auf:
http://packages.debian.org
heraussuchen. Anschliessend werden die Debian-Pakete mit ar extrahiert. Man erhält hierdurch eine Datei data.tar.gz, diese enthält die benötigten Binaries, die wir dann mit tar entpacken.
- root# wgethttp://ftp2.de.debian.org/debian/
pool/main/d/debootstrap/debootstrap_0.3.3.2_all.deb
...
root# ar xv debootstrap_0.3.3.2_all.deb
x - debian-binary
x - control.tar.gz
x - data.tar.gz
root# tar xzvf data.tar.gz -C /
./
./usr/
./usr/sbin/
./usr/sbin/debootstrap
./usr/share/
./usr/share/man/
./usr/share/man/man8/
./usr/share/man/man8/debootstrap.8.gz
./usr/share/doc/
./usr/share/doc/debootstrap/
./usr/share/doc/debootstrap/README.Debian
./usr/share/doc/debootstrap/copyright
./usr/share/doc/debootstrap/changelog.gz
./usr/lib/
./usr/lib/debootstrap/
./usr/lib/debootstrap/scripts/
./usr/lib/debootstrap/scripts/potato
./usr/lib/debootstrap/scripts/woody
./usr/lib/debootstrap/scripts/woody.buildd
./usr/lib/debootstrap/scripts/sarge
./usr/lib/debootstrap/scripts/sarge.buildd
./usr/lib/debootstrap/scripts/sarge.fakechroot
./usr/lib/debootstrap/scripts/sid
./usr/lib/debootstrap/scripts/warty
./usr/lib/debootstrap/scripts/warty.buildd
./usr/lib/debootstrap/scripts/hoary
./usr/lib/debootstrap/scripts/hoary.buildd
./usr/lib/debootstrap/scripts/breezy
./usr/lib/debootstrap/functions
./usr/lib/debootstrap/devices.tar.gz
./usr/lib/debootstrap/scripts/etch
root# wgethttp://ftp2.de.debian.org/debian/
pool/main/p/perl/perl-base_5.8.8-7_i386.deb
...
root# ar xv perl-base_5.8.8-7_i386.deb
...
root# tar xzvf data.tar.gz -C /
...
- Wir haben nun alle Voraussetzungen für Debootstrap geschaffen, die Arrays sollten nun fertig sein. Auf der nächsten Seite geht es auf dem Rescue System mit dem Erzeugen der Dateisysteme weiter.
- Die RAID Arrays sollten nun fertig sein, davon überzeugen wir uns:
- root# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md5 : active raid1 sdb9[1] sda9[0]
235769792 blocks [2/2] [UU]
md4 : active raid1 sdb8[1] sda8[0]
99996480 blocks [2/2] [UU]
md2 : active raid1 sdb6[1] sda6[0]
24996992 blocks [2/2] [UU]
md3 : active raid1 sdb7[1] sda7[0]
10000320 blocks [2/2] [UU]
md1 : active raid1 sdb5[1] sda5[0]
14996544 blocks [2/2] [UU]
md0 : active raid1 sdb1[1] sda1[0]
995904 blocks [2/2] [UU]
unused devices: <none>
- Beginnen wir beim Erzeugen der Dateisysteme mit den beiden (nicht gespiegelten) SWAP-Partitionen:
- root# mkswap /dev/sda2
Setting up swapspace version 1, size = 4046831 kB
no label, UUID=05c7bb77-0c1a-4ad8-8fd1-836762ff1337
root# mkswap /dev/sdb2
Setting up swapspace version 1, size = 4046831 kB
no label, UUID=dbe93894-daa4-43f4-85ed-966f60ffae11
- Nun erzeugen wir ext3 Journaling Dateisysteme auf den Arrays. Wer ein anderes Dateisystem verwenden will, muss dies bei der Erstellung der /etc/fstab Datei bedenken.
- root# mke2fs -j /dev/md0
mke2fs 1.37 (21-Mar-2005)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
124672 inodes, 248976 blocks
12448 blocks (5.00%) reserved for the super user
First data block=0
8 block groups
32768 blocks per group, 32768 fragments per group
15584 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
root# mke2fs -j /dev/md1
...
root# mke2fs -j /dev/md2
...
root# mke2fs -j /dev/md3
...
root# mke2fs -j /dev/md4
...
root# mke2fs -j /dev/md5
...
- Die Arrays und Dateisysteme haben wir nun erzeugt, nun sollten wir diese Konfiguration gleich in der /etc/fstab-Datei der künftigten Root / Partition hinterlegen. Zu diesem Zweck müssen wir die Partition mounten und gleich die passenden Mountpoints für die weiteren Partitionen anlegen und diese Partitionen dann mounten. /dev/boot mounten wir erst nach dem Wechsel ins chroot, dies ist für Grub wichtig. Bei dieser Gelegenheit legen wir auch das /etc Verzeichnis mit an:
- root# mount /dev/md1 /mnt/
root# mkdir /mnt/home /mnt/usr /mnt/var /mnt/boot /mnt/backuppartition /mnt/etc
root# mount /dev/md2 /mnt/home
root# mount /dev/md3 /mnt/usr
root# mount /dev/md4 /mnt/var
root# mount /dev/md5 /mnt/backuppartition
- Überprüfen wir den Erfolg unserer Arbeit:
- root# ls -l /mnt
total 40
drwxr-xr-x 2 root root 4096 Apr 19 19:23 backuppartition
drwxr-xr-x 2 root root 4096 Apr 19 19:23 boot
drwxr-xr-x 2 root root 4096 Apr 19 19:24 etc
drwxr-xr-x 2 root root 4096 Apr 19 19:23 home
drwx------ 2 root root 16384 Apr 19 19:20 lost+found
drwxr-xr-x 2 root root 4096 Apr 19 19:23 usr
drwxr-xr-x 2 root root 4096 Apr 19 19:23 var
root# mount
/dev/ram on / type ext2 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=4,mode=620)
shm on /dev/shm type tmpfs (rw)
/dev/md1 on /mnt type ext3 (rw)
/dev/md2 on /mnt/home type ext3 (rw)
/dev/md3 on /mnt/usr type ext3 (rw)
/dev/md4 on /mnt/var type ext3 (rw)
/dev/md5 on /mnt/backuppartition type ext3 (rw)
- Die Dateisystem-Konfiguration verewigen wir nun in der Datei /etc/fstab, welche unterhalb des zukünftigen / angelegt werden muss. Der Inhalt der Datei soll so aussehen:
- root# vi /mnt/etc/fstab
proc /proc proc defaults 0 0
/dev/md0 /boot ext3 defaults 0 2
/dev/md1 / ext3 defaults,errors=remount-ro 0 1
/dev/md2 /home ext3 defaults 0 2
/dev/md3 /usr ext3 defaults 0 2
/dev/md4 /var ext3 defaults 0 2
/dev/md5 /backuppartition ext3 defaults 0 2
/dev/sda2 none swap defaults,pri=1 0 0
/dev/sdb2 none swap defaults,pri=1 0 0
- Auf der nächsten Seite widmen wir uns der Installation des Debian Basissystems.
- Debootstrap kann mit verschiedenen Parametern aufgerufen werden, unter anderem kann man die Architektur angeben, zum Beispiel durch den Paramter "--arch amd64" und der Angabe der passenden URL für die AMD64-Pakete. Auf diese Art und Weise lässt sich aber über das Rescue System keine Installation durchführen, denn der Kernel des Rescue Systems ist ein x86 Kernel. Um Pakete einer anderen Architektur zu verwenden benötigen wir einen dazu passenden Kernel, denn spätestens wenn die neu geruntergeladenen Pakete entpackt und anschliessend benutzt werden, stoßen wir auf das Problem, dass die für die AMD64 Architektur kompilierten Pakete nicht unter dem x86 Kernel laufen. Debootstrap kennt optional auch die Angabe eines URL Parameters, auf diesen Weise kann man einen Mirror in der Nähe angeben, dies ist auch bei Nichterreichbarkeit des Default-Mirrors sehr hilfreich. Da Debootstrap auf dem Strato Rescue die Architektur nicht erkennt, gegen wie die Architektur i386 explizit mit an.
- Starten wir nun Debootstrap unter Angabe der Distribution der Architektur und des Mountpoints, der künftigten Root /.
- root# debootstrap --arch i386 etch /mnt ftp://ftp2.de.debian.org/debian/
...
I: Retrieving Release
I: Retrieving Packages
I: Validating Packages
...
I: Base system installed successfully.
- Nun wechseln wir in das neue Debian Basis-System und führen ein paar wichtige Tasks durch. Debian Etch bietet kein base-config mehr an, so dass wir hier folgende Konfigurations-Schritte mit der Hand durchführen:
-Root-Passwort setzen
-Zeitzone einrichten
-Proc Dateisystem mounten (sonst kommt es später zu Fehlern)
- root# chroot /mnt
root# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root# tzconfig
Your default time zone is set to 'Europe/Berlin'.
Local time is now: Thu Apr 19 19:40:43 CEST 2007.
Universal Time is now: Thu Apr 19 17:40:43 UTC 2007.
root# mount -tproc none /proc
- Für dem Boot-Loader benötigen wir später noch ein paar Devices, diese legen wir an:
- root# mknod /dev/sda b 8 0
root# mknod /dev/sda1 b 8 1
root# mknod /dev/sdb b 8 16
root# mknod /dev/sdb1 b 8 17
- Nun konfigurieren wir noch APT, indem wir die Sources.lst erzeugen und aktuelle Paketlisten herunterladen:
- root# vi /etc/apt/sources.list
#etch
deb http://ftp2.de.debian.org/debian etch main non-free contrib
deb-src http://ftp2.de.debian.org/debian etch main non-free contrib
#security
deb http://security.debian.org etch/updates main contrib non-free
root# aptitude update
...
Fetched 7578kB in 6s (1195kB/s)
Reading package lists... Done
- Auf der nächsten Seite richten wir den Boot-Loader Grub ein und installieren den Kernel.
- Zuerst installieren wir den Boot-Loader GNU Grub, bei dieser Gelegenheit installieren wir das Verwaltungsprogramm für die Raid-Arrays mdadm gleich mit. Es legt dann nämlich über udev die mdx Devices an, so dass wir /dev/md0 mounten können.
- Grub wird später nach einem Ordner für seine Konfigurationsdateien und Stages fragen, der Ordnername lautet /boot/grub, diesen legen wir gleich mit an.
- root# aptitude install grub mdadm
...
Setting up grub (0.97-27) ...
Setting up mdadm (2.5.6-9) ...
Generating array device nodes... done.
Generating mdadm.conf... done.
Starting MD monitoring service: mdadm --monitor.
Generating udev events for MD arrays...done.
(Die Fragen einfach bestätigen)
root# mount /dev/md0 /boot
root# mkdir /boot/grub
- Nachdem wir Grub nun installiert haben, erzeugen wir eine Standard-Konfigurationsdatei menu.lst:
- root# update-grub
Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ...
Generating /boot/grub/default file
and setting the default boot entry to 0
Searching for GRUB installation directory ... found: /boot/grub
Testing for an existing GRUB menu.lst file ...
Could not find /boot/grub/menu.lst file.
Would you like /boot/grub/menu.lst generated for you? (y/N) y
Searching for splash image ... none found, skipping ...
grep: /boot/config*: No such file or directory
Updating /boot/grub/menu.lst ... done
(Frage mit yes oder y beantworten)
- Grub benötigt, im Gegensatz zu LILO, keine Neuinstallation bei Update der Konfiguration. Wir können Grub also nun in den MBR schreiben und uns später um die Einträge für den Kernel kümmern. Grub benötigt außerdem eine mapping-Datei, die zwischen seinen internen Bezeichnungen und den Kernel Devices übersetzt, zum Beispiel: hd0 <-> /dev/sda. Dies erledigt der Parameter --recheck
- root# grub-install --recheck --no-floppy hd0
Probing devices to guess BIOS drives. This may take a long time.
Searching for GRUB installation directory ... found: /boot/grub
Installation finished. No error reported.
This is the contents of the device map /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
- Damit ist Grub nun installiert und wir widmen uns der Konfigurationsdatei.
Da wir bei Strato serielle Konsolen benutzen, müssen wir dem Bootloader und dem Kernel sagen, dass die serielle Konsole benutzt werden soll.
Grub teilen wir dies durch 2 Parameter mit, dazu fügen wir sehr weit oben (am besten direkt unter timeout) in die Datei /boot/grub/menu.lst 2 Zeilen ein, Timeout ändern wir auf den Wert 20 ab, und die Zeile colort.... kommentieren wir ganz aus:
- root# vim /boot/grub/menu.lst
timeout 20
serial --unit=0 --speed=57600
terminal serial
#color cyan/blue white/blue
- Nun muss auch der Kernel seine Parameter für die serielle Konsole erhalten, und zwar jeder Kernel, denn sonst erhalten wir auf der seriellen Konsole keine Ausgabe und können dort auch keine Reparaturen vornehmen.
Weiter unten in der menu.lst gibt es dazu mehrere Parameter, die wir entsprechend anpassen, die Parameter müssen auskommentiert bleiben!
- root# vim /boot/grub/menu.lst
# kopt=root=/dev/md1 ro console=tty0 console=ttyS0,57600
- Diese Parameter werden dann später jedem Kernel als Boot-Parameter übergeben.
- Damit nun bei jeder Kernel-Installation oder Änderungen der entsprechende Kernel in die Grub Konfiguration eingebunden wird, müssen wir die Datei /etc/kernel-img.conf entsprechend beabeiten. Der Befehl update-grub aktualisiert bei Installation oder Deinstallation die Boot-Konfiguration:
- root# vim /etc/kernel-img.conf
relative_links = yes
do_initrd = yes
postinst_hook = /usr/sbin/update-grub
postrm_hook = /usr/sbin/update-grub
- Nun benötigen wir einen Kernel. Der Server hat 4 Gbyte RAM, um diese nutzen zu können, wäre ein sogenannter bigmem-Kernel nötig, mit den normalen Kerneln sind nur 3,8 Gbyte nutzbar, was aber in unserem Fall ausreichen sollte. Suchen wir also nach einem AMD K7 SMP Kernel.
- root# apt-cache search kernel image K7 | grep SMP
kernel-image-2.6-k7-smp - Linux 2.6 image on AMD K7 SMP -
transition package
- Wir installieren nun diesen Kernel und sehen in der Ausgabe, wie update-grub den Bootloader einrichtet:
- root# apt-get install kernel-image-2.6-k7-smp
Running depmod.
Finding valid ramdisk creators.
Using mkinitramfs-kpkg to build the ramdisk.
Running postinst hook script /usr/sbin/update-grub.
Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
Searching for splash image ... none found, skipping ...
Found kernel: /boot/vmlinuz-2.6.18-4-k7
Updating /boot/grub/menu.lst ... done
Setting up linux-image-2.6-k7 (2.6.18+6) ...
Setting up linux-image-2.6-k7-smp (2.6.18+6) ...
Setting up kernel-image-2.6-k7-smp (2.6.18+6) ...
- Damit das neue System später auch an im gebooteten Zustand der seriellen Konsole ansprechbar ist, fügen wir die entsprechende Zeile der Datei /etc/inittab hinzu:
- root# echo "S0:12345:respawn:/sbin/getty -L 57600 ttyS0 vt102" >> /etc/inittab
- Auf der nächsten Seite richten wir das Netzwerk ein.
- Zuerst erledigen wir ein paar grundsätzliche Arbeiten:
-wir legen den Hostname fest
-wir sorgen dafür, dass localhost auf die IP-Adresse 127.0.0.1 aufgelöst wird
-wir richten das Netzwerk-Interface eth0 für automatische Konfiguration mit dhcp ein.
- root# echo "<hostname hier eintragen>" > /etc/hostname
root# echo "127.0.0.1 localhost" > /etc/hosts
- Die Konfiguration der Interfaces wird in der Datei /etc/network/interfaces erledigt:
- root# vi /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
- Als nächstes installieren wir einen DHCP-Client, der mit den Gegebenheiten bei Strato zurecht kommt, der installierte tut dies nämlich nicht, daher müssen wir ihn entfernen. Leider ist die Abhängigkeitsprüfung hier nicht so gelungen, dass bei der Installation des neuen DHCP-Clients der alte entfernt wird, daher müssen wir dies per Hand tun.
- root# aptitude remove -y dhcp3-client
....
Removing dhcp3-client ...
root# aptitude install -y dhcpcd
...
Setting up dhcpcd (2.0.3-1) ...
- Nun benötigen wir noch den SSH-Daemon.
- root# aptitude install ssh -y
Creating SSH2 RSA key; this may take some time ...
Creating SSH2 DSA key; this may take some time ...
Restarting OpenBSD Secure Shell server: sshd.
Setting up ssh (4.3p2-9) ...
- Auf der nächsten Seite rebooten wir in unsere neu installiertes System.
- Nun können wir in unser neu installiertes System booten. Hierzu stellen wir die Bootreihenfolge beim Strato-Web-Interface wieder auf normalen Boot um, warten 5 Minuten und führen dann einen Reboot durch. Hierzu müssen wir die chroot-Umgebung verlassen.
- root# exit
root# reboot -n
- Wir loggen uns nun auf der Strato-Rescue-Console per ssh ein und beobachten den Bootvorgang.
- Grub begrüßt uns:
- Der Server bootet nun ganz normal und ist dann per Login-Prompt per Console oder SSH einsatzbereit.
- Credits:
Besonderen Dank widme ich demRootforum, von dort stammt ein guter Teil meines Wissens, vor allem möchte ich mich bei den Personen bedanken, die die Vorarbeit durch ihre Anleitungen und Skripte geleistet haben. Letztendlich habe ich dieses Wissen nur zusammengefasst und mit der RAID-Configuration ergänzt
Bitte benutzt die Kommentarmöglichkeit für Fragen, Kritik und Verbesserungsvorschläge

