#!/bin/bash

#PXE SERVER SETUP

#INSTALL
sudo apt update
sudo apt install -y isc-dhcp-server tftpd-hpa nfs-kernel-server apache2 git liblzma-dev syslinux isolinux mkisofs mtools perl gcc binutils make

#CONFIG
echo "SET SERVERS INTERFACE STATIC IP TO 10.42.0.1"
read -n1

##DHCP
echo "subnet 10.42.0.0 netmask 255.255.255.0 {
 range 10.42.0.20 10.42.0.99;
 #option domain-name-servers ns1.example.org, ns2.example.org;
 #option domain-name example.org;
 option routers 10.42.0.1;
 option broadcast-address 10.42.0.255;
 default-lease-time 600; max-lease-time 7200;
 next-server 10.42.0.1;
 #filename "ipxe.efi";
}

option client-architecture code 93 = unsigned integer 16;
if exists user-class and option user-class = "iPXE" {
    filename "autoexec.ipxe";
} elsif option client-architecture = 00:00 {
    filename "undionly.kpxe";
} else {
    filename "ipxe.efi";
}" >> /etc/dhcp/dhcpd.conf

echo "SPECIFY INTERFACES"
read -n1
sudo nano /etc/default/isc-dhcp-server

##TFTP
echo "COPY/PASTE/MODIFY:"
echo "TFTP_USERNAME="tftp""
echo "TFTP_DIRECTORY="/srv/tftp""
echo "TFTP_ADDRESS=":69""
echo "TFTP_OPTIONS="--secure""
read -n1
sudo nano /etc/default/tftpd-hpa

##NFS
sudo mkdir /srv/nfs
echo "/srv/nfs 10.42.0.0/24(rw,sync,no_root_squash,no_subtree_check)
" >> /etc/exports
sudo exportfs -a

#FIREWALL
sudo ufw allow 67
sudo ufw allow 68
sudo ufw allow 69
sudo ufw allow 80
sudo ufw allow 4011
sudo ufw reload

#iPXE
 
#git clone https://github.com/ipxe/ipxe.git
#cd ipxe/src
#make

cd /srv/tftp/
wget http://boot.ipxe.org/undionly.kpxe
wget http://boot.ipxe.org/ipxe.efi
echo "#!ipxe

chain --autofree http://10.42.0.1/boot/menu.ipxe
" >> autoexec.ipxe

sudo mkdir /var/www/html/boot/
cd /var/www/html/boot/

echo "#!ipxe

:start
menu iPXE BOOT MENU
item DEBIAN DEBIAN
item LINUXMINT LINUXMINT
item MEMTEST MEMTEST
item MEMTEST-GRUB MEMTEST-GRUB

choose target && goto ${target}

:DEBIAN
sanboot http://10.42.0.1/boot/debian.iso initrd=initrd 
imgargs vmlinuz boot=live casper
boot || goto start

:LINUXMINT
sanboot http://10.42.0.1/boot/linuxmint.iso initrd=initrd memtest
boot || goto start

:MEMTEST
sanboot http://10.42.0.1/boot/memtest.iso
boot || goto start

:MEMTEST-GRUB
sanboot http://10.42.0.1/boot/grub-memtest.iso
boot || goto start
" >> menu.ipxe

echo "COPY ISO IMAGES TO /var/www/html/boot"
read -n1

#RESTART SERVICES
sudo systemctl restart isc-dhcp-server
sudo systemctl restart tftpd-hpa
sudo systemctl restart nfs-kernel-server
sudo systemctl restart apache2
