Lange habe ich cobbler benutzt als Installations-Server, aber irgendwie hätte ich lieber etwas einfacheres. Ein simpler TFTP-Server reicht für meine Zwecke eigentlich vollkommen, da ich die Repositories (Fedora, Alpine Linux, Debian und Scientific Linux) mit trivialen Scripts spiegele. Dieses Daten benutze ich dann auch für LiveCDs und so ist es einfacher, wenn ich mit rsync die Sache erledige. Ein weiterer Punkt ist, dass ich bei den meisten Installationen, sei für physikalische Maschinen oder virtuelle, von einer Minimal-Installation starte und dann mit Bcfg2 den Rest erledige. Ebenfalls möchte ich andere Dinge einfach in den Installationsserver integrieren können, beispielsweise alix-rescue.
Vor über fünf Jahren habe ich mal mit einem Artikel im Fedorawiki angefangen. Er scheint aber nicht auf extremes Interesse gestossen zu sein. Also hier mal eine etwas aktuellere Version. Ich benutze Fedora 18 Alpha als Basis-System.
1 |
yum -y install tftp-server syslinux |
Der tftp
-Server muss nur minimal angepasst werden. disable = yes muss in der Datei /etc/xinetd.d/tftp
auf no gesetzt werden.
1 |
vi /etc/xinetd.d/tftp |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# default: off # description: The tftp server serves files using the trivial file transfer \ # protocol. The tftp protocol is often used to boot diskless \ # workstations, download configuration files to network-aware printers, \ # and to start the installation process for some operating systems. service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4 } |
Exemplarisch erstelle ich nun die Basis für eine Fedora 17-Installation. Damit es nicht ein allzu grosses Chaos gibt, gruppiere ich die entsprechenden Dateien in Unterverzeichnissen.
1 |
cd /var/lib/tftpboot/ && mkdir -p fedora |
Nun die zwei Dateien vmlinuz
und initrd.img
herunterladen.
1 2 |
curl http://ftp-stud.hs-esslingen.de/pub/fedora/linux/releases/17/Fedora/x86_64/os/images/pxeboot/vm linuz -o fedora/vm linuz-f17 curl http://ftp-stud.hs-esslingen.de/pub/fedora/linux/releases/17/Fedora/x86_64/os/images/pxeboot/init rd.img -o fedora/init rd-f17.img |
memtest
ist immer dabei, es soll auch bei mir nicht fehlen. Zuerst wieder ein Verzeichnis anlegen
1 |
mkdir -p memtest |
und nun die Datei herunterladen.
1 |
curl http://ftp-stud.hs-esslingen.de/pub/fedora/linux/releases/17/Fedora/x86_64/os/isolinux/memtest -o memtest/memtest |
Die erste Datei, welche beim Start geladen wird, ist pxelinux.0, sie ist Teil von syslinux
und muss in unser Wurzelverzeichnis des tftp-Servers kopiert werden.
1 |
cp /usr/share/sys linux/pxelinux.0 /var/lib/tftpboot/pxelinux.0 |
menu.c32 hilft bei der Darstellung der Auswahl. Ein bisschen schöner als nichts 😉
1 |
cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/menu.c32 |
Die Konfiguration wird in die Datei default in Verzeichnis pxelinux.cfg geschrieben, da sie nicht existiert, muss sie angelegt werden.
1 |
mkdir -p pxelinux.cfg && touch pxelinux.cfg/default |
Jedes System braucht einen Eintrag in der Konfigurationsdatei. In diesem Fall werden drei Einträge, einer für den lokalen Start, einer für die Installation und einer für memtest, eingefügt.
1 |
vi pxelinux.cfg/default |
Eine einfache Konfiguration ohne Schnickschnack sieht so aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# PXE boot options prompt 0 default menu.c32 menu title Rebuild and diagnosis options timeout 100 # Launch local installation label local menu label Start system from local storage localboot 0 # Launch installation of Fedora 17 label install-f17 menu label Launch installation of Fedora 16 kernel fedora/vml inuz-f17 append initrd=fedora/initrd-f17.img repo=http://mirror2.hs-esslingen.de/fedora/linux/releases/17/Fedora/x86_64/os/ # 'repo=' zeigt bei mir auf meinem Mirror # Memtest label memdisk menu label Memtest kernel memtest/memtest |
Die Verzeichnisstruktur sieht nun so aus.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[root@localhost tftpboot]# tree . |-- fedora | |-- initrd-f17.img | `-- vmlinuz-f17 |-- memtest | `-- memtest |-- menu.c32 |-- pxelinux.0 |-- pxelinux.cfg | `-- default `-- syslinux |-- extlinux.conf `-- message.txt |
Nun ist es Zeit den das Ganze in Bewegung zusetzen. Zuerst muss der Dienst gestartet werden:
1 |
# systemctl start xinetd.service |
Der Status sieht ohne weitere Konfiguration bei mir so aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# systemctl status xinetd.service xinetd.service - Xinetd A Powerful Replacement For Inetd Loaded: loaded (/usr/lib/systemd/system/xinetd.service; disabled) Active: active (running) since Sun, 23 Sep 2012 20:29:09 +0200; 5s ago Process: 6186 ExecStart=/usr/sbin/xinetd -stayalive -pidfile /var/run/xinetd.pid $EXTRAOPTIONS (code=exited, status=0/SUCCESS) Main PID: 6187 (xinetd) CGroup: name=systemd:/system/xinetd.service └ 6187 /usr/sbin/xinetd -stayalive -pidfile /var/run/xinetd.pid Sep 23 20:29:09 localhost xinetd[6187]: removing discard Sep 23 20:29:09 localhost xinetd[6187]: removing echo Sep 23 20:29:09 localhost xinetd[6187]: removing echo Sep 23 20:29:09 localhost xinetd[6187]: removing rsync Sep 23 20:29:09 localhost xinetd[6187]: removing tcpmux Sep 23 20:29:09 localhost xinetd[6187]: removing time Sep 23 20:29:09 localhost xinetd[6187]: removing time Sep 23 20:29:09 localhost xinetd[6187]: xinetd Version 2.3.15 started with libwrap loadavg...in. Sep 23 20:29:09 localhost xinetd[6187]: Started working: 1 available service Sep 23 20:29:09 localhost systemd[1]: Started Xinetd A Powerful Replacement For Inetd. |
Auf die DHCP-Konfiguration gehe ich hier nicht weiter ein, da es viele unterschiedliche Möglichkeiten gibt und ich momentan nur an einer Lösung mit pfSense interessiert bin.
Es wird sicher nicht alles funktionieren, aber der grösste Teil ist nun erledigt. Vielleicht regnet es morgen auch, denn dann findet ich sicher einen Augenblick zu weitermachen.