This project contains basic files and folder setup needed for a TFTP PXELINUX server.
Network (PXE) boot supports the following live CD or installation distros for BIOS and UEFI (without Secure Boot yet) devices.
- CentOS 6.x
- CentOS 7.0
- CloneZilla Live 64-bit with additional non-free firmware support
- CloneZilla Live 32-bit with i686 support
- Fedora 24
- GParted Live 64-bit
- GParted Live 32-bit with i686 support
- Ubuntu 16.04 (Xenial)
- Set up TFTP server
- You could use http://ww2.unime.it/flr/tftpserver/ for MacOS
- Follow these and these instructions on Synology NAS
- Optionally set up HTTP server pointing to images/ directory
- Debug HTTP server as per instructions below
- Check out this project code on TFTP server
git clone --depth 1 [email protected]:paulmaunders/TFTP-PXE-Boot-Server.git .
- Ensure TFTP server root points to this project directory
- Debug TFTP server as per instructions below
- Configure your DHCP to use TFTP server
- Use DHCP option 66 "next-server" if located on a different IP to DHCP server
- DHCP should offer the PXELINUX.0 as the boot filename (DHCP option 67)
- Follow these instructions on Synology router
- Optionally edit the <architecture>/pxelinux.cfg/default files to add your PXE boot options
- Create symlinks to images in this project directory
user:~$ ln -s <absolute path>/images/ bios/images user:~$ ln -s <absolute path>/images/ efi32/images user:~$ ln -s <absolute path>/images/ efi64/images
- Download and configure each bootstrap program you require as per instructions. Bootstraps are not committed to this repository due to their size.
- Alpine Linux (TODO)
- CentOS (TODO)
- CloneZilla Live 64-bit
- CloneZilla Live 32-bit
- Fedora (TODO)
- GParted Live 64-bit
- GParted Live 32-bit
- Ubuntu Desktop (TODO)
- Ubuntu Minimal (TODO)
- Ubuntu Server (TODO)
tftp is the user interface to the Internet TFTP (Trivial File Transfer Protocol), which allows users to transfer files to and from a remote machine. The remote host may be specified on the command line, in which case tftp uses host as the default host for future transfers.
- Install TFTP client
user:~$ sudo apt update
user:~$ sudo apt install tftp
- Test connection and file download
user:~$ tftp 192.168.0.123
tftp> verbose
Verbose mode on.
tftp> get bios/pxelinux.0
getting from 192.168.0.123:bios/pxelinux.0 to pxelinux.0 [netascii]
Received 46995 bytes in 0.2 seconds [1879800 bits/sec]
tftp> quit
- Download a file placed in images/ directory
user:~$ wget http://192.168.0.123/somefile.txt
TODO
TODO
- Download amd64 ISO or ZIP alternative stable release from here
- Create image version directory in this project, i.e.
images/clonezilla/20230212-kinetic
- Extract vmlinuz, initrd.img and filesystem.squashfs files from
live/
directory of the downloaded archive - Image version directory should look like this
- images/clonezilla/20230212-kinetic/filesystem.squashfs
- images/clonezilla/20230212-kinetic/initrd.img
- images/clonezilla/20230212-kinetic/vmlinuz
- Make sure CloneZilla Live x64 KERNEL, APPEND initrd and APPEND fetch paths and TFTP/HTTP server IP match in <architecture>/pxelinux.cfg/default configuration file, e.g.
for TFTP: LINUX images/clonezilla/20230212-kinetic/vmlinuz APPEND initrd=images/clonezilla/20230212-kinetic/initrd.img ... fetch=tftp://192.168.0.123/images/clonezilla/20230212-kinetic/filesystem.squashfs
for HTTP: LINUX http://192.168.0.123/clonezilla/20230212-kinetic/vmlinuz APPEND initrd=http://192.168.0.123/clonezilla/20230212-kinetic/initrd.img ... fetch=http://192.168.0.123/clonezilla/20230212-kinetic/filesystem.squashfs
More information can be found here
- Download i686 ISO or ZIP stable release from here
- Create image version directory in this project, i.e.
images/clonezilla/3.1.0-22-i686
- Extract vmlinuz, initrd.img and filesystem.squashfs files from
live/
directory of the downloaded archive - Image version directory should look like this
- images/clonezilla/3.1.0-22-i686/filesystem.squashfs
- images/clonezilla/3.1.0-22-i686/initrd.img
- images/clonezilla/3.1.0-22-i686/vmlinuz
- Make sure CloneZilla Live x32 KERNEL, APPEND initrd and APPEND fetch paths and TFTP/HTTP server IP match in <architecture>/pxelinux.cfg/default configuration file, e.g.
for TFTP: LINUX images/clonezilla/3.1.0-22-i686/vmlinuz APPEND initrd=images/clonezilla/3.1.0-22-i686/initrd.img ... fetch=tftp://192.168.0.123/images/clonezilla/3.1.0-22-i686/filesystem.squashfs
for HTTP: LINUX http://192.168.0.123/clonezilla/3.1.0-22-i686/vmlinuz APPEND initrd=http://192.168.0.123/clonezilla/3.1.0-22-i686/initrd.img ... fetch=http://192.168.0.123/clonezilla/3.1.0-22-i686/filesystem.squashfs
More information can be found here and here
TODO
- Download amd64 ISO or ZIP stable release from here
- Create image version directory in this project, i.e.
images/gparted/1.5.0-1-amd64
- Extract vmlinuz, initrd.img and filesystem.squashfs files from
live/
directory of the downloaded archive - Image version directory should look like this
- images/gparted/1.5.0-1-amd64/filesystem.squashfs
- images/gparted/1.5.0-1-amd64/initrd.img
- images/gparted/1.5.0-1-amd64/vmlinuz
- Make sure GParted Live x64 KERNEL, APPEND initrd and APPEND fetch paths and TFTP/HTTP server IP match in <architecture>/pxelinux.cfg/default configuration file, e.g.
for TFTP: LINUX images/gparted/1.5.0-1-amd64/vmlinuz APPEND initrd=images/gparted/1.5.0-1-amd64/initrd.img ... fetch=tftp://192.168.0.123/images/gparted/1.5.0-1-amd64/filesystem.squashfs
for HTTP: LINUX http://192.168.0.123/gparted/1.5.0-1-amd64/vmlinuz APPEND initrd=http://192.168.0.123/gparted/1.5.0-1-amd64/initrd.img ... fetch=http://192.168.0.123/gparted/1.5.0-1-amd64/filesystem.squashfs
More information can be found here
- Download i686 ISO or ZIP stable release from here
- Create image version directory in this project, i.e.
images/gparted/1.5.0-1-i686
- Extract vmlinuz, initrd.img and filesystem.squashfs files from
live/
directory of the downloaded archive - Image version directory should look like this
- images/gparted/1.5.0-1-i686/filesystem.squashfs
- images/gparted/1.5.0-1-i686/initrd.img
- images/gparted/1.5.0-1-i686/vmlinuz
- Make sure GParted Live x32 KERNEL, APPEND initrd and APPEND fetch paths and TFTP/HTTP server IP match in <architecture>/pxelinux.cfg/default configuration file, e.g.
for TFTP: LINUX images/gparted/1.5.0-1-i686/vmlinuz APPEND initrd=images/gparted/1.5.0-1-i686/initrd.img ... fetch=tftp://192.168.0.123/images/gparted/1.5.0-1-i686/filesystem.squashfs
for HTTP: LINUX http://192.168.0.123/gparted/1.5.0-1-i686/vmlinuz APPEND initrd=http://192.168.0.123/gparted/1.5.0-1-i686/initrd.img ... fetch=http://192.168.0.123/gparted/1.5.0-1-i686/filesystem.squashfs
More information can be found here and here
TODO
TODO
TODO
The Syslinux Project
https://www.syslinux.org/
PXELINUX is a Syslinux derivative for booting from a network server
https://wiki.syslinux.org/wiki/index.php?title=PXELINUX
- Configuration introduction can be found here
- Advanced menu system configuration documentation can be found here
- Clone repository
git clone --depth 1 https://github.com/paulmaunders/TFTP-PXE-Boot-Server .
- Download new version from https://wiki.syslinux.org/wiki/index.php?title=Download
wget https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/Testing/6.04/syslinux-6.04-pre1.zip
- Extract modules and dependencies according to https://wiki.syslinux.org/wiki/index.php?title=Library_modules
- bios/com32/elflink/ldlinux.c32
- bios/com32/libutil/libutil.c32
- bios/com32/menu/menu.c32
- bios/com32/modules/linux.c32
- bios/core/pxelinux.0
- DO NOT use Syslinux versions 5.10 to 6.02 due to known bug which crashes VM
https://dnsmasq.org/docs/dnsmasq-man.html
Run dnsmasq --help dhcp
to see available DHCP options.
List of standard DHCP options is here.
- Oracle VirtualBox VM requires at least 1024MB of base memory for successful testing.
- Oracle VirtualBox VM requires Intel PRO/1000 MT Desktop bridged network adapter for successful BIOS PXE testing.
- Oracle VirtualBox VM requires virtio-net bridged network adapter for successful UEFI PXE testing.
- Use Microsoft Hyper-V Generation 2 VM for successful UEFI PXE testing.