PXE Boot und Kickstart

From Bitbull Wiki
Jump to navigation Jump to search

1 Skriptgeführte Installationen mit Linux

Seit sich Linux im professionellen IT-Umfeld Akzeptanz geschaffen hat, kommen ganz klar auch die Ansprüche an eine automatische Installation ohne Benutzereingriff.

Diese Installationsart wird vor allem in folgenden Gebieten benötigt: Hochverfügbarkeit

Im Falle einer kompromitierung des Systems oder eines unerwarteten Hardware Ausfalls. Hier soll das System innert kürzester Zeit neu installiert zur verfügung stehen. OEM-Installationen & Cluster

Um eine grössere Menge von Systemen aufzusetzen ist eine Skriptbasierte Lösung nicht mehr weg zu denken. =Die Voraussetzungen= (Red Hat Linux) Um eine Skriptgeführte Installation vorzunehmen muss man folgende Voraussetzungen erfüllen:

2 Bootmedium

Um ein Betriebssystem zu Installieren muss das System neu gestartet werden und damit der Datenträger dieses Systems neu Installiert werden kann, darf natürlich nicht von diesem Gebootet werden. Hier werden meisstens Floppy, CD, DVD oder PXE verwendet.

3 Installationsquelle

Hier kann zwischen lokalen Quellen (CD, DVD, Partition) und Netzwerk Freigaben (FTP, HTTP, NFS) gewählt werden. Wobei die Grafische Kickstart Installation nur via CD, DVD und NFS gestartet werden kann. Die übrigen Installtionsmethoden können im Text-Modus gestartet werden.

4 Das Kickstart Konfigurations File

Hier kommt die Steuerdatei zum tragen. Sie enthält im Mindesten die Informationen, welche wir bei der Installation manuell vornehmen würden.

5 Den Installations Server konfigurieren

Als erstes muss der Kickstart-Server mal installiert werden. Hierbei sind keine besonderen Vorkehrungen zu treffen. Aber nun trotzdem einige Punkte, welche die Installation erleichtern:

  • Die Partition /var sollte genügend Platz für die Installationsmedien bieten
  • Statische IP-Adressierung verwenden.
  • NFS-Server installieren.
  • Folgende Dienste/Packete sollten Installiert werden:
    • nfs server
    • tftp server
    • dhcp server
    • syslinux

6 Die Konfiguration des Servers

In den folgenden Beispielen zeigen wir eine mögliche Serverkonfiguration für einen Installationsserver. Bitte beachten Sie hier, dass Sie die unten genannten Pfade und Netzwerk Adressen gemäss Ihrer Installation vergeben. Die an der Konsole eingegebenen Befehle sind als root auszuführen. Das kopieren der Installationsmedien

mkdir -p /var/ftp/pub/rel4
chmod -R a+rx /var/ftp
mount /media/cdrom
cd /media/cdrom
cp -auf . /var/ftp/pub/rel4
cd
eject /media/cdrom
mount /media/cdrom
cd -
cp -auf . /var/ftp/pub/rel4

7 NFS-Freigabe einrichten

echo '/var/ftp/pub 192.168.0.0/255.255.255.0(ro,sync)' >> /etc/exports
chkconfig nfs on
/etc/init.d/nfs restart

Prüfen, ob die NFS-Freigabe funktioniert

showmount -e 192.168.0.254
mkdir -p /mnt/ks-server
mount 192.168.0.254:/var/ftp/pub /mnt/ks-server
ll /mnt/ks-server

8 Das Kickstart File erstellen

Unter Red Hat nennt man die Installations Skripte, welche vom Anaconda Setup Installer eingelesen werden als Kickstart-Dateien bezeichnet. Dies sind einfache Text Dateien, welche ohne grosse Vorkenntnisse barbeitet werden können. Eine Ausführliche Erklärung dazu kann man auf der dokumentations CD finden. Ein für unsere Umgebung funktionierendes Bespiel finden Sie im Unten.

Man kann diese mit einem config Tool erstellen, welches die Menus des Anaconda Installers nachbildet. Nach erfolger definition der Installation speichert man diese dann einfach ab (z.B. auf Disketten) und verwendet diese beim Setup.

Ebenfalls liegt nach jeder Installation ein Kickstart-File unter: /root/anaconda-ks.cfg welches die aktuelle Installation beschreibt. In dieser Datei ist die Partitionierung auskommentiert. Das Setup würde hier bei der Partitionierung ganz einfach stehen bleiben und nachfragen, wie das Akutelle System partitioniert werden soll.

9 Booten von CD

Um nun eine Kickstart Installation anzustossen verwenden wir im einfachsten Fall eine CDROM. Zum booten geeignet sind die CD1 der Installations CDs oder das boot.iso, welches sich auf der CD1 im Verzeichnis images befindet.

Nach dem booten erscheint nun der boot: Prompt und erinnert uns, das wir eine Installation beginnen. Hier übergeben wir folgende Option:

boot: linux ks=floppy

Dies bewegt anaconda dazu auf einer eingelegten Diskette nach ks.cfg zu suchen. So können wir ganz leicht verschiedene Konfigurationen auf Diskette ablegen und verwalten.

Die Diskette sollte im Format ext2 oder msdos (fat) formatiert worden sein.

10 Booten in der PXE Umgebung

Um Installationen unabhängig von einem physikalischen Boot Medium durchzuführen kann PXE verwendet werden. In diesem Fall wird eine mini Linux Umgebung via TFTP in den Arbeitsspeicher geladen, welche danach die Linux Installation anstösst.

Eine saubere DNS Umgebung ist hier empfehlenswert, aber nicht zwingend. Wir werden hier eine schnell realisierbare Variante ohne DNS Server installieren.

11 DHCP-Server Konfiguration

Konfigurieren Sie /etc/dhcpd.conf gemäss dem Beispiel im Anhang1 Bitte Beachten Sie, dass die Subnets und Server Adressen angepasst werden.Um MAC-Adressen im Netzwerk einzusammeln können Sie wie folgt vorgehen:

ping -c 3 -b 192.168.0.255 && arp -a

Diese können dann nach Bedarf in dhcpd.conf eingetragen werden.

Danach wird der DHCP-Server aktiviert und geprüft:

chkconfig dhcpd on
service dhcpd restart
tail /var/log/messages

Wenn Sie am Kickstart Server mehrere Netzwerkkarten installiert haben, dann vergessen Sie nicht, das aktive Interface in /etc/sysconfig/dhcpd zu definieren. z.B. DHCPDARGS=eth0 PXE-Linux Umgebung einrichten

Die benötigten Daten bereitstellen:

cd /var/ftp/pub/rel4/images/pxeboot/
cp -auf * /tftpboot/
cp /usr/lib/syslinux/pxelinux.0 /tftpboot/
mkdir /tftpboot/pxelinux.cfg

Und nun übergeben wir noch via PXE die geeigneten Parameter, welche zur installation benötigt werden.

vi /tftpboot/pxelinux.cfg/default
default linux
label linux
kernel vmlinuz
# append has to be ONE SINGLE line (append ist the last line)
append initrd=initrd.img root=/dev/ram3 ramdisk_size=32000 ks=nfs:192.168.0.254:/kickstart/workstation.cfg

12 Boot Prozess

Wenn der Client dann via PXE bootet, wie findet er dann die PXE Konfigurations Datei? Das ganze läuft wie folgt ab:

  • Es wird versucht ein Konfigfile mit der MAC-Adresse des Client zu finden. z.B.: 00-90-F5-0D-0C-D2 oder 0090F50D0CD2
  • Wird diese MAC abhängige Konfigurationsdatei nicht gefunden, so wird nach der von uns erstellten default Datei gesucht.
  • Aus dieser Konfiguration und dem Sinn und Zweck von PXE ist es natürlich nicht sinnvoll das Kickstart-File via Diskette einzulesen! ;)

13 NFS-Freigabe für die Kickstart Files erzeugen

mkdir /kickstart
echo '/kickstart 192.168.0.0/255.255.255.0(ro,sync)' >> /etc/exports
/etc/init.d/nfs restart

Nun kopieren wir unser Kickstart File einfach nach /kickstart, wo es dan via PXE übergeben wird (/kickstart/workstation.cfg).

Um den Ablauf via PXE ein wenig zu entwirren schauen wir hier mal die Reihenfolge der Prozesse an:

  • BIOS der Maschine initialisiert sich
  • Gemäss Konfiguration wird via NIC gebootet
  • PXE (pxelinux.0) sucht nun nach einer geeigneten Steuerdatei (default)
  • Diese wird geladen, und entpackt gemäss unseren Angaben die Initial Ramdisk (initrd.img) in den Arbeitsspeicher (/dev/ram3)
  • Nun wird der Kernel (vmlinuz) in die initrd geladen und der init Prozess stösst den Anaconda Installer an.
  • Dieser sucht gemäss unseren Angaben das via NFS ausgelegte Kickstart-File
   (ks=nfs:192.168.0.254:/kickstart/workstation.cfg).
  • Im Kickstart-File ist sind alle zur Installation benötigten Angaben, die Installation beginnt.

Wird via CDROM gebootet, sieht der Ablauf wie folgt aus:

  • BIOS der Maschine initialisiert sich
  • Gemäss Konfiguration wird via CDROM gebootet
  • Der Bootloader fragt uns nach der Art der Installation (linux ks=floppy)
  • Die Initial Ramdisk wird von der CD (isolinux/initrd.img) in den Arbeitsspeicher entpackt.
  • Der Kernel (isolinux/vmlinuz) wird in die initrd geladen und der init-Prozess stösst den anaconda-Installer an.
  • Dieser sucht gemäss unseren angaben auf der Diskette nach der Kickstart-Datei (ks.cfg)
  • Im Kickstart-File ist sind alle zur Installation benötigten Angaben, die Installation beginnt.

Anhang1 dhcpd.conf

ddns-update-style none;
subnet 192.168.0.0 netmask 255.255.255.0 {
       option routers 192.168.0.254;
       option subnet-mask 255.255.255.0;
       option domain-name "littau.credo-systems.ch"; 
       option domain-name-servers 192.168.0.254;
       default-lease-time 21600;
       max-lease-time 43200;
       range  192.168.0.1 192.168.0.199;
       # my dhcp, KS-Server & DNS-Server IP is:  192.168.0.254
       # for cdrom booting (linux=ks)
       # filename "/kickstart/workstation.cfg"; 
       next-server 192.168.0.254;
       # name of the pxe bootloader program
       filename "pxelinux.0"; 
       host station2.littau.credo-systems.ch {
               hardware ethernet 00:C0:9F:4E:47:83;
               fixed-address 192.168.0.2;
       }
       host station1.littau.credo-systems.ch {
               hardware ethernet 00:C0:9F:4E:49:1B;
               fixed-address 192.168.0.1;
       }
       host station99.littau.credo-systems.ch {
               hardware ethernet 00:10:A4:E2:11:36;
               fixed-address 192.168.0.99;
       }
}

Anhang2: workstation.cfg

install
nfs –server=server1.littau.credo-systems.ch --dir=/var/ftp/pub/rel4
lang de_DE.UTF-8
langsupport --default=de_CH.UTF-8 de_CH.UTF-8
keyboard sg-latin1
xconfig --card "S3 ProSavage KM133" --resolution 1024x768 --depth 16 --startxonboot  --defaultdesktop gnome
network --device eth0 --bootproto dhcp
# rootpw redhat
rootpw --iscrypted $1$tivikuF3$.k22q.uMpAyhWcdy3gIoG/
#reboot
#interactive
firewall --disabled
selinux --disabled
authconfig --enableshadow --enablemd5
timezone Europe/Zurich
bootloader --location=mbr --append="rhgb quiet"
clearpart --all --drives=hda
%packages
@ admin-tools
@ editors
@ system-tools
@ german-support
@ text-internet
@ gnome-desktop
@ base-x
@ web-server
@ server-cfg
@ graphical-internet
kernel
lvm2
grub
e2fsprogs
%pre
%post
chkconfig firstboot off
useradd guest && echo guest | passwd guest --stdin

14 Links

PXELinux – Homepage

How to Install Red Hat Linux via PXE and Kickstart

PXE Boot Server Installation - Mini Howto bzw. Kurzanleitung