===== 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:
{{ :pxe0.png?nolink |}}
==== 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.
{{ :pxe1.png?nolink |}}
{{ :memtest.png?nolink |}}
{{ :astra.png?nolink |}}
{{ :hdt.png?nolink |}}
==== 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