PXE boot (startování systému po síti)

V případě velké potřeby či ještě větší lenosti se hodí možnost instalace systémů, či spouštění některých nástrojů po síti. Mezi takové nástroje je možné zařadit i programy pro zálohování disků, nebo spouštění skupin identických systémů. Jak na to je popsáno v tomto článku.

Prostředí:
Interní síť: 192.168.1.0/24
Název lokální domény: firma.local
Název SMB serveru: samba
Nainstalované a fungující:
1) DHCP server, jsem zvyklý na ISC-DHCP
2) APACHE (může být i jiný, ale nastavení je se musí zkonvertovat)
3) Samba (pouze pro Remote Installation Service)
Adresář /pxeboot na svazku, kde je alespoň 32GB volného místa pro veškerý uvedený software.
         |+-RIS (Remote Installation Service)
         |+-diskless (bezdiskové stroje)
         |+-image (obrazy disků)
         \+-pxelinux.cfg (konfigurační adresáře)

V první řadě je nutné nainstalovat potřebný software:
portinstall syslinux tftp-hpa

Následně upravit/zkontrolovat některé soubory, aby obsahovaly potřebné údaje:
Soubor /etc/services musí obsahovat:
tftp    69/tcp    #Trivial File Transfer

Soubor /etc/inetd.conf musí obsahovat:
tftp  dgram  udp  wait  root  /usr/libexec/tftpd    tftpd -l -s /pxeboot
tftp  dgram  udp6  wait  root  /usr/libexec/tftpd    tftpd -l -s /pxeboot

A spustit následující příkazy:
mkdir -p /pxeboot/pxelinux.cfg /pxeboot/image /pxeboot/diskless /pxeboot/RIS
cd /pxeboot
ln -s pxelinux.cfg syslinux.cfg
cp /usr/local/share/syslinux/* .


Následuje nastavené DHCP protokolu. Konfigurační soubor musí obsahovat následující klauzule:
allow booting;
allow bootp;
filename "pxelinux.0";
next-server 192.168.1.1;
option root-path "pxeboot.firma.local:/";


Tím je vyřešen základ konfigurace pro PXE prostředí (nikoliv RPL!). Osobně ještě nastavuji oprávnění pro soubory na 444 (r--r--r--) nobody:nogroup, pro adresáře na 555 (r-xr-xr-x) nobody:nogroup.
Protože TFTP umožňuje poslat na stanici a spustit maximálně 32MB, je nutné dále zvolit jednotlivé kroky. Možnosti jsou následující:
1) Start po TFTP, kdy se obraz disku vejde do 32MB
2) Načtení kernelu po TFTP, kdy obraz disku natáhne zavaděč po NFS nebo HTTP
3) Načtení kernelu po TFTP, kdy soubory budou přístupné na NFS a některé drobnosti uloženy v memfs
4) Načtení základu přes TFTP a zbytek pomocí SMB (tzv. Remote Installation Service - RIS)



Start po TFTP, obraz disku menší než 32MB

1) Do adresáře /pxeboot/image nahrát zvolené obrazy disku.
2) Upravit soubor /pxeboot/pxelinux.cfg/default, například:

label hdt
   menu label Hardware Detection Tool
   kernel hdt.c32
   text help
      Hardware Detection Tool usable for basic system overview.
      More information at http://hdt-project.org
   endtext

label reboot
   menu label Reboot
   kernel reboot.c32
   text help
      Reboot system
   endtext


A zkusit. Hlavní nevýhodou tohoto způsobu jsou v případě načítání různých BOOT CD/LIVE CD problémy se sdílením interface, konkrétně problém s alokací IP adresy, interface se tváří často jako down. Je tomu možné pomoci použitím vhodných parametrů.
Co se týká programu HDT (Hardware Detection Tool), do stejného adresáře, ve kterém se nachází program hdt.c32 je potřeba stáhout i soubor PCI.IDS, sloužící pro identifikaci PCI zařízení. To je možné ze stránek SourceForge, případně v adresáři sloužícímu pro PXE boot tímto příkazem:
wget http://pciids.sourceforge.net/v2.2/pci.ids

Pro FreeBSD před verzí FreeBSD 9 bylo možné s jistými výhradami použít boot celého Bootonly CD. Konfigurace byla následující (příklad):

label fbsd8-BOC-32
   menu label FreeBSD/i386 Production version
   kernel memdisk
   initrd /image/freebsd/freebsd-i386.iso.gz harddisk
   append iso raw
   text help
      FreeBSD bootonly CD, build for 32-bit CPU.
      More information at http://www.freebsd.org
   endtext

label fbsd8-BOC-64
   menu label FreeBSD/amd64 Production version
   kernel memdisk
   initrd /image/freebsd/freebsd-amd64.iso.gz harddisk
   append iso raw
   text help
      FreeBSD bootonly CD, build for 64-bit CPU.
      More information at http://www.freebsd.org
   endtext

V případě problémů je možné rozbalit extrahovat z BootCD soubory do adresáře například /pxeboot/images/freebsd/8x/i386 (stejným způsobem upravit i verzi pro AMD64), modifikovat jeho loader.rc následujícím způsobem:

echo Loading Kernel...
load /image/freebsd/freebsd/8x/i386/boot/kernel/kernel
echo Loading MFS root...
load -t mfs_root /image/freebsd/freebsd/8x/i386/boot/mfsroot
set autoboot_delay=0


A následně v PXE menu zadat:
label fbsd8-mfs-32
   menu label FreeBSD/i386 8.x
   kernel /image/freebsd/freebsd/8x/i386/boot/pxeboot
   text help
      FreeBSD bootonly CD, build for 32-bit CPU.
      More information at http://www.freebsd.org
   endtext




Načtení kernelu po TFTP, obraz disku načtený po NFS, HTTP nebo FTP

Nejprve je nutné nakonfigurovat NFS a Apache (konfiguraci FTP neuvádím) tak, aby byla pomocí těchto protokolů dostupná oblast adresáře /pxeboot. To lze udělat následovně. Pro Apache vytvořit soubor /usr/local/etc/apache22/Include-pxeboot.conf obsahující:
<VirtualHost server.firma.local:80>
   ServerName pxeboot.firma.local
   ServerAdmin webmaster@firma.local
   DocumentRoot /pxeboot
   ErrorLog /var/log/apache/pxeboot-error.log
   CustomLog /var/log/apache/pxeboot-access.log common
   <Directory "/pxeboot">
      AllowOverride None
      Options Indexes FollowSymLinks
      Order allow,deny
      Allow from all
   </Directory>
</VirtualHost>


Podobným způsobem je nutné upravit exporty pro NFS. Zde bude potřeba upravit dva soubory. Jednak pro povolení exportu NFS startovaci /etc/rc.conf následovně:
# NFS
nfs_client_enable="YES"
rpcbind_flags="-h 192.168.1.1"
rpc_lockd_enable="YES"
rpc_statd_enable="YES"
rpcbind_enable="YES"
nfs_server_flags="-u -t -h 192.168.1.1"
mountd_enable="YES"
mountd_flags="-r -h 192.168.1.1"


a poté vlastní soubor pro export zvoleného adresáře /etc/exports, kde je nutné vložit správné cesty. (Pozor, exporty všech cest na jednom volume je nutné vložit na jeden řádek):
/pxeboot -ro -mapall=nobody -network 192.168.1.0 -mask 255.255.255.0

A následně je možné rozšířit startovací menu pro pxeloader /pxeboot/pxelinux.cfg/default, například:
label cloneamd64
   menu label Clonezilla Live/amd64
   kernel /image/clone/amd64/vmlinuz
   append initrd=/image/clone/amd64/initrd.img boot=live live-config noswap nolocales edd=on nomodeset ocs_live_run="ocs-live-general" ocs_live_batch="no" ocs_daemonon="ssh" vga=788 nosplash fetch=http://pxeboot/image/clone/amd64/filesystem.squashfs
   text help
      Disk clone tools, build for 64-bit x86 CPU.
      More information at http://www.clonezilla.org
   endtext

label sysresc64
   menu label SysRescue CD/64-bit
   kernel /image/sysrcd/amd64/rescuecd64
   append initrd=/image/sysrcd/amd64/initram.igz ip=dhcp netboot=http://pxeboot/image/sysrcd/sysrcd.dat
   text help
      System Rescue CD, build for 64-bit CPU.
      More information at http://www.sysresccd.org
   endtext


Tento způsob je možné použít i pro instalační CD a načtení base package z NFS share. Při dostatečně rychlém internetu je to ale hloupost a je lepší použít lokální (ve smyslu country) server obsahující distribuci a instalovat pro internetu. Tuto metodu mám takév oblibě pro načtení zálohovacího software, umožňujícího vytvořit obrazy disku. A to jak pro forenzní audit (dd) tak pro přenos na jiný disk (například pomocí nástrojů na Ultimate BootCD, System Recovery CD, Hiren's Boot CD ...). Bohužel, některé Linux Live CD používají odlišnou parametrizaci, proto je vhodné použít maximum ze zdroje na kernel.org.


Načtení kernelu po TFTP, soubory budou přístupné na NFS

Nastavení NFS je možné převzít z předchozího odstavce (načtení disk image pomocí HTTP/NFS)
Pro bezdiskové stanice je vhodné se vyhnout použití swap a dump device (proto je to vhodné pouze na strojích, kde je dostatek paměti), v případě potřeby svazky /tmp a /var se vytvářet pouze v paměti. V jiném případě se správce nevyhne velkému disku a NFS share, kde je možnost zapisovat. Použití memoryFS má určitá omezení, a to následující:
- svazek /tmp je často využíván pro odkládání souborů, například programy jako Midnight Commander pro odkládání struktury archívu
- svazek /var neobsahuje jenom logy, ale casto i sessions pro web server. Tedy pro aplikační servery je nutná úprava.
Proto je nutné dobře navrhnout konfiguraci systému. Na druhou stranu, není to až takové trápení, jakékoliv úpravy je možné dělat snadno a rychle jedním zásahem i pro větší množství serverů, stačí jenom restart a ladění.
V tomto okamžiku je potřeba si ujasnit, co od uvedeného systému budu potřebovat. Jedná se o bootování nějakých LiveCD (utility/instalační média), nebo regulerní pracovní stanici? Původní ideu cross-kompilace pro FreeBSD jsem zavrhnul, nakonec jsem šel cestou nejmenšího odporu. To znamená stáhnout si bootovací CD, pokud neumožňuje stahnout přes HTTP/FTP/NFS filesystém do paměti, použil jsem NFS share a nechal ho namapovat.
Uvedený příklad je určen pro vytvoření instalace s použitím PXE. Čím je nutné začít je stažení vlastního instalačního média a jeho rozbalení. Uvedený příklad je pro platformu i386 a amd64:

#!/bin/sh
cd /pxeboot/image
mkdir i386 amd64
wget ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/i386/ISO-IMAGES/9.0/Free...
wget ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/9.0/Fr...
mount /dev/`mdconfig -f FreeBSD-9.0-RELEASE-i386-memstick.img`a /mnt
cp -R /mnt/* /pxeboot/image/freebsd/i386
umount /mnt
mdconfig -d -u 0
mount /dev/`mdconfig -f FreeBSD-9.0-RELEASE-amd64-memstick.img`a /mnt
cp -R /mnt/* /pxeboot/image/freebsd/amd64
umount /mnt
mdconfig -d -u 0


Po stažení je nutné provést konfiguraci vlastního rozbaleného image na NFS serveru a nastavení v PXE menu.


Načtení zavaděče přes TFTP, soubory přístupné pomocí SMB (tzv. Remote Installation Service - RIS, Win 2000/XP/2003)

Většina konfigurace byla provedena v přechozích odstavcích. Prvním krokem bude proto úprava konfiguračního souboru /usr/local/etc/smb.conf vložením následujícího share:
[REMINST]
     browseable = yes
     read only = no
     path = /pxeboot/RIS
     guest ok = yes


V dalším kroku je nutné naplnit a předkonfigurovat instalační adresář. Na share RIS je nutné vytvořit adresář, například WINXPPRO.SP3. Do uvedeného adresáře pak nakopírovat kompletní obsah adresáře i386, provést potřebné úpravy pomocí programů jako je nLite, případně pomocí scriptů pro automatickou instalaci.

Dalším krokem je příprava pro vlastní start. Nejprve je nutné nainstalovat GNU sed (FreeBSD nepodporuje binarni soubory), rozbalit zavaděče a upravit response soubory aby se netloukly:
portinstall cabextract gsed

Následně připravit a upravit vlastní PXE loader
cd /pxeboot/RIS/winxpro.sp3/i386
cabextract STARTROM.N1_
gsed -bie 's/NTLDR/XPLDR/gi' startrom.n12
mv startrom.n12 /pxeboot/winxppro.n12

Obdobnou akci provést i s SETUP loaderem
cabextract SETUPLDR.EX_
gsed -bie 's/winnt\.sif/winxp\.sif/gi' setupldr.exe
gsed -bie 's/ntdetect\.com/ntdetect\.wxp/gi' setupldr.exe
mv setupldr.exe /pxeboot/xpldr.exe
cp NTDETECT.COM /pxeboot/ntdetect.wxp

Jako další krok je nutné vytvořit instalační scripty. Ty nesmí být v UNIX, ale DOS formátu (mám tím na mysli CRLF na konci řádku). Tedy jako první krok nainstalovat konverzní program:
portinstall unix2dos
Následně vytvořit soubor /pxeboot/winxppro.sif obsahující alespoň:
[data]
floppyless = "1"
msdosinitiated = "1"
OriSrc = "\\Samba\RIS\winxppro.sp3\i386"
OriTyp = "4"
LocalSourceOnCD = 1
DisableAdminAccountOnDomainJoin = 1

[SetupData]
OsLoadOptions = "/fastdetect"
SetupSourceDevice = "\Device\LanmanRedirector\Samba\RIS\winxppro.sp3"

[UserData]
ComputerName = *
;ProductID=


Jako další krok je úprava souboru /pxeboot/pxelinux.cfg/default, který musí obsahovat následující řádky:
label winxpsp3
   menu label Windows XP Pro SP3 Network Instalation
   kernel winxppro.n12
   text help
      Prepared network installation for Windows XP Profi, SP3
   endtext


Obdobným způsobem má instalace pracovat i pro Windows 2000/2003. Dle dostupných informací je pro novější systémy (Windows 2008, Windows Vista a Windows 7) instalace možná už pouze přes Windows Installation Services (RIS již není podporován).
Zdroje:
NetFarm RIS, NetFarm PXE, Wikipedia RIS



Načtení zavaděče přes TFTP, soubory přístupné pomocí SMB (Win Vista/7/2008)

Na úkolu se pracuje ...


PXE Boot a menu/submenu

Aby se správce neztratil v menu, které bude rolovat přes 50 stránek, je možné vcelku jednoduchýcm způsobem zajistit oddělení a vytvářet submenu. Příklady pro menu a submenu, včetně parametrů jsou uvedeny zde:
Hlavní menu, soubor /pxeboot/pxelinux.cfg/default obsahuje:

ui vesamenu.c32
menu title mainmenu
menu background background.png
MENU TITLE --== Main PXE Boot Menu ==--
MENU BEGIN FreeBSD
    MENU TITLE FreeBSD submenu - Install/recovery
    LABEL mainmenu
      MENU LABEL ^Back...
      MENU EXIT
    INCLUDE pxelinux.cfg/freebsd.conf
MENU END
MENU BEGIN Debian
    MENU TITLE Debian submenu - Install/recovery
    LABEL mainmenu
      MENU LABEL ^Back...
      MENU EXIT
    INCLUDE pxelinux.cfg/debian.conf
MENU END
MENU BEGIN Microsoft
    MENU TITLE Microsoft submenu - Install/recovery
    LABEL mainmenu
      MENU LABEL ^Back...
      MENU EXIT
    INCLUDE pxelinux.cfg/microsoft.conf
MENU END
menu separator
MENU BEGIN BACKUPANDRECOVERY
    MENU TITLE Backup and Restore submenu
    LABEL mainmenu
      MENU LABEL ^Back...
      MENU EXIT
    INCLUDE pxelinux.cfg/backupandrecovery.conf
MENU END
MENU BEGIN Disktools
    MENU TITLE Disk tools submenu - Change/Clone/Wipe Disk/Partition
    LABEL mainmenu
      MENU LABEL ^Back...
      MENU EXIT
    INCLUDE pxelinux.cfg/disktools.conf
MENU END
MENU BEGIN rescue
    MENU TITLE Rescue submenu - recovery tools and utilites
    LABEL mainmenu
      MENU LABEL ^Back...
      MENU EXIT
    INCLUDE pxelinux.cfg/rescue.conf
MENU END
menu separator
MENU BEGIN forensis
    MENU TITLE Forensis submenu - forensis tools and utilites
    LABEL mainmenu
      MENU LABEL ^Back...
      MENU EXIT
    INCLUDE pxelinux.cfg/forensis.conf
MENU END
menu separator
label hdt
    menu label Hardware Detection Tool
    kernel hdt.c32
    text help
      Hardware Detection Tool usable for basic system overview.
      More information at http://hdt-project.org
    endtext
label reboot
    menu label Reboot
    kernel reboot.c32
    text help
      Reboot system
    endtext

Jednotlivé nabídky pak obsahují následující:
Podmenu FreeBSD, soubor /pxeboot/pxelinux.cfg/freebsd.cfg:

menu title mainmenu
MENU TITLE --== Main PXE Boot Menu ==--
label fbsd8-mfs-32
   menu label FreeBSD/i386 8.2
   kernel /image/freebsd/8x/i386/boot/pxeboot
   text help
      FreeBSD 8.x PXE install over internet, build for 32-bit CPU.
      More information at http://www.freebsd.org
   endtext
label fbsd8-mfs-64
   menu label FreeBSD/amd64 8.x
   kernel /image/freebsd/8x/amd64/boot/pxeboot
   text help
      FreeBSD 8.x PXE install over internet, build for 64-bit CPU.
      More information at http://www.freebsd.org
   endtext
label fbsd9-32
   menu label FreeBSD/i386 Current version
   kernel /image/freebsd/i386/boot/pxeboot
   text help
      FreeBSD 9.x PXE install, build for 32-bit CPU.
      More information at http://www.freebsd.org
   endtext
label fbsd9-64
   menu label FreeBSD/amd64 Current version
   kernel /image/freebsd/amd64/boot/pxeboot
   text help
      FreeBSD 9.x PXE install, build for 64-bit CPU.
      More information at http://www.freebsd.org
   endtext
menu separator
label hdt
   menu label Hardware Detection Tool
   kernel hdt.c32
   text help
      Hardware Detection Tool usable for basic system overview.
      More information at http://hdt-project.org
   endtext
label reboot
   menu label Reboot
   kernel reboot.c32
   text help
      Reboot system
   endtext


Podmenu Debian, soubor /pxeboot/pxelinux.cfg/debian.cfg:

menu title Debian Installation/recovery
MENU TITLE --== Debian Installation/Recovery ==--
label debian32e
   menu label Debian/i386 Installer - Expert mode
   kernel /image/debian-installer/i386/linux
   append priority=low vga=788 initrd=/image/debian-installer/i386/initrd.gz --
   text help
      Debian netboot, build for 32-bit CPU, Expert mode.
      More information at http://www.debian.org
   endtext
label debian32a
   menu label Debian/i386 Installer - Autoinstall mode
   kernel /image/debian-installer/i386/linux
   append auto=true priority=critical vga=788 initrd=/image/debian-installer/i386/initrd.gz -- quiet
   text help
      Debian netboot, build for 32-bit CPU, Autoinstall mode.
      More information at http://www.debian.org
   endtext
label debian64e
   menu label Debian/adm64 Installer - Expert mode
   kernel /image/debian-installer/amd64/linux
   append priority=low vga=788 initrd=/image/debian-installer/amd64/initrd.gz --
   text help
      Debian netboot, build for 64-bit CPU, Expert mode.
      More information at http://www.debian.org
   endtext
label debian64a
   menu label Debian/amd64 Installer - Autoinstall mode
   kernel /image/debian-installer/amd64/linux
   append auto=true priority=critical vga=788 initrd=/image/debian-installer/amd64/initrd.gz -- quiet
   text help
      Debian netboot, build for 32-bit CPU, Autoinstall mode.
      More information at http://www.debian.org
   endtext
menu separator
label hdt
   menu label Hardware Detection Tool
   kernel hdt.c32
   text help
      Hardware Detection Tool usable for basic system overview.
      More information at http://hdt-project.org
   endtext
label reboot
   menu label Reboot
   kernel reboot.c32
   text help
      Reboot system
   endtext

Podmenu Microsoft, soubor /pxeboot/pxelinux.cfg/microsoft.cfg:
menu title microsoft
MENU TITLE --== PXE Install of Microsoft Operating Systems ==--
label win2k
    menu label Windows 2000 Server
    kernel winnt2k0.n12
    text help
        Windows 2000 Server SP4 network install, unsupported since 2010
        Home Page http://technet.microsoft.com/en-us/windowsserver/bb643141
        Information available on http://en.wikipedia.org/wiki/Windows_2000
    endtext
label winxppro
    menu label Windows XP Professional SP3 install
    kernel winxppro.n12
    text help
        Windows XP Professional SP3 network install, supported up to 2014
        Home Page http://windows.microsoft.com/en-US/windows/downloads/windows-xp
        Information available on http://en.wikipedia.org/wiki/Windows_XP
    endtext
label win2k3
    menu label Windows 2003 Server SP2 install
    kernel winnt2k3.n12
    text help
        Windows Windows 2003 Server SP2 network install, supported up to 2015
        Home page http://technet.microsoft.com/en-us/windowsserver/bb512919
        Information available on http://en.wikipedia.org/wiki/Windows_XP
    endtext
menu separator
label sysresc32
    menu label SysRescue CD/32-bit
    kernel /image/sysrcd/i386/rescuecd
    append initrd=/image/sysrcd/i386/initram.igz ip=dhcp netboot=http://pxeboot/image/sysrcd/sysrcd.dat
    text help
        System Rescue CD, build for 32-bit CPU.
        More information at http://www.sysresccd.org
    endtext
label sysresc64
    menu label SysRescue CD/64-bit
    kernel /image/sysrcd/amd64/rescuecd64
    append initrd=/image/sysrcd/amd64/initram.igz ip=dhcp netboot=http://pxeboot/image/sysrcd/sysrcd.dat
    text help
        System Rescue CD, build for 64-bit CPU.
        More information at http://www.sysresccd.org
    endtext
menu separator
label hdt
    menu label Hardware Detection Tool
    kernel hdt.c32
    text help
        Hardware Detection Tool usable for basic system overview.
        More information at http://hdt-project.org
    endtext
label reboot
    menu label Reboot
    kernel reboot.c32
    text help
        Reboot system
    endtext


Podmenu BackupAndRecovery, soubor /pxeboot/backupandrecovery.cfg/freebsd.cfg:
Podmenu DiskTools, soubor /pxeboot/pxelinux.cfg/disktools.cfg:
Podmenu Rescue Utility, soubor /pxeboot/pxelinux.cfg/rescue.cfg:
Podmenu Forensis Utility, soubor /pxeboot/pxelinux.cfg/rescue.cfg:

Powered by Drupal - Design by artinet