Ubuntu 606-LTS auf Strato-Rootserver

Nur eine verschwindend geringe Zahl von Hostern bieten Rootserver mit Ubuntu 606-LTS (“Dapper Drake”) an. Mit etwas Geschick und einem Rettungssystem lässt sich das “menschenfreundliche Linux” aber leicht auf jedem Rootserver installieren.

Wir haben unter erschwerten Bedingungen auf einem Strato-Rootserver Ubuntu installiert. Da das Rettungssystem 32bittig war, — was einen chroot in ein installiertes Linux verhinderte — bereiteten wir das Basissystem zuhause vor und kopierten das Ergebnis mit rsync zum Server. Das macht die Anleitung auf praktisch alle Provider übertragbar.

Als Arbeitsumgebung zuhause ist eine 64bittige Ubuntu-Installation ideal, es geht aber auch eine Kanotix-CD (Bitte 64 Bit!). Temporär wird etwa ein Gigabyte Platz auf einer Linux-Partition benötigt.

Vorbereiten des Basissystems zuhause

  • Den Anfang macht eine Arbeitsverzeichnis /tmp/bootstrapped oder /usr/local/tmp/bootstrapped, die Spracheinstellungen setze ich temporär auf C:

    mkdir -p /tmp/bootstrapped
    export LC_ALL=C
    export LANG=C

  • Die Installation von Ubuntu in einem Verzeichnis nimmt das Tool debootstrap vor. Wenn Sie einen Rechner mit der gleichen Architektur wie der Rootserver zuhause unter Ubuntu 6-06 betreiben, genügt

    apt-get update
    apt-get install debootstrap

    für die Installation. Nutzer von Knoppix oder Kanotix müssen das aktuellste DEB-Paket vom Ubuntu-Server herunterladen und mit dpkg installieren:

    dpkg -i debootstrap-xyz.deb

    Mit debootstrap installieren Sie Dapper im vorbereiteten Verzeichnis:

    debootstrap --arch amd64 dapper /tmp/bootstrapped http://archive.ubuntu.com/ubuntu

  • Um dieses Minimal-Ubuntu anpassen zu können, wechseln Sie mit chroot in das Installationsverzeichnis. Sie bewegen sich dann im neuen System, als wäre es nicht in einem Verzeichnis, sondern direkt in der Wurzel eines installierten Systems. Damit chroot funktioniert, müssen /proc und /dev/pts gemountet sein:

    mount -t proc none /tmp/bootstrapped/proc
    mount -t devpts none /tmp/bootstrapped/dev/pts

    Ab in den chroot-Käfig:

    LANG=C chroot /tmp/bootstrapped /bin/bash

  • Zuerst wird ein Rootpasswort gesetzt. Ich bin konservativ und vergebe eines, zur Absicherung des Servers später mehr. Ubuntu schreibt den Passworthash in die /etc/passwd, wo er seit etwa 10 Jahren nicht mehr hingehört, aktivieren Sie deshalb unbedingt Shadow-Passwörter!

    passwd
    shadowconfig on

  • Nun ist die Netzwerkkonfiguration des frisch installieren Ubuntu an der Reihe. Zuerst der Hostname:

    echo 'rootie.meinedomain.xyz' > /etc/hostname

    Dann die /etc/hosts:

    echo '127.0.0.1 localhost' > /etc/hosts

    Die Datei /etc/resolv.conf für die Namensauflösung bekommt als zweite Zeile den Nameserver des lokalen Netzes! Dieser Eintrag wird benötigt, damit später apt-get funktioniert. Löschen Sie diese Zeile wieder, bevor Sie das System zum Rootserver kopieren.

    search meinedomain.xyz
    nameserver 192.168.1.1
    nameserver 81.169.163.104
    nameserver 81.169.163.106

    In der Datei /etc/network/interfaces stehen die Netzwerkeinstellungen wie IP-Adressen, DHCP-Client zur Konfiguration etc. Am sichersten ist es, Sie ermitteln mit den Befehlen ifconfig und route die aktuelle Konfiguration. Beim Strato-Rootserver ergab sich (address, netmask, broadcast und gateway bitte einrücken):

    auto lo
    iface lo inet loopback
    auto eth0
    iface eth0 inet static
    address 85.214.xx.221
    netmask 255.255.255.255
    broadcast 85.214.xx.221
    gateway 85.214.xx.221

    Bei Stratos Konfiguration mit 32er-Netzmasken muss der Gateway auf die eigene Adresse zeigen. Bei vielen anderen Providern dürfte die DHCP-Konfiguration problemlos funktionieren:

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

  • Für den Fall, dass beim Start das Netzwerk nicht aktiviert werden kann, ist es wichtig, eine serielle Konsole verwenden zu können. Achten Sie darauf, dass die Datei /etc/inittab die folgende Zeile enthält:

    S0:12345:respawn:/sbin/getty -L ttyS0 57600 vt102

    Diese Konsole sollte zudem als sicher gekennzeichnet sein, wozu der Eintrag in der Datei /etc/securettys dient:

    ttyS0

  • Nächster Schritt ist die /etc/fstab mit den Dateisystemen des Rootservers. Sie nimmt die Partitionierung der Festplatte vorweg (wenn Sie Extlinux als Bootloader verwenden, s.u., dann muss die Bootpartition zwingend ext2/ext3 sein!). Für unser Testsystem habe ich neben der Wurzelpartition und Swap eine kleine Bootpartition am Anfang der Festplatte und eine Partition für /var vorgesehen.

    /dev/hda5 / ext3 defaults 0 1
    /dev/hda1 /boot ext2 defaults 0 0
    /dev/hda3 /var ext3 defaults 0 0
    /dev/hda2 none swap sw 0 0

  • Nun ist das Debian-Paketmanagement an der Reihe. Die /etc/apt/sources.list habe ich von einem gewöhnlichen Ubuntu-System übernommen. Vermutlich werden Sie Kleinigkeiten ändern wollen:

    deb http://de.archive.ubuntu.com/ubuntu/ dapper main restricted
    deb-src http://de.archive.ubuntu.com/ubuntu/ dapper main restricted

    deb http://de.archive.ubuntu.com/ubuntu/ dapper-updates main restricted
    deb-src http://de.archive.ubuntu.com/ubuntu/ dapper-updates main restricted

    deb http://de.archive.ubuntu.com/ubuntu/ dapper universe
    deb-src http://de.archive.ubuntu.com/ubuntu/ dapper universe

    deb http://security.ubuntu.com/ubuntu dapper-security main restricted
    deb-src http://security.ubuntu.com/ubuntu dapper-security main restricted

  • Es folgt das erste Sicherheitsupdate und die Installation für den späteren Bau des Kernels benötigter Pakete, sowie des SSH-Servers:

    apt-get update
    apt-get upgrade
    apt-get install build-essential zlib1g-dev libncurses-dev wget

    apt-get install ssh

    Wenn Sie in der /etc/ssh/sshd_config den Port des Daemons auf einen anderen als 22 legen, so dass kein vom Host belegter Port beansprucht wird, können Sie sich nach einem Neustart des Daemons per SSH im chroot anmelden.

  • Für das Testsystem habe ich einen Vanilla-Kernel von kernel.org vorgesehen und im chroot heruntergeladen und dort entpackt:

    cd /usr/local/src
    wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.16.27.tar.bz2
    tar xvjf linux-2.6.17.7.tar.bz2
    cd linux-2.6.17.7
    Das Ncurses-Interface für die Kernelkonfiguration ist schlank und einfach zu bedienen. Vergewissern Sie sich, dass Treiber für die Netzwerkkarte, das Dateisystem der Rootpartition und den IDE- oder SATA-Controller fest einkompiliert sind. Alternativ können Sie natürlich Module bauen und sicvh mit der Syntax von mkinitramfs vertraut machen:

    make menuconfig
    make
    make install

    Der Befehl make install wird mit einem Fehler abbrechen, weil kein Bootloader installiert ist. Kein Problem, denn der Kernel liegt bereits in /boot, es folgen die (wenigen) Module:

    make modules_install

  • Aufgeräumt ist schnell in erster Linie müssen nicht mehr benötigte DEB-Archive und der Tarball mit den Kernelquellen dran glauben:

    rm -f /var/cache/apt/archives/*.deb
    rm /usr/local/src/linux*.tar.bz2

  • Die Vorbereitung des Debiansystems ist nun abgeschlossen. Verlassen Sie die chroot-Umgebung mit exit und hängen Sie /proc und /dev/pts aus:

    umount /tmp/bootstrapped/proc
    umount /tmp/bootstrapped/dev/pts

Vorbereiten des Rootservers

Jetzt steht die Vorbereitung des Rootservers und das Kopieren des vorbereiteten Systems zum Server an. Aktivieren Sie hierfür die serielle Konsole (falls Ihr Provider eine anbietet) und starten Sie das Rettungssystem. Dort führen Sie die folgenden Schritte durch:

  • Mit fdisk löschen Sie die vorhandenen Partitionen und legen Sie diese entsprechend Ihrer /etc/fstab an. Setzen Sie die Bootpartition (falls Sie eine haben oder alternativ die Wurzelpartition) aktiv oder bootfähig. Verzichten Sie nicht auf die Swap-Partition, da ausgelagerte Speicherseiten den Cache der Dateisysteme beschleunigen können.
  • Formatieren Sie die eben angelegten Partitionen, für die Bootpartition habe ich ext2 gewählt, weil diese den Bootloader extlinux aufnehmen soll:

    mkfs.ext2 /dev/hda1
    mkfs.ext3 /dev/hda3
    mkfs.ext3 /dev/hda5
    mkswap /dev/hda2

    Erstellen Sie Mountpoints und binden Sie die frisch formatierten Partitionen ein:

    mkdir /tmp/ubuinstall
    mkdir /tmp/ubuinstall/boot
    mkdir /tmp/ubuinstall/var

    mount /dev/hda5 /tmp/ubuinstall
    mount /dev/hda3 /tmp/ubuinstall/var
    mount /dev/hda1 /tmp/ubuinstall/var

  • Der Große Moment! Von Ihrem Rechner zuhause starten Sie den Transfer des vorbereiteten Ubuntu-Systems zum Rootserver:

    rsync -avzHP /tmp/bootstrapped/ root@85.214.xx.221:/tmp/ubuinstall/

    Rsync arbeitet mit Komprimierung und überträgt nur geänderte Dateien. Wenn die Übertragung abbrechen sollte, starten Sie diese einfach neu — rsync wird nach einer kurzen Prüfung dort weitermachen, wo es aufgehört hat. Rechnen Sie mit netto 200 bis 300 MB übertragenen Daten, bei DSL1000 kann dies einige Stunden dauern…

  • Es folgt die Installation des Bootloaders. Da der Grub des Rettungssystems auf unserem Testserver nicht funktionierte, entschieden wir uns für Extlinux, einen schlanken Bootloader, der die Installation auf einer aktiven Partition voraussetzt und einen DOS-MBR verwendet:

    cd /tmp
    wget http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-3.11.tar.bz2
    tar xvjf syslinux-3.11.tar.bz2
    cd syslinux-3.11

    Zuerst wird der MBR der ersten Festplatte überschrieben, dann folgt der eigentliche Bootloader:

    cat mbr.bin > /dev/hda
    ./extlinux/extlinux /tmp/ubuinstall/boot/

    Extlinux nutzt eine Konfigurationsdatei extlinux.conf, die ebenfalls im Boot-Verzeichnis liegen muss:

    SERIAL 0 57600

    DEFAULT vmlinuz-2.6.16.27
    APPEND root=/dev/hda5 ro console=ttyS0,57600
    TIMEOUT 150
    PROMPT 1

    Da Extlinux die serielle Konsole des Servers verwenden kann, aktivieren wir diese. Im Gegensatz zu LILO kann Extlinux das ext2/ext3-Dateisystem lesen, auf dem der Bootloader residiert. Das erlaubt das Booten von Kerneln, die nicht in der extlinux.conf eingetragen sind.

Das war es schon! Wenn Sie sich nun an der seriellen Konsolle einloggen, alle Partitionen (sowie /proc und /dev/pts) aushängen und den Rootserver rebooten, können Sie an der seriellen Konsole die Bootmeldungen des Systems verfolgen. Ein Login sollte als root sowohl auf der seriellen Konsole als auch per SSH möglich sein.

Deaktivieren Sie anschließend das Root-Login per SSH, legen Sie einen Nutzer an, der su oder sudo verwenden darf und installieren Sie die benötigten Serverapplikationen. Zudem sollten Sie mit dpkg-reconfigure locales und tzconfig Zeichensatz und Zeitzone einstellen.

15 thoughts on “Ubuntu 606-LTS auf Strato-Rootserver

  1. Thomas

    Hallo,

    Zitat aus dem Howto:
    mount /dev/hda5 /tmp/ubuinstall
    mount /dev/hda3 /tmp/ubuinstall/var
    mount /dev/hda1 /tmp/ubuinstall/var

    sollte es in der letzten Zeile so heißen? ;)
    mount /dev/hda1 /tmp/ubuinstall/boot

  2. Gothie

    Hallo,

    sehr gutes Tut/Faq, aber ich bekomme ums heidanei die umount /tmp/bootstrapped/proc nach getaner Arbeit nicht mehr umound. Jedes Mal scheitert es daran, an was kann das liegen?

    MfG

    Gothie

  3. grassi

    Also /tmp unter ubuntu ist tückisch. Ich hab vor dem abschließenden rsync ‘nen reboot gemacht, und /tmp war wieder leer… Ich empfehle eher /bootstrap/ oder so zu nutzen.

    Ansonsten interesantes howto. Grüße.

Comments are closed.