Sie befinden sich hier: Startseite Server Dienstleistungen Server Anleitungen Debian Etch auf Strato HighQ-Server XPro4 mit RAID 1 Installation

Debian Etch auf Strato HighQ-Server XPro4 mit RAID 1 Installation

Beitragsseiten
Debian Etch auf Strato HighQ-Server XPro4 mit RAID 1 Installation
Vorüberlegungen zur Partitionierung
Vorbereitung und Partitionierung der Festplatten
Einrichten der RAID-Arrays
Vorbereiten und Herunterladen von Debootstrap
Erzeugen der Dateisysteme auf den RAID Arrays
Installation des Basis-Systems
Installation des Boot-Loaders GRUB und des Kernels
Netzwerk-Konfiguration
Reboot in das neu installierte System
Credits und Kommentare
Alle Seiten

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:

  1. Debian 4 "Etch" Minimalsystem
  2. Festplatten als RAID Arrays (Software-Raid)
  3. GNU Grub kommt als Boot-Loader zum Einsatz
  4. Automatische Boot-Loader-Konfiguration nach Kernel-Änderungen
  5. 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.

 

Image
Strato Rescue System über serielle Konsole

 

  • 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.
  1. root# dd if=/dev/zero of=/dev/sda count=1

    1+0 records in
    1+0 records out
  2. 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.
  1. 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.

 

Image
So sieht die neue Partitionstabelle in cfdisk aus

 

  • Nun kopieren wir die eben erzeugte Partitionstabelle von sda nach sdb:
  1. 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:
  1. 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:
  1. 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):
  1. 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:
  1. 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:
  1. 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:
  1. 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"
  1. 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.
  1. 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:
  1. 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:
  1. 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.
  1. 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:
  1. 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:
  1. 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:
  1. 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

 

Image
/etc/fstab

 

  • 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 /.
  1. 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)
  1. 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:
  1. 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:
  1. 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

 

Image
/etc/apt/sources.lst

 

  • 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.
  1. 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:
  1. 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
  1. 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:
  1. root# vim /boot/grub/menu.lst

    timeout 20
    serial --unit=0 --speed=57600
    terminal serial
    #color cyan/blue white/blue

 

Image
/boot/grub/menu.lst

 

  • 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!
  1. root# vim /boot/grub/menu.lst

    # kopt=root=/dev/md1 ro console=tty0 console=ttyS0,57600

 

Image
/boot/grub/menu.lst

 

  • 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:
  1. root# vim /etc/kernel-img.conf

    relative_links = yes
    do_initrd = yes
    postinst_hook = /usr/sbin/update-grub
    postrm_hook = /usr/sbin/update-grub

 

Image
/etc/kernel-img.conf

 

  • 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.
  1. 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:
  1. 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) ...

 

Image
update-grub hat den Kernel zur menu.lst hinzugefügt und unsere Boot-Parameter übernommen

 

  • 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:
  1. 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.
  1. 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:
  1. root# vi /etc/network/interfaces

    auto lo
    iface lo inet loopback
    auto eth0
    iface eth0 inet dhcp

 

Image
/etc/network/interfaces

 

  • 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.
  1. 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.
  1. 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.
  1. 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:

 

Image
Grub begrüßt uns beim Start in unser frisch installiertes Debian Etch

 

  • 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

Kommentar schreiben

Bitte kommentieren Sie sachlich und geben Sie eine gültige E-Mail-Adresse an. Datenschutzerklärung


Sicherheitscode
Aktualisieren

Joomla! ist freie, unter der GNU/GPL-Lizenz veröffentlichte Software.
The Joomla!® name is used under a limited license from Open Source Matters in the United States and other countries.
Andre Hotzler EDV-Dienstleistungen is not affiliated with or endorsed by Open Source Matters or the Joomla! Project.