Network Booting

back
Booten met een pxe client van een bootserver

installatie tftpserver
tftp-server: remap-file
aanpassen dhcpd.conf
de /tftpboot dir
demo en logging
bartpe cd booten
SuSE 11.0 booten
vmware 3.5 pxe boot
troubleshooting

Nodig:

linux koekje met dhcp en tftp server
pxe client (bijvoorbeeld een vmware guest)
speeltijd

D'r vanuit gaande dat de linux server al draait met een normale dhcpd.

Installatie van tftp server:

venus:/tmp # rpm -ivh /media/dvd/tftp-0.48-39.i586.rpm

Configuratie van de tftp server:

venus:/tmp # vi /etc/xinetd.d/tftp
# default: off
# description: tftp service is provided primarily for booting or when a \
#       router need an upgrade. Most sites run this only on machines acting as
#       "boot servers".
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -m /etc/tftp.map -v -v -s /tftpboot
        disable                 = no
}

De -m optie verwijst naar een remap-file (voor de windows clients die \boot.ini requesten) en de -v -v is een dubbele debugging, deze is er voor om ook te laten zien dat er sommige bestanden niet aanwezig zijn. Dit kan erg handig zijn met troubleshooting.

Remap-file aanmaken:

Omdat windows achtige clients een "\" gebruiken en unix achtigen een "/" herschrijf ik de backslashes die een client opvraagt naar een slash:

venus:/tmp # vi /etc/tftp.map
# Convert backslashes to slashes
rg \\ /

Herstart de xinetd zodat ook de tftp deamon aanstaat:

venus:/tmp # rcxinetd restart

Dhcp server configureren

Extra regels toevoegen /etc/dhcpd.conf
Toevoegen voor de subnets (dit kan natuurlijk ook met de yast-dhcpd tool)

venus:/tmp # vi /etc/dhcpd.conf
#--PXE boot------
next-server venus.solarsystem.lan;
filename "pxelinux.0";
allow booting;
allow bootp;

Snelle uitleg:

next-server is de tftp boot server naam of ip adres
filenaam is de naam die de pxe client krijgt als hij een request doet voor de netwerk boot.

Denk eraan, na een edit van de dhcpd.conf even deze te reloaden:

venus:/tmp # rcdhcpd reload

De tftpboot dir

Zorgen voor wat files in de /tftpboot dir zodat je in ieder geval een menuutje krijgt als je boot:

Alles begint met de /tftpboot/pxelinux.cfg/default
# default

#default harddisk
#default rescue
default vesamenu.c32
# default menu.c32
prompt 0

menu title default Boot Menu
# screen width
menu width 80
# margins to leave over left AND right (menu text width = 80 - 5 - 5 - 2) ?
menu margin 5
# add 3 lines for title, 1 for bottom. next free line is 21
#menu rows 16
menu rows 13
# .. which is this one
menu tabmsgrow 22
# command line overwrites tab message
menu cmdlinerow 22
menu timeoutrow 23
# last row is 25 ?

# rescue from net (using http as tftp ("tftp://servernaam/") doesnt work
label rescue
  menu label ^Rescue system from SuSE 10.3, 1280x1024
  kernel SuSE10.3/i386/loader/linux
  append initrd=SuSE10.3/i386/loader/initrd rescue=1 rescue=http://servernaam/SuSE10.3 insecure=1 vga=0x0307 rw

label rescue
  menu label ^Rescue system from SuSE 10.3, 1024x768
  kernel SuSE10.3/boot/i386/loader/linux
  append initrd=SuSE10.3/i386/loader/initrd splash=silent rescue=1 rescue=http://servernaam/SuSE10.3/ vga=0x0305 rw

Demo:

Logging:
venus:/tmp # tail -f /var/log/messages
Apr  6 21:34:59 venus dhcpd: DHCPDISCOVER from 00:0c:29:e1:92:29 via eth0
Apr  6 21:34:59 venus dhcpd: DHCPOFFER on x.x.x.x to 00:0c:29:e1:92:29 via eth0
Apr  6 21:35:01 venus dhcpd: DHCPREQUEST for x.x.x.x (x.x.x.x) from 00:0c:29:e1:92:29 via eth0
Apr  6 21:35:01 venus dhcpd: DHCPACK on x.x.x.x to 00:0c:29:e1:92:29 via eth0
Apr  6 19:35:01 venus in.tftpd[16745]: RRQ from x.x.x.x filename pxelinux.0
Apr  6 19:35:01 venus in.tftpd[16745]: tftp: client does not accept options
Apr  6 19:35:01 venus in.tftpd[16746]: RRQ from x.x.x.x filename pxelinux.0
Apr  6 19:35:01 venus in.tftpd[16766]: RRQ from x.x.x.x filename pxelinux.cfg/564d6ebe-ce46-0d26-bd83-03868de19229
Apr  6 19:35:03 venus in.tftpd[16779]: RRQ from x.x.x.x filename pxelinux.cfg/564d6ebe-ce46-0d26-bd83-03868de19229
Apr  6 19:35:03 venus in.tftpd[16780]: RRQ from x.x.x.x filename pxelinux.cfg/01-00-0c-29-e1-92-29
Apr  6 19:35:03 venus in.tftpd[16781]: RRQ from x.x.x.x filename pxelinux.cfg/2C80A875
Apr  6 19:35:03 venus in.tftpd[16782]: RRQ from x.x.x.x filename pxelinux.cfg/2C80A87
Apr  6 19:35:03 venus in.tftpd[16783]: RRQ from x.x.x.x filename pxelinux.cfg/2C80A8
Apr  6 19:35:03 venus in.tftpd[16784]: RRQ from x.x.x.x filename pxelinux.cfg/2C80A
Apr  6 19:35:03 venus in.tftpd[16785]: RRQ from x.x.x.x filename pxelinux.cfg/2C80
Apr  6 19:35:03 venus in.tftpd[16786]: RRQ from x.x.x.x filename pxelinux.cfg/2C8
Apr  6 19:35:03 venus in.tftpd[16787]: RRQ from x.x.x.x filename pxelinux.cfg/2C
Apr  6 19:35:03 venus in.tftpd[16788]: RRQ from x.x.x.x filename pxelinux.cfg/2
Apr  6 19:35:03 venus in.tftpd[16789]: RRQ from x.x.x.x filename pxelinux.cfg/default
Apr  6 19:35:03 venus in.tftpd[16790]: RRQ from x.x.x.x filename /vesamenu.c32

Korte uitleg:

Wat je eigenlijk zit gebeuren is dat de client eerst probeert een bootfile op te halen met het mac-adres van zijn netwerk kaart. Krijgt hij die niet aangeboden, blijft hij het zo lang doorvragen totodat de

PXE boot

Als alles werkt, kun je de debugging mode van de /etc/xinetd.conf/tftp uitzetten (de -v uit de regel weghalen)

server_args             = -m /etc/tftp.map -s /tftpboot

tijdelijk ter naslag:
Windows pe boot:
copy bcd.0 en ntdetect.com naar /tftpboot
zet de winpe.wim in de /tftpboot/x86 dir en hernoem hem naar boot.wim
kopieer een Boot dir naar /tftpboot/Boot
maak een softlink naar deze dir met een kleine letter boot
venus:/tftpboot # ln -s Boot boot
Menu toevoegen aan default:
label menu
        kernel /menu.c32
        append /menu/winpe.conf
edit /tftpboot/menu/winpe.conf
MENU TITLE PXE bootmenu
label winpetest
        MENU LABEL ^Windows PE
        kernel /bcd.0

BartPE cd booten

stapppenplan
maak een bartpe dir aan in de /tftpboot dir
# mkdir /tftpboot/bartpe

Maak hier een winnt.sif
venus:/tftpboot/bartpe # vi winnt.sif
[SetupData]
BootDevice = "ramdisk(0)"
BootPath = "\i386\System32\"
OsLoadOptions = "/noguiboot /fastdetect /minint /rdexportascd /rdpath=BartPE.ISO"

(kopieer achteraf de t:\bartpe\* bestanden naar de tftp server /tftpboot/bartpe)

Regel een windows 2003 cd en kopieer wat bestanden in de bartpe dir:
Y:\I386>expand startrom.n1_ t:\bartpe\startrom.0
Microsoft (R) File Expansion Utility  Version 5.2.3790.0
Copyright (c) Microsoft Corporation. All rights reserved.

Expanding startrom.n1_ to t:\bartpe\startrom.0.
startrom.n1_: 9167 bytes expanded to 24514 bytes, 167% increase.

Y:\I386>expand setupldr.ex_ t:\bartpe\NTLDR
Microsoft (R) File Expansion Utility  Version 5.2.3790.0
Copyright (c) Microsoft Corporation. All rights reserved.

Expanding setupldr.ex_ to t:\bartpe\ntldr.
setupldr.ex_: 133697 bytes expanded to 280064 bytes, 109% increase.

Y:\I386>copy ntdetect.com t:\bartpe
        1 bestand(en) gekopieerd.

Omdat we het niet voor elkaar krijgen windows een subdir aan te geven, even snel wat links maken:

Venus:/tftpboot # ln -s bartpe/NTLDR NTLDR
Venus:/tftpboot # ln -s bartpe/winnt.sif winnt.sif
Venus:/tftpboot # ln -s bartpe/BartPE.ISO BARTPE.ISO

Bak daarna een extra menu optie voor de nieuwe BartPE

venus:/tftpboot/pxelinux.cfg # vi default
toevoegen aan het einde:

label bartpe
  menu label ^BartPE iso
  kernel bartpe/startrom.0

BartPE pakket downloaden op http://www.nu2.nu/pebuilder/#download
en natuurlijk installeren.

Een keer draaien: (vul de gegevens in, Y:\ is de windows 2003 R2 SP2 cd)

Bartpe Voorbeeld

Kopieer de bartpe.iso naar /tftpboot/bartpe/BartPE.ISO

Probeer te booten:

Gebootte bartpe


SuSE 11.0

Alhoewel SuSE geen pxe map meer heeft op de SuSE cd/dvd en iets met kiwi wil doen wat ik niet kan begrijpen, vind ik het booten via pxe voor de installatie nog steeds handig. Het is alleen iets meer gepuzzel.

Mount de SuSE dvd en kopieer de volgende bestanden naar bijvoorbeeld /tftpboot/suse110
boot/x86_64/loader/initrd
boot/x86_64/loader/linux

Maak vervolgens een suse.conf aan in de /menu dir:

vi suse.conf

default menu.c32
prompt 0
MENU ROWS 13
MENU MARGIN 3
MENU HELPMSGROW 19
MENU HELPMSGENDROW -1

MENU TITLE SuSE Linux installs
label back
        MENU LABEL ^Back to the mainmenu
        KERNEL menu.c32
        APPEND /menu/main.conf

label suse110
        MENU LABEL SuSE Linux 11.0
        kernel suse110/linux
        append initrd=/suse110/initrd ram_disk=65536 install=nfs://44.128.168.2/media/linux/suse/110 splash=silent showopts

label suseresc110
    MENU LABEL SuSE Linux 11.0 rescue
    kernel suse110/rescue
    append initrd=/suse103/initrd ramdisk_size=65536 insmod=e1000 insmod=tg3 install=nfs://44.128.168.2/media/linux/suse/103/ rescue=1

(Die rescue weet ik nog niet zeker, moet ik nog verder mee spelen)

VMWare 3.5 pxe boot

Om VMWare zonder tussenkomst van CD's te installeren, is zo'n bootservertje ook wel handig. Laat nu net zo zijn dat ik op het werk 4 vmware koekjes in elkaar moest zetten op Blade servers, alwaar de CD ondersteuning een beetje waardeloos langzaam is.

In het kort:

Download op de vmware site de installatiecd.
Mount deze als loopback device op je installatieserver of zet de bestanden over.

venus:/media/install/vmware/esx/35> ls -l
total 574520
-rw-r--r-- 1 gej users 587726848 2008-05-14 20:58 esx-3.5.0_Update_1-82663.iso
venus:/media/install/vmware/esx/35> mount -o loop esx-3.5.0_Update_1-82663.iso /media/install/vmware/esx/35/

Exporteer deze via nfs

# vi /etc/exports
/media/install/vmware/esx/35/   *(ro,no_subtree_check)

venus:/media/install/vmware/esx/35 # rcnfsserver restart
Shutting down kernel based NFS server: nfsd statd mountd idmapd       done
Starting kernel based NFS server: idmapd mountd statd nfsd sm-notify  done
venus:/media/install/vmware/esx/35 #                             

Kopieer de initrd.img en de vmlinuz naar de tftp server.

venus:/media/install/vmware/esx/35/images/pxeboot # cp initrd.img vmlinuz /tftpboot/esx35/

Menukeuze aanmaken:

label esx35
        kernel esx35/vmlinuz
        append ksdevice=eth0 initrd=esx35/initrd.img ramdisk_size=32768 ks=http://home.gejanssen.com/esx01.ks

Let wel, als je deze gebruikt veegt hij alle lokale schijven leeg en begint geheel opnieuw.

Voorbeeld Kickscript file:
Hierin heb ik twee dingen gekozen. Voor elke server automatisch en snel te installeren maak ik dus voor elke server een eigen .ks file met vooraf ingevulde naam en ip adres.
Verder heb ik voor elke plek waar je een tftp server of nfs server hebt voor de "bestanden" 192.168.10.1 ingevuld:

########### ESX KICKSTART SCRIPT ##############
# +-------------------------------+
# | Begin default ESX 3.x install |
# +-------------------------------+
# | Eerlijk gejat van:            |
# | Author:  Gabrie van Zanten    |
# | thegabeman@gmail.com          |
# +-------------------------------+
# +-----------------------------------------------+
# | Kickstart section to be executed after %PRE   |
# +-----------------------------------------------+

# Regional Settings
keyboard us
lang en_US
langsupport --default en_US
timezone --utc Europe/Amsterdam

# Installatition settings
#skipx
mouse none
firewall --disabled

# Unencrypted root password (replace by your own)
#rootpw --iscrypted $1$5a17$VQby/1fu4eyyzu5EWkf.c0
rootpw welkom
reboot
install
# Location of UDA server
#url --url http://x.x.x.249/esx/esx301/
nfs --server=192.168.10.1 --dir=/media/install/vmware/vmware/esx35/

# Driver disks

# Load drivers

# ignoredisk to prevent installation on SAN
# This might NOT work for other brands than HP
# HP has its first disk on cciss/c0d0, LUNs are seen as sda, sdb, etc
ignoredisk drives=sda,sdb,sdc,sdd,sde,sdf,sdg,sdh,sdi,sdj,sdk

# Bootloader options
bootloader --location=mbr --driveorder=cciss/c0d0

# Authentication
auth --enableshadow --enablemd5

# Partitioning
# clearpart = erase all disks!!!!
clearpart --all --drives=cciss/c0d0 --initlabel
part /boot --fstype ext3  --size 250 --asprimary  --ondisk=cciss/c0d0
part / --fstype ext3  --size 8192  --asprimary --ondisk=cciss/c0d0
part swap   --size 1600 --asprimary  --ondisk=cciss/c0d0
part /tmp --fstype ext3  --size 1024 --ondisk=cciss/c0d0
part /var/log --fstype ext3  --size 4096  --ondisk=cciss/c0d0
part /usr --fstype ext3  --size 8192 --ondisk=cciss/c0d0
part /opt --fstype ext3  --size 2048 --ondisk=cciss/c0d0
part None --fstype vmkcore  --size 102 --ondisk=cciss/c0d0
part /home --fstype ext3  --size 1024 --ondisk=cciss/c0d0
part None --fstype vmfs3  --size 1 --grow --ondisk=cciss/c0d0

# Loading network configuration from /tmp/networkconfig. This file
# is created in the %PRE section

# Network Configurations
network --device eth0 --bootproto static --ip 192.168.10.13 --netmask 255.255.255.0 --gateway 192.168.10.254 --nameserver 192.168.10.1 --hostname esx01 --addvmportgroup=0

# VMWare License options
vmaccepteula
vmlicense --mode=server --server=27000@192.168.10.1 --edition=esxfull --features=vsmp

%vmlicense_text

%packages
@base

# +--------------------------------------+
# | Start ESX 3.x install                |
# +--------------------------------------+


Troubleshooting

Krijg je de volgende foutmelding in de /var/log/messages:

Apr  6 17:34:02 venus kernel: martian destination 0.0.0.0 from x.x.x.x, dev eth0
waarbij x.x.x.x het ip adres is van de client waar je mee aan het booten bent, dan is de next-server niet goed ingevuld. (verkeerd ipadres of zo) Zie hierboven.

laatste update 05-07-2008
back