### IPXE 101
+ Clone project and resources
```bash
git clone https://github.com/pypxe/PyPXE
git clone https://github.com/ipxe/ipxe.git
pip3 install pypxe
```
+ Install requirements
```bash
apt install liblzma-dev
```
Create config file
```bash
cat << EOF > PyPXE/pxe.json
{
    "DHCP_BROADCAST": "", 
    "DHCP_DNS": "8.8.8.8", 
    "DHCP_FILESERVER": "192.168.100.51", 
    "DHCP_MODE_PROXY": false, 
    "DHCP_OFFER_BEGIN": "192.168.100.100", 
    "DHCP_OFFER_END": "192.168.100.150", 
    "DHCP_ROUTER": "192.168.100.1", 
    "DHCP_SERVER_IP": "192.168.100.51", 
    "DHCP_SERVER_PORT": 67, 
    "DHCP_SUBNET": "255.255.255.0", 
    "DHCP_WHITELIST": false, 
    "HTTP_SERVER_IP": "192.168.100.51", 
    "HTTP_PORT": 80, 
    "LEASES_FILE": "", 
    "MODE_DEBUG": "", 
    "MODE_VERBOSE": "", 
    "NBD_BLOCK_DEVICE": "", 
    "NBD_COPY_TO_RAM": false, 
    "NBD_COW": true, 
    "NBD_COW_IN_MEM": false, 
    "NBD_PORT": 10809, 
    "NBD_SERVER_IP": "0.0.0.0", 
    "NBD_WRITE": false, 
    "NETBOOT_DIR": "./netboot", 
    "NETBOOT_FILE": "", 
    "STATIC_CONFIG": "", 
    "SYSLOG_PORT": 514, 
    "SYSLOG_SERVER": null, 
    "TFTP_PORT": 69,
    "TFTP_SERVER_IP": "", 
    "USE_DHCP": true, 
    "USE_HTTP": true, 
    "USE_IPXE": true, 
    "USE_TFTP": true
}
EOF
```
+ Create ipxe boot file and boot ipxe script
```bash
cat << EOF > ipxe/src/boot.ipxe
#!ipxe
dhcp
chain --replace http://192.168.100.51/scripts/script.ipxe
boot
EOF
mkdir PyPXE/netboot/scripts
mkdir PyPXE/netboot/images/clonezilla -p
cat << EOF > PyPXE/netboot/scripts/script.ipxe
#!ipxe
set boot-url http://192.168.100.51/images
kernel ${boot-url}/clonezilla/vmlinuz boot=live config noswap nolocales edd=on nomodeset vga=788 nosplash noprompt fetch=http://10.20.20.51/clonezilla/filesystem.squashfs
initrd ${boot-url}/clonezilla/initrd.img
boot
EOF
```
+ Download and unzip clonezilla ISO
```bash
wget https://freefr.dl.sourceforge.net/project/clonezilla/clonezilla_live_stable/3.1.3-16/clonezilla-live-3.1.3-16-amd64.iso
mkdir /tmp/mount
mount -o loop clonezilla-live-3.1.3-16-amd64.iso /tmp/mount
rsync -avr /tmp/mount/live/ pyPXE/netboot/images/clonezilla
```
+ Add PyPXE ipxe boot script to kpxe boot file
```bash
make bin/undionly.kpxe EMBED=boot.ipxe
cp bin/undionly.kpxe /home/debian/PyPXE/netboot/ipxe.kpxe
sed -i s#chainload.kpxe#ipxe.kpxe#g PyPXE/pypxe/dhcp.py
```
+ Start server
```bash
cd PyPXE
sudo python3 -m pypxe.server --config pxe.json --debug all,-dhcp
```