Spis treści

PXE

Instalujemy minimalną wersję Debiana wraz z podstawowymi programami:

apt-get install bzip2 unzip p7zip-full mc subversion subversion-tools telnet tcpdump ntpdate git rsync net-tools aptitude

DHCP

W serwerze DHCP ustawiamy parametry:

filename "lpxelinux.0";
next-server 192.168.0.100;

Adres IP należy podmienić na adres naszego serwera.

TFTP

Usługa TFTP jest wykorzystywana przez PXE do botowania przez sieć. Instalujemy:

aptitude install tftpd-hpa syslinux pxelinux

Kopiujemy i tworzymy:

cp /usr/lib/syslinux/memdisk /srv/tftp/
cp /usr/lib/syslinux/modules/bios/* /srv/tftp/
cp /usr/lib/PXELINUX/lpxelinux.0 /srv/tftp/
mkdir /srv/tftp/pxelinux.cfg
touch /srv/tftp/pxelinux.cfg/default
touch /srv/tftp/pxelinux.cfg/pxe.conf

Edytujemy plik /srv/tftp/pxelinux.cfg/pxe.conf i wpisujemy:

MENU TITLE  PXE Server
NOESCAPE 1
ALLOWOPTIONS 1
PROMPT 0
menu width 80
menu rows 14
MENU TABMSGROW 24
MENU MARGIN 10
menu color border               30;44      #ffffffff #00000000 std

Edytujemy plik /srv/tftp/pxelinux.cfg/default i wpisujemy:

DEFAULT menu.c32
TIMEOUT 600
ONTIMEOUT BootLocal
PROMPT 0
MENU INCLUDE pxelinux.cfg/pxe.conf
NOESCAPE 1
LABEL BootLocal
        localboot 0
        TEXT HELP
        Boot to local hard disk
        ENDTEXT

Uruchamiamy usługe:

/etc/init.d/tftpd-hpa start

Botujemy komputer za pomocą sieci. Powinno pojawić się menu po ściągnięciu i wczytaniu konfiguracji przez komputer:

HTTP

Ściągnie dużych plików po TFTP jest powolne - protokół HTTP jest szybszy. Instalujemy lekkiego demona HTTPD:

aptitude install nginx

Kopiujemy plik binarne oraz ISO do katalogu /var/www/html/ - np: ściągnijmy sobie z sieci dwa pliki: memtest oraz program do wyświetlania informacji o sprzęcie komputera:

wget http://www.memtest.org/download/5.01/memtest86+-5.01.iso.zip
unzip ./memtest86+-5.01.iso.zip
wget http://www.sysinfolab.com/files/astraiso.zip
unzip ./astraiso.zip
wget http://www.serverelements.com/bin/CORE3_Hardware_Detection_Tool.iso

Konfigurujemy teraz plik konfiguracji TFTP: /srv/tftp/pxelinux.cfg/default dodając na końcu wpisy:

LABEL Memtest
        KERNEL memdisk
        APPEND iso initrd=http://192.168.0.100/memtest86+-5.01.iso raw
        TEXT HELP
        Memory tester
        ENDTEXT
LABEL HW Info
        KERNEL memdisk
        APPEND iso initrd=http://192.168.0.100/astraiso.iso raw
        TEXT HELP
        Hardware info
        ENDTEXT
LABEL HW Info 2
        KERNEL memdisk
        APPEND iso initrd=http://192.168.0.100/CORE3_Hardware_Detection_Tool.iso raw
        TEXT HELP
        Hardware info 2
        ENDTEXT

Adres IP: 192.168.0.100 podmieniamy na adres naszego serwera HTTP.

NFS

NFS będzie nam potrzebny do zabotowania Linuxa Live, np Ubuntu. Botowanie będzie odbywało się dwojako - najpierw kernel poprzez HTTP, a pozostałe pliki już po NFSie. Instalujemy:

aptitude install nfs-kernel-server portmap

Konfigurujemy dopisując na końcu pliku /etc/exports linijkę:

/srv/nfs 192.168.0.0/24(ro,async,no_root_squash,no_subtree_check)

Tworzymy katalog oraz przeładowujemy ustawienia:

mkdir /srv/nfs
exportfs -a
/etc/init.d/nfs-kernel-server reload

Ubuntu

wget http://releases.ubuntu.com/16.04/ubuntu-16.04.5-desktop-amd64.iso
mkdir /var/www/html/ubuntu
mount ./ubuntu-16.04.5-desktop-amd64.iso /mnt
cp /mnt/casper/vmlinuz /var/www/html/ubuntu/
cp /mnt/casper/initrd.lz /var/www/html/ubuntu/
mkdir /srv/nfs/ubuntu
cp -r /mnt/* /srv/nfs/ubuntu/

Dodajemy konfigurację do pliku /srv/tftp/pxelinux.cfg/default:

LABEL Ubuntu 16.04 (64-bit)
        KERNEL http://192.168.0.100/ubuntu/vmlinuz
        APPEND boot=casper netboot=nfs nfsroot=192.168.0.100:/srv/nfs/ubuntu initrd=http://192.168.0.100/ubuntu/initrd.lz
        TEXT HELP
        Live Ubuntu 16.04 (64-bit)
        ENDTEXT

SAMBA

Samba będzie nam potrzebna do podmontowania dysku sieciowego, aby móc zainstalować Windowsa przez sieć. Instalacja:

aptitude install samba

Mój plik /etc/samba/smb.conf wygląda tak:

[global]
workgroup = WG
server string = PXE
log file = /var/log/samba/log.%m
max log size = 50
idmap config * : backend = tdb
cups options = raw
netbios name = pxe
map to guest = bad user
dns proxy = no
public = yes
## For multiple installations the same time - not lock kernel
kernel oplocks = no
nt acl support = no
security = user
guest account = nobody

[install]
        path = /srv/samba
        read only = yes
        browseable = yes
        public = yes
        guest ok = yes

Tworzymy katalog i restartujemy Sambe:

mkdir /srv/samba
/etc/init.d/samba restart

Do katalogu /srv/samba kopiujemy katalogi z instalkami Windowsów. Po skopiowaniu nadajemy uprawnienia:

chmod -R 777 /srv/samba/*

Tworzymy Windows 10 PE wg tutoriala: https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/winpe-create-usb-bootable-drive - plik ISO kopiujemy do katalogu /var/www/html/ i dopisujemy konfigurację do pliku /srv/tftp/pxelinux.cfg/default:

LABEL Windows 10 PE (64-bit)
        KERNEL memdisk
        INITRD http://192.168.0.100/win10pe_amd64.iso
        APPEND iso raw
        TEXT HELP
        Windows 10 Live CD (64-bit) with installer Windows 7, 8 and 10
        ENDTEXT

Po zabotowaniu Windows 10 PE pojawi nam się konsola, w której wpisujemy:

net use z: \\92.168.0.100\install nobody /user:nobody
z:

I wten oto sposób możemy się dobrać do instalek. Wszelkie customizacje Win10PE opisane są w artykule: https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/winpe-mount-and-customize

Przykładowy mój plik startnet.cmd do Win10PE:

@echo off

wpeinit

:loop
ping 8.8.8.8 -n 1 -4 > nul
if "%errorlevel%" == "1" (
	echo %time:~0,8%: Czekam na adres ip...
	ping 127.0.0.1 -n 3 -4 > nul
	goto loop
)

For /f "tokens=3" %%* in ('route -4 print 0.* ^| find "0.0.0.0"') Do @Set gw=%%*

if "%gw%" == "1.1.1.1" (
	set ips=1.1.1.16
	set share=install
)
if "%gw%" == "1.1.2.1" (
	set ips=1.1.2.20
	set share=install
)
if "%gw%" == "1.1.3.1" (
	set ips=1.1.3.20
	set share=install
)
if "%gw%" == "1.1.4.30" (
	set ips=1.1.4.18
	set share=pub
)

net use z: \\%ips%\%share% /user:nobody nobody
z:
cd Windows

echo Wybierz opcje:
echo 1) Instalator Windows 10 z aktualizacjami
echo 2) Instalator Windows 8 z aktualizacjami
echo 3) Instalator Windows 7 z aktualizacjami
echo 4) Naprawienie bootowania Windowsa
echo Dowolny klawisz) Wyjscie
set /p answer=?
if /i "%answer:~,1%" EQU "1" goto win10
if /i "%answer:~,1%" EQU "2" goto win8
if /i "%answer:~,1%" EQU "3" goto win7
if /i "%answer:~,1%" EQU "4" goto naprawa
goto exit

:win7
	echo Windows 7 z aktualizacjami
	cd 7
	setup.exe
	goto exit

:win8
	echo Windows 8 z aktualizacjami
	cd 8
	setup.exe
	goto exit

:win10
	echo Windows 10 z aktualizacjami
	cd 10
	setup.exe
	goto exit

:naprawa
	echo Nalezy wykonac z poziomu Windows Recovery:
	echo bootrec /fixmbr
	echo bootrec /fixboot
	echo bootrec /rebuildbcd
	goto exit
:exit