[HowTo] Debian Installation mit Installer über SSH

X

xelra

Jungspund
Hallo liebes Forum,

heute schreibe ich ein kleines HowTo für euch. Eigentlich schreibe ich es für mich selbst, damit ich es mir speichern kann und wenn ich es wieder brauche hier nachschlagen kann. Aber bevor ich es als Textdokument auf meiner Platte verrotten lasse, dachte ich mir, dass ich euch alle teilhaben lasse.

Also ich stand vor volgendem Problem. Mein Rootserver hat kein Notfallsystem und es sollte aber eine frische Installation von Debian (Etch, weil Lenny wird noch nicht von allen Diensten die ich laufen habe unterstützt) drauf. Nach etwas Recherche dachte ich es ginge nur mit debootstrap. Das erinnerte mich etwas nostalgisch an Gentoo Zeiten, denen ich gerade wegen des hohen Potenzials für menschliche Fehler den Rücken gekehrt hatte.

Dann bin ich darauf gestoßen, dass man doch einfach seinen eigenen Netboot Installer für Debian kompilieren könnte und da SSH aktiviert. Dann bootet man den Installer wie eine CD, aber von Festplatte und SSH und GO!

Und genau das beschreibe ich nun für euch hier kurz und knapp.

ICH MUSS AUSDRÜCKLICH DARAUF HINWEISEN, DASS IHR EURE, MIT DIESEM HOWTO ERSTELLTEN, BOOT IMAGES AUF JEDEN FALL ERST IN EINER VMWARE TESTEN SOLLTET UND SIE DANN ERST AUF EUREM ROOTSERVER ZUR NEUINSTALLATION VERWENDEN SOLLTET! WENN EUER INSTALLER MIT EINER FEHLERMELDUNG FAILED, DANN MUSS EINER VON HAND DEN SERVER REBOOTEN!

Als erstes installieren wir benötigte Pakete:
Code:
apt-get install vim dpkg-dev fakeroot

Verzeichnis wechseln und Sourcen holen:
Code:
cd /root
apt-get source debian-installer

Verzeichniswechsel:
Code:
cd /root/debian-installer-*/build

Abhängigkeiten afulösen:
Code:
apt-get build-dep debian-installer

Verzeichniswechsel und überprüfen der Abhängigkeiten (nach diesem Befehl sollte NICHTS kommen!):
Code:
cd /root/debian-installer-*/
dpkg-checkbuilddeps


Nun werden wir den Config-Dateien für die verschiedenen Architekturen allen (eigentlich bräuchte es nur die eine, die ihr dann auch verwendet) in der ersten Zeile ein "network-console" einfügen. Das ist sozusagen der kleine Hack, der es uns erlaubt den Installer über SSH anzusprechen:
Code:
cd /root/debian-installer-*/build/pkg-lists/netboot
sed -i '1s/.*$/network-console\n&/g' *.cfg

Kommen wir zum Herzstück der ganzen Geschichte. Der Preseed-Datei. Mit ihr kann man so ziemlich alles machen. Auch voll automatische Installationen. Wir wollen aber nur eine sehr einfach Preseed-Datei, die auch jeder fortgeschrittene Rootserver-Administrator verseht und modifizieren kann, ohne Schnickschnack. Schließlich wolen wir ja nur einen Server Installieren und nicht eine voll automatische Installation an eine 500 PCs umfassende Infrastrukur deployen.

Als erstes lassen wir die Config-Datei auf unsere Preseed-Datei, die wir gleich erstellen werden, zeigen. Sie soll in /tmp liegen:
Code:
vi /root/debian-installer-*/build/config/common

Hier ändern wir die Zeile "PRESEED=" zu:
Code:
PRESEED = /tmp/preseed.cfg

Wir erstellen nun die Preseed-Datei, aber nicht in /tmp, weil da ist sie ja nach einem Reboot gleich verschwunden:
Code:
cd /root/debian-installer-*/build
vim preseed.cfg

Und das hier kommt rein in die minimalistische Preseed-Datei (natürlich an euer System angepasst):
Code:
d-i debconf/priority select critical
d-i auto-install/enabled boolean true
d-i debian-installer/locale string en_US
d-i console-keymaps-at/keymap select de
d-i languagechooser/language-name-fb select English
d-i debian-installer/locale select en_US.UTF-8
d-i netcfg/choose_interface select eth0
d-i netcfg/disable_dhcp boolean true
d-i netcfg/get_nameservers string 208.67.222.222
d-i netcfg/get_ipaddress string <xxx.xxx.xxx.xxx>
d-i netcfg/get_netmask string 255.255.255.0
d-i netcfg/get_gateway string <xxx.xxx.xxx.xxx>
d-i netcfg/confirm_static boolean true
d-i netcfg/get_hostname string <hostname>
d-i netcfg/get_domain string localdomain
d-i network-console/password password <password>
d-i network-console/password-again password <password>

Wenn ihr euch eine größere Preseed-Datei auotmatisch generieren lassen wollt, dann empfehle ich euch auf Instalinux mal vorbei zu schaun.

Die Preseed-Datei noch nach /tmp kopieren und unseren Netboot-Installer kompilieren:
Code:
cp /root/debian-installer-*/build/preseed.cfg /tmp
cd /root/debian-installer-*/build/
fakeroot make rebuild_netboot

Jetzt sollten sich unsere Images in /root/debian-installer-*/build/dest/netboot/debian-installer/<arch> zu finden sein.

Diese Images sollten entsprechend den nächsten Schritten jetzt erstmal in einer virtuellen Maschine getestet werden um zu sehen, ob Sie einwandfrei funktionieren, oder beim booten ein Fehler angezeigt wird. Einfach um das ganze so realistisch wie möglich zu gestalten per SSH auf die virtuelle Maschine zugreifen und alles per "remote" machen.

Also die Images kommen jetzt auf die /boot-Partition:
Code:
mkdir /boot/installer
cp /root/debian-installer-*/build/dest/netboot/debian-installer/<arch>/linux /boot/installer/
cp /root/debian-installer-*/build/dest/netboot/debian-installer/<arch>/initrd.gz /boot/installer/

Und in GRUB werden
Code:
vi /boot/grub/menu.lst

folgende Einträge geschrieben (an erster Stelle, denn es soll ja unseren Installer automatisch nach dem Reboot starten):
Code:
title Netboot-Installer
root (hd0,0)
kernel /installer/linux
initrd /installer/initrd.gz locale=en_US console-keymaps-at/keymap=de

Bei mir ist übrigens alles Englisch, mit deutscher Tastatur. Es ist mir auch absolut schleierhaft, wieso sich ein Sys-Admin für eine andere Sprache als Englisch entscheiden sollte. Allein schon wegen Debugging und Fehlersuche.

So sollte des GRUB-Setup funktionieren, wenn ihr /boot auf /dev/sda1 habt. Solltet ihr noch ein anderes Partitionsschema haben, dann solltet ihr euch eigentlich soweit mit GRUB auskennen um es entsprechend anzupassen. Solltet ihr das GRUB-Setup verkacken, tja, dann heißt es wohl Support anrufen. Eine zweite Chance gibt es nicht.

Wenn wir jetzt rebooten:
Code:
reboot

Dann sollten wir nach 1-2 Minuten per SSH auf unsere Maschine, mit der in der preseed.cfg angegebenen IP und dem darin angegebenen Passwort für "network-console", zugreifen können. Der Benutzer nachdem uns der Netboot-Installer frägt ist "installer".

Ab hier sollte alles eine ganz simple Debian Installation sein, so wie wir sie alle kennen, wenn wir von CD installieren. Ich hoffe ich konnte ein paar Rootserverbesitzern da draußen helfen.

Übrigens sollte euch aufgefallen sein, dass euer Installer genau die Architektur hat, welche das System hat auf dem ihr Ihn erstellt habt. Wenn jemand weiß, wie man den Installer auch für eine andere Architektur kompilieren kann, der soll sich gerne melden, dann werde ich es diesem HowTo hinzufügen.

Bei Fragen stehen ich gerne NICHT! zur Verfügung. :D

Schöne Grüße

Xel'Ra
 
Zuletzt bearbeitet:
Mehr Robustheit

Ja, aber vorher soll dieses HowTo noch Robustheit bekommen.

Ich würde mich sehr freuen, wenn jemand mithilft, wie man das anstellen könnte.

Es geht um Folgendes: Zur Zeit ist der Reboot ziemlich kritisch, denn wenn man GRUB falsch konfiguriert hat oder der Installer eine Fehlermeldung oder Abfrage startet BEVOR die Netzwerkkonfiguration initialisiert ist, dann "hängt" das System und muss manuell rebootet werden.

Dazu habe ich mir folgendes gedacht: Man könnte den Netboot-Installer an 2ter Stelle (also nicht default) in GRUB eintragen und dann mithilfe von GRUB-Reboot, welches man in seinem vorigen System installiert, einmalig den Netboot-Installer starten.
Bei einem weiteren Reboot wäre dann wieder das Ursprungssystem das zu bootende System.

Um das funktionieren zu lassen müsste man 2 Dinge machen, die ich nicht weiß wie man Sie lösen kann:

1. Falls Grub mit einem Fehler abbricht und überhaupt nichts bootet, dann wartet GRUB auf das drücken einer Taste und rebootet dann erst. Das müsste man GRUB "abgewöhnen", so dass in diesem Falle ein automatischer Reboot kommt.

2. Man müsste in den Netboot-Loader mit einbauen, dass er irgendwie auch rebootet. Das könnte man z.B. bewerkstelligen indem man den Netboot-Loader so verändert, dass er nach z.B. 1 Std. Uptime automatisch rebootet. Somit würde das System nach einer Stunde wieder ansprechbar sein.

Falls jemand für das 2te eine bessere Lösung hat, soll er es bitte vorschlagen.

Ich wrüde sagen, wenn man diese beiden Dinge noch realisieren kann, dann ist diese Installationsmethode eine ziemlich sichere und wohl die komfortabelste und einfachste Methode um einen Remote-Install zu machen.

Ich freue mich auf eure Vorschläge.

Mit freundlichen Grüßen

Xel'Ra
 
Zuletzt bearbeitet:
Morgen,

evtl kann man hier mit der failback arbeiten.

http://www.gnu.org/software/grub/manual/html_node/Booting-fallback-systems.html

Ich werde es jedenfalls die Tage mal ausprobieren.

mfg
HeadCrash


Also Fallback im Grub hat mir zumindest meine Testmaschine gerettet und das normale System gestartet.
Code:
#
# Rettungsleine
#
default saved
fallback 1

title    Netboot-Installer
###
### TYPO
###
root    (hd0,0=)
###
### /TYPO
###
kernel  /boot/installer/linux
initrd   /boot/installer/initrd.gz locale=en_US console-keymaps-at/keymap=de


title           Debian GNU/Linux, kernel 2.6.26-2-686
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.26-2-686 root=/dev/sda1 ro quiet
initrd          /boot/initrd.img-2.6.26-2-686
 
Zuletzt bearbeitet:
Fallback

Ja, ich glaube Fallback ist eine schönere Lösung als GRUB-Reboot. Allein schon weil es direkt mit eingebaut ist.

Das löst das Problem mit Kernel-Panics und allem anderen, was den Boot-Prozess angeht.

Bleibt aber immer noch die Frage: Wie bekommt man den Netboot-Installer dazu das System zu restarten, wenn er erfolgreich geladen wurde, aber es nicht bis zu dem Punkt schafft, an dem man sich per SSH anmelden kann. Sei es weil man so schusselig war und die Netzerkkonfiguration falsch gemacht hat oder weil der Installer bei einer Frage bezüglich der Sprache hängen bleibt (das mit der Sprache sollte eigentlich nicht passieren. BÖSE BÖSE! Da hat wohl einer seinen Installer nicht in einer virtuellen Maschine getestet! xD).

Wenn das noch gelöst ist, dann ist das hier eine super Methode auch für Unerfahrene seinen Server neu zu installieren.

Grüße

Xel'Ra
 
Hmm der Installer startet ja ne BusyBox hier evtl in die /etc/inittab einen Eintrag "reboot -d 3600 -f" vornehmen.
Nur sollte man vor dem reboot dafür sorgen das als nächstes nicht wieder der Installer geladen wird.

Also eher ein Konstrukt
Code:
sleep 3600 && mount /dev/sda1 /mnt && cp /mnt/boot/grub/menu.lst_backup /mnt/boot/grub/menu.lst && reboot -f
 

Ähnliche Themen

Keine grafische Oberfläche (Debian Installation)

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

Samba 4 Gast Zugang unter Ubuntu funktioniert nicht

Windows clients können nicht mehr auf lange laufendes System zugreifen

Debian squeeze, Webmin, Samba Freigaben

Zurück
Oben