Ubuntu Linux PXE-Boot leicht gemacht
Folgendes wird vorausgesetzt:
- Ubuntu 10.04 (Lucid) oder neuer
- TFTP-server
- NFS-server
- DHCP-Server
Ich habe folgende Packet dazu verwendet:
Alle Packete installieren, entweder direkt hier oder via Terminal
apt-get install tftpd-hpa nfs-kernel-server syslinux debootstrap
DHCP-Server
In meinem Fall läuft der DHCP-Server nicht auf dem Server, sondern auf der Router-Firewall (m0n0wall), in welchem ich schlicht und einfach nur den TFTP-Server und die Bootdatei angegeben habe.
TFTP-Server
Um den TFTP-Server installieren, folgenden Befehl eingeben:
apt-get install tftpd-hpa
Es sind keine weiteren Konfigurationen notwendig, der Server stellt foglendes Verzeichnis dem Netzwerk zur Verfügung:
/var/lib/tftpboot/
syslinux
syslinux stellt uns ein tolles fertiggestelltes Boot-Image zur Verfügung.
apt-get install syslinux
Um das PXE-Boot-Image nutzen zu können, muss es ins entsprechende Verzeichnis kopiert werden
cp /usr/lib/syslinux/pxelinux.0 /var/lib/tftpboot/
PXE Verzeichnis
Es gibt zum einen die Datei mit dem Namen default. Diese Datei wird immer geladen, wenn keine client-spezifische Konfigurationsdatei gefunden werden kann. Somit kommen wir zu den client-spezifischen Dateien. Diese Dateien sind auf identische Art und Weise zu erstellen wie die default-Datei, haben jedoch einen anderen Dateinamen.
Diese Dateinamen, können entweder die MAC-Adresse der clientseitigen Netzwerkkarte mit vorangestellter 01 sein (01-XX-XX-XX-XX-XX-XX) oder die IP des Clients in hexadezimaler Form. Beispielweise entspricht die IP-Adresse 192.0.2.91 dem hexadezimalem Wert/Dateiname C000025B. wobei dieser Dateiname auch am Ende gekürzt werden kann, um eine Konfiguration auch für mehrere Clients zu haben. Dies wird Anhand des folgenden grauen Kastens aufgezeigt, denn in diesem Kasten wird die Reihenfolge der Konfigurationsdateiaufrufe angeführt. Wenn eine Konfigurationsdatei nicht vorhanden ist, dann wird die Nächste aufgerufen.
/var/lib/tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd /var/lib/tftpboot/pxelinux.cfg/C000025B /var/lib/tftpboot/pxelinux.cfg/C000025 /var/lib/tftpboot/pxelinux.cfg/C00002 /var/lib/tftpboot/pxelinux.cfg/C0000 /var/lib/tftpboot/pxelinux.cfg/C000 /var/lib/tftpboot/pxelinux.cfg/C00 /var/lib/tftpboot/pxelinux.cfg/C0 /var/lib/tftpboot/pxelinux.cfg/C /var/lib/tftpboot/pxelinux.cfg/default
Mit folgendem Script "ip2hex" kann anhand der IP der Hex-Wert errechnet werden:
#!/bin/sh IP_ADDR=$1 for I in $(echo ${IP_ADDR}| sed -e "s/\./ /g"); do printf '%02X' $I done echo
Man muss nur noch das script mit den entsprechenden Rechten versehen:
chmod 0775 ip2hex
Beispiel für eine default Datei:
DEFAULT menu.c32 ALLOWOPTIONS 0 PROMPT 0 TIMEOUT 100 MENU TITLE Server PXE Boot Menu LABEL localhdd1 MENU DEFAULT MENU LABEL Local ^HDD LOCALBOOT 0 LABEL memtest MENU LABEL ^Memtest86+ KERNEL memtest/mt86plus
NFS-Server
Um den NFS-Server installieren, folgenden Befehl eingeben:
apt-get install nfs-kernel-server
Die Datei /etc/exports bearbeiten resp. erweitern und folgendes eintragen:
/srv/pxeboot 10.0.0.0/8 (rw,no_subtree_check,no_root_squash)
Jetzt noch kurz die Exports aktuallisieren mit:
exportfs -rv
Debootstrap
Um eine Kopie von Ubuntu 10.04 LTS zu installieren, werden wir das Programm debootstrap verwenden.
apt-get install debootstrap
Der Syntax für eine 32Bit Variante sieht wie folgt aus:
debootstrap --arch i386 lucid /srv/pxeboot/ http://ch.archive.ubuntu.com/ubuntu
Für die 64Bit Variante würde der Syntax wie foglt aussehen:
debootstrap --arch amd64 lucid /srv/pxeboot/ http://ch.archive.ubuntu.com/ubuntu
lucid steht für den Codenamen der Version 10.04 LTS, weitere findet ihr hier
Um dann die Installation vollständig konfigurieren und auch noch Packete installieren zu können, müssen wir in das Verzeichnis chrooten, zuerst jedoch noch die wichtigesten Pfade einhängen:
mount -o bind /dev /srv/pxeboot/dev mount -o bind /sys /srv/pxeboot/sys mount -o bind /proc /srv/pxeboot/proc chroot /srv/pxeboot /bin/bash
WICHTIG: Ab hier werden alle Befehle für das zukünftige System ausgeführt!
Um den Hostnamen des zu installierenden Rechners konfigurieren, in meinem Beispiel heisst der Rechner "sonne", führt man folgenden Befehl aus:
echo sonne > /etc/hostname
Danach die Datei /etc/hosts anlegen und den Hostnamen sowie lokale Domäne anpassen:
127.0.0.1 localhost 127.0.1.1 sonne.example.com sonne # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts
Um das System auch von NFS starten zu können, muss folgende Datei bearbeitet werden: /etc/initramfs-tools/initramfs.conf
BOOT=local
ersetzen durch:
BOOT=nfs
Da das System bereits vom PXE eine IP vom DHCP-Server erhalten hat, muss folgende Datei angepasst werden: /etc/network/interfaces
# The loopback network interface auto lo iface lo inet loopback # The primary network interface, commented out for NFS root #auto eth0 #iface eth0 inet dhcp iface eth0 inet manual
Damit das System auch noch den "root" Pfad kenn, muss der NFS-Share in folgende Datei eingetragen werden: /etc/fstab
# /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/nfs / nfs defaults 1 1 none /tmp tmpfs defaults 0 0 none /var/run tmpfs defaults 0 0 none /var/lock tmpfs defaults 0 0 none /var/tmp tmpfs defaults 0 0
Ubuntu (devirate von Debian) brauchen Packetsources, diese werden hier angegeben:
/etc/apt/sources.list
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to # newer versions of the distribution. ## Primary distribution source deb http://ch.archive.ubuntu.com/ubuntu/ lucid main universe #deb-src http://ch.archive.ubuntu.com/ubuntu/ lucid main universe ## Major bug fix updates produced after the final release of the ## distribution. deb http://ch.archive.ubuntu.com/ubuntu/ lucid-updates main universe #deb-src http://ch.archive.ubuntu.com/ubuntu/ lucid-updates main universe ## Security updates deb http://security.ubuntu.com/ubuntu lucid-security main universe #deb-src http://security.ubuntu.com/ubuntu lucid-security main universe
Damit das System nicht jedes Abhängige Packet mitinstalliert, kann diese Datei
/etc/apt/apt.conf.d/00onlydepends mit nachfolgendem Inhalt erstellt werden:
APT::Install-Recommends "0"; APT::Install-Suggests "0";
Jetzt lernt unser System noch unsere lokale Sprache, da wird wie folgt bewerkstelligt:
echo de_CH.UTF-8 UTF-8 > /var/lib/locales/supported.d/local apt-get update apt-get install language-pack-de dpkg-reconfigure console-setup
Unser System brauch auch noch einen Kernel, der wird folgendermassen für 32Bit Systeme installiert:
apt-get -y install linux-image-386
Und für 64Bit so:
apt-get -y install linux-image
Dabei kann man auch noch den Server Kernel angeben, je nach Einsatzzweck.
Sicherheitshalber setzen wir noch das Passwort für den Benutzer root:
passwd root
Anlegen des ersten Benutzers sowie hinzufügen zur sudo Gruppe und Kennwort setzen:
useradd -m -s /bin/bash "benutzername" adduser "benutzername" sudo passwd "benutzername"
Nun setzen wir die Zeitzone noch:
dpkg-reconfigure tzdata
Nun verlassen wir das zukünftige System:
exit
WICHTIG: Ab hier werden alle Befehle auf dem produktivem, aktuellem System ausgeführt!
Nun noch alle Mounts wieder aushängen:
umount /srv/pxeboot/dev umount /srv/pxeboot/sys umount /srv/pxeboot/proc
Nun muss man die beiden Boot-Images kopieren und eine PXE-Datei erstellen und/oder die default Datei erweitern:
mkdir /var/lib/tftpboot/sonne cp /srv/pxeboot/boot/vmlinuz-2.6.32-31-386 /var/lib/tftpboot/sonne/vmlinuz cp /srv/pxeboot/boot/initrd.img-2.6.32-31-386 /var/lib/tftpboot/sonne/initrd.img
und der Inhalt der PXE-Datei:
DEFAULT sonne LABEL sonne KERNEL sonne/vmlinuz APPEND netboot=nfs nfsroot=10.1.1.1:/srv/pxeboot/sonne/ rw initrd=sonne/initrd.img
Und nun viel Erfolg beim Testen und fertig konfigurieren des zukünftigen Systems