|
|

Übersicht
Für unseren Netzwerkboot braucht es einige Anforderungen, die jedoch in den meisten Fällen nicht sonderlich kompliziert sind. Wie auch immer, durchschnittliche Linux Kenntnisse sollten aber vorhanden sein, was jedoch kein Problem darstellen sollte, da Leute die sich einen Netzwerkboot einrichten wollen zumeist sowieso ein Netzwerk haben mit Linux als Server.
Was wir brauchen für unseren Netzwerkboot:
- Ein Linux (Wir nehmen und empfehlen hier Debian Linux)
- DHCP Server
- TFTP (Trivial FTP)-, bzw. Booting Server
- Ein, übers Netzwerk bootbarer bootloader (meistens sysLinux)
- Ein PC, der von der Netzwerkkarte Booten kann ;-)
Falls der DHCP Server in einer gesicherten Umgebung liegt, bzw. nicht direkt am Internet angeschlossen ist, kann man den TFTP-Server getrost auf der gleichen Maschine wie der DHCP installieren und von diesem aus booten.
Falls nicht, sollte man den TFTP Server nach Möglichkeit auf eine andere Maschine legen. Da TFTP keinerlei Sicherheitsmassnahmen implementiert hat ist dieses Protokoll sehr unsicher.
Da man den "Booting-Server" aber ja in der Regel nicht immer braucht, reicht es hier auch mit VMWARE eine Virtuelle Maschine zu erstellen und darauf Linux mit einem TFTP Server und dem Bootimage zu installieren. -Dies haben wir so gemacht bei unseren Tests und hat übrigens prima geklappt! ;-)
Im Nachfolgenden werden wir, soweit möglich auf beide Varianten eingehen: Entweder alles auf einer Maschine, oder ein DHCP-Server und ein TFTP-Server auf getrennten Rechnern, da es sich nur minimal unterscheidet.
Der Vorgang ist dabei relativ simpel: Zuerst holt der client sich vom DHCP-Server eine IP-Adresse. Dieser gibt dem client die IP und dazu gleich auch noch den Namen der booloader-Datei: "pxelinux.0" (dies ist der SYSLINUX bootloader).
Der client holt sich dann über tftp diesen Bootloader und lädt ihn.
Der bootloader zeigt dann ganz normal einen boot-promt an; standardmässig ist dessen Konfiguration in der Datei: "./pxelinux.cfg/default"
Diese default-datei sieht ähnlich aus wie eine ganz normale bootloader-konfiguration:
SAY Initialisiere Netzwerk-Boot...
PROMPT 1
TIMEOUT 0
DEFAULT install
DISPLAY boot.txt
F1 f1.txt
F2 f2.txt
F3 usw.txt
LABEL install
kernel debian-installer/i386/linux
append vga=normal initrd=debian-installer/i386/initrd.gz --
Diese gibt folgendes an:
SAY: Gibt eine Meldung am Bildschirm aus, kurz bevor der Booloader startet
PROMT: Damit wird der "boot:" promt angezeigt oder unterdrückt
TIMEOUT: Gibt die Zeit in 1/10 Sekunden an, nach dieser automatisch der default-kernel gestartet wird; 0 deaktiviert das timeout
DEFAULT: Gibt den default-kernel an
DISPLAY: Definiert eine Datei, die der Bootloader anzeigt; dies kann z.B ein boot-menü sein
F1-F9: Diese Textdateien werden angezeigt, wenn man F1, F2, usw. drückt; so kann man zusätzliche "Hilfeseiten" einbauen
LABEL Definition des Kernels und dessen append-parameter
Hinweis: Auf der SYSLINUX Seite finden sich noch erweiterte Konfigurationsoptionen dieser Datei.
Vorbereitung: Eine einfache Netwerkboot-Umgebung einrichten
Zur Veranschaulichung: In diesen Beispielen hat der dhcp-server die IP: 10.0.0.1, der fileserver: 10.0.0.3 und die boot-clients: 10.0.0 .70,.71,usw.
TFTP-Server
Im ersten Schritt geht es darum einen TFTP-Server einzurichten.
TFTP steht für (T)rivial (F)ile (T)ransfer (P)rotocol und ist so was wie eine extrem abgespeckte Variante des FTP Protokolls.
Den TFTP-Server kann man nun entweder auf dem gleichen Rechner wie der DHCP installieren, oder auf einem separaten, in Netzwerk ansprechbarem Rechner.
Eignen tun sich unter debian die Produkte atftp oder tftpd-hpa. Debian empfiehlt hier den zweiteren; unter RedHat / CentOS heisst dieser: "tftp-server"
Den tftp-client installieren wir auch gleich dazu, weil man damit gut die Verbindung zum tftp-server testen kann.
Bei Debian reicht ein: apt-get install tftp tftpd-hpa syslinux Bei anderen RedHat, SUSE muss man das betreffende RPM-File runterladen und mit: rpm -i [packetname] installieren.
Danach muss man den TFTP-Server konfigurieren, dazu öffnen wir die Datei: '/etc/default/tftpd-hpa' und tragen folgendes ein:
RUN_DAEMON="yes"
OPTIONS="-l -s /boot/tftpboot"
Nun noch das Home-Verzeichnis für den TFTP-Server erstellen und die Berechtigungen setzen:
mkdir /boot/tftpboot
chown nobody:nogroup /boot/tftpboot
chmod 550 /boot/tftpboot
Am besten erstellt man hier für jede system-gruppe das der Boot-Server anbieten soll noch ein extra Verzeichnis; wir machen dies hier für Debian, CentOS und Gentoo:
mkdir -p /boot/tftpboot/{debian,centos,gentoo}
Nun braucht man eine Konfiguration, die anweist welches Image man laden will. Fürs erste nehmen wir hier das Debian-Netinstall Image, da dieses alle benötigten Dateien (pxelinux.0 und pxelinux.cfg/default) schon mitbringt und so sehr einfach zu installieren ist:
cd /boot/tftpboot/debian
wget http://ftp.de.debian.org/debian/dists/etch/main/installer-i386/current/images/netboot/netboot.tar.gz
tar -xvzf netboot.tar.gz
Das wars schon. Nun sollte man testen, ob alles klappt:
cd /root
/etc/init.d/tftpd-hpa start
tftp localhost
get /debian/netboot.tar.gz
quit
ls
Sehen wir nun eine 'netboot.tar' file und bekommen keine Fehlermeldung hat alles geklappt!
Dann ist der TFTP-Server breit zum booten und wir können uns den DHCP-Einstellungen widmen.
DHCP-Server
Im zweiten Schritt muss nun ein funktionierender Linux DHCP-Server eingerichtet werden. Wie das geht, steht im Beitrag: DHCP
Nun müssen wir eine neue Gruppe für die boot-clients und einige Zeilen bei der Datei /etc/dhcpd.conf hinzufügen:
group
{
allow booting;
allow bootp;
filename "/debian/pxelinux.0";
server-name "gateway";
next-server 10.0.0.3;
host vmnetboottest
{
hardware ethernet 00:00:00:00:00:00;
fixed-address 10.0.0.70;
filename "/debian/pxelinux.0";
}
}
Diese Zeilen bedeuten:
allow booting/bootp: Das booten erlauben und das boot-protokoll aktivieren.
filename: Dies ist die bootloader Datei, die dem Client übergeben wird.
server-name: Dies ist der Name des DHCP-Servers
next-server: Dies der Name oder IP Adresse des Servers auf dem das Bootimage liegt; wenn...
- TFTP auf dem gleichen Rechner läuft ist diese Zeile nicht notwendig, bzw. es sollte die IP Adresse des boot-servers da stehen
- TFTP auf einem separaten 'booting-server' liegt, muss man hier der Name, bzw. IP Adresse dieses Servers geben, von diesem wird dann das Bootimage über TFTP geladen
Dies ist eigentlich auch schon der einzige unterschied zwischen einem und zwei Servern... ;-)
In der Gruppe "host" sind hostnamen und MAC-Adresse des clients übergeben (dies bitte noch anpassen!) - Wie man sieht kann man damit die im oberen Teil angegebenen Werte überschreiben; hier ist die zusätzliche filename-Zeile nur zur ilustration dar, da dies oben schon angegeben wurde und so standardmässig den debian bootloader laden würde, falls im host-block keine andere Datei angegeben wurde.
Nun kann man die Datei speichern und den dhcpd mit: /etc/init.d/dhcpd reload Neustarten.
Nun den Netzwerk-bootfähigen PC aufstarten; es sollte nach dem initialisieren der Netzwerkkarte das Debian-Install Menu erscheinen.
Webserver
Ein zusätzlicher Webserver auf dem boot-server erlaubt es später Konfigurations-Scripts nachzuladen oder ganze repositories lokal zu führen:
apt-get install apache2
Optimierungen
Nach Gruppen sortieren
Das ganze lässt sich jetzt noch etwas optimieren; vielleicht will man ja nur einigen PCs das booten per Netzwerk erlauben, oder für verschiedene PCs andere Systeme ab Netzwerk booten?
Deswegen ist es am besten man legt innerhalb des subnet-blocks einen neuen group{} Block an:
# NET BOOT
group
{
filename "/debian/pxelinux.0";
server-name "gateway";
next-server 10.0.0.3;
host netboottest
{
hardware ethernet 00:10:DC:1D:D5:32;
fixed-address 10.0.0.70;
}
}
In diesem Beispiel darf nur der PC 'netboottest' mit der MAC-Adresse: '00:10:DC:1D:D5:32' vom Netzwerk starten; er bekommt eine statische IP (10.0.0.70) und als Bootimage: 'pxelinux.0' zugewiesen.
Bootloader anpassen
Der bootloader kann auch für jeden client einzeln konfiguriert werden.
Dazu muss man lediglich im Verzeichnis "pxelinux.cfg" eine Datei (analog der Datei "default") anlegen, die entweder als Dateiname die MAC-Adresse des clients, oder dessen IP in HEX-Form enthält.
Da man sich diese Varianten beide nicht so gut merken kann, wird am besten ein symlink angelegt.
Wir konfigurieren nun also eine separate bootloader Datei für den client mit der IP-Adresse: 10.0.0.70:
# gethostip 10.0.0.70
10.0.0.70 10.0.0.70 0A000046
# cp -pv /boot/tftpboot/debian/pxelinux.cfg/default /boot/tftpboot/debian/pxelinux.cfg/0A000046
# ln -s /boot/tftpboot/debian/pxelinux.cfg/0A000046 /boot/tftpboot/debian/pxelinux.cfg/host01
Wenn wir nun diese Datei: "/boot/tftpboot/debian/pxelinux.cfg/0A000046 /boot/tftpboot/debian/pxelinux.cfg/host01" öffnen, können wir darin die bootloader Optionen anpassen. Hier fällt sicher die Zeile:
display boot.msg auf. Wenn diese geöffnet wird, sehen wir dass hier nichts anderes steht als das "boot-menu"; dieses kann natürlich ganz nach belieben angepasst werden.
Anwendungsbeispiele
RedHat / CentOS automatisiert installieren
Mit "kickstart" bieteten RedHat und CentOS eine einzigartige Möglichkeit Sytsme übers Netzwerk zu installieren; doch zuerst muss wieder mal die Verzeichnisstruktur vorbereitet werden:
wget http://mirror.switch.ch/ftp/mirror/centos/5.2/isos/i386/CentOS-5.2-i386-netinstall.iso
mkdir /mnt/CentOS-5.2-i386-netinstall
mount CentOS-5.2-i386-netinstall.iso /mnt/CentOS-5.2-i386-netinstall -t iso9660 -o loop
mkdir -p /boot/tftpboot/centos/pxelinux.cfg
cd /boot/tftpboot/centos/
wget http://mirror.switch.ch/ftp/mirror/centos/5.2/os/i386/images/pxeboot/vmlinuz
wget http://mirror.switch.ch/ftp/mirror/centos/5.2/os/i386/images/pxeboot/initrd.img
cp /usr/lib/syslinux/pxelinux.0 /boot/tftpboot/centos/
Nun legen wir wieder die default-Konfigurationsdatei /boot/tftpboot/centos/pxelinux.cfg/default an und füllen es mit folgendem Inhalt:
default linux
label linux
kernel vmlinuz
append ksdevice=eth0 local_ramdisk=1 prompt_ramdisk=0 ramdisk_size=16384 initrd=initrd.img network ks=http://10.0.0.3/pxe/centos/kickstart/default.ks
Nun schaffen wir in der /etc/dhcpd.conf eine neue Gruppe: "CENTOS HOSTS":
### CENTOS HOSTS ###
group
{
filename "/centos/pxelinux.0";
next-server 10.0.0.3;
host testclient
{
hardware ethernet 00:00:00:00:00:00;
fixed-address 10.0.0.72;
}
Nun muss noch der webserver getunt werden: mit mkdir -p /var/www/html/pxe/centos/kickstart legen wir ein Webverzeichnis für CentOS an.
Nun schreiben wir folgendes in die Datei: /var/www/html/pxe/centos/kickstart/default.ks:
# Kickstart file automatically generated by anaconda.
install
url --url http://mirror.switch.ch/ftp/mirror/centos/5.2/os/i386/
repo --name=updates --baseurl=http://mirror.switch.ch/ftp/mirror/centos/5.2/updates/i386/
lang en_US.UTF-8
keyboard de-latin1-nodeadkeys
network --device eth0 --bootproto dhcp
rootpw --iscrypted $1$jiosajd98sas9d3
firewall --enabled --port=22:tcp
authconfig --enableshadow --enablemd5
selinux --enforcing
timezone --utc Europe/Berlin
bootloader --location=mbr --driveorder=hda
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
#clearpart --linux --drives=hda
#part /boot --fstype ext3 --size=100 --ondisk=hda
#part pv.2 --size=0 --grow --ondisk=hda
#volgroup VolGroup00 --pesize=32768 pv.2
#logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow
#logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=256 --grow
--maxsize=512
Hinweis: Über die pxelinux.cfg kann für jeden Host eine Datei erstellt werden; darin kann man dann auch für jeden Host eine eigene kickstart.ks angeben. ;-)
Danke an: internet-proffessionell: Server-Installationen automatisieren für diesen Beitrag
Linux installer booten
Wie man Beispielsweise einen Debian installer übners Netzwerk bootet steht im obigen Beispiel genau beschrieben. ;-)
Notfallkonsole vom Netzwerk booten
Da der gentoo "installer" bereits eine fertige Konsole mitbringt, lässt sich dieser gut als "Notfallkonsole" verwenden, in dieser man aber auch gleich gentoo installieren kann.
Zuerst muss hier ein gentoo-minimal.iso heruntergeladen- und gemounted werden; dann muss man die Dateien darin in ein temporäres Verzeichnis kopieren, das init-script patchen und das ganze wieder verpacken:
mkdir -p /root/gentoo-pxe/{isolinux,tmp}
wget http://mirror.switch.ch/ftp/mirror/gentoo/releases/x86/current/installcd/install-x86-minimal-2008.0.iso
mkdir /mnt/install-x86-minimal-2008.0
mount install-x86-minimal-2008.0.iso /mnt/install-x86-minimal-2008.0 -t iso9660 -o loop
cd /mnt/install-x86-minimal-2008.0
cp -pv image.squashfs /root/gentoo-pxe/
cd /mnt/install-x86-minimal-2008.0/isolinux
cp -pv gentoo gentoo.igz isolinux.cfg /root/gentoo-pxe/isolinux/
cd /root/gentoo-pxe/tmp/
zcat ../isolinux/gentoo.igz | cpio -idv
mkdir -p mnt/cdrom
cp -pv /root/gentoo-pxe/image.squashfs /root/gentoo-pxe/tmp/mnt/cdrom
wget http://www.thegibson.org/blog/files/gentoo/gentoo_init.patch
patch init gentoo_init.patch
find * | cpio --quiet --dereference -o -H newc | gzip -9 > ../gentoo.igz
cp -pvR /root/gentoo-pxe/isolinux/* /boot/tftpboot/gentoo/
cp -pv /root/gentoo-pxe/gentoo.igz /boot/tftpboot/gentoo/
cp -v /usr/lib/syslinux/pxelinux.0 /boot/tftpboot/gentoo/
mkdir -p /boot/tftpboot/gentoo/pxelinux.cfg
cp -pv /root/gentoo-pxe/isolinux/isolinux.cfg /boot/tftpboot/gentoo/pxelinux.cfg/default
Nun müssen wir noch das Konfigfile in pxelinux.cfg erstellen/anpassen und "real_root=/" an die APPEND-Zeile anhängen:
/boot/tftpboot/gentoo/pxelinux.cfg/default
default gentoo
label gentoo
kernel gentoo
append root=/dev/ram0 init=/linuxrc dokeymap looptype=squashfs loop=/image.squashfs cdroot initrd=gentoo.igz vga=791 real_root=/
Nun müssen wir noch die Datei: /etc/dhcpd.conf anpassen und hineinschreiben:
filename "/gentoo/pxelinux.0";
next-server 10.0.0.3;
Achtung: Da hier kein Host definiert ist, wird dieses System bei jedem Host übers Netzwerk gebootet, der nicht zusätzlich separat definiert ist!
Danke für den Hinweis zur gentoo-anleitung an thegibson.org: More pxelinux tricks
Windows (unattended) install booten
Beschreibt wie man die Windows-Installation (ggf. vollautomatisch) booten vom Netzwerk booten kann.
Hinzugefügt am: 05.04.2006
Geändert am: 22.09.2008
Related Links
Related Downloads
User Anmerkungen
3 User Anmerkungen zu dieser Seite [Anmerkung hinzufügen]
|
| | Anonym (patrick.hieber@...) 20.11.2008 |
bei "Notfallkonsole vom Netzwerk booten": der gentoo_init.patch funktioniert nur mit dem 2007er image
Wie gehts mit dem aktuellen 2008.0 ? |
| |
| Anonym (space24@...) 11.06.2007 |
Hi
Das mit dem Damm Small Linux geht bei mir nicht es kommt immer
Can't finde Knoppix filesystem... |
| |
| Anonym (nospam@...) 26.06.2006 |
| Das mit dem DSL-Netboot wäre schön, wenn es denn funktionieren würde ... Leider weiß der Kernel nicht, wo er das Knoppix-Image denn herholen soll, denn PXE ist zu dem Zeitpunkt bereits wieder weg, und dem Kernel hat keiner gesagt, daß er das file per tftp holen könnte ... |
| |
0 Beiträge zu dieser Seite im Forum [Zum Forum]
|
|