PXE Boot from network (DHCP, TFTP, NFS, Samba, FTP, HTTP) - Linux serverThe network boot will be explained with working example setups. When you understood the concept, then you can use your own server setups and directory structures. Everything is flexible and can be configured to be anywhere on your server. The minimum requirements to boot from a network are a DHCP server and a TFTP server. The access to the Plop Linux files can be via NFS share, Samba share, TFTP, FTP or HTTP. Download a working sample with the full directory structure: netboot-sample.tar.gz, for ISO netboot-sample-iso.tar.gz The download links in this description are for the 64-bit version. To create a 32-bit version use the corresponding files from the download area. Basic conditions for this example setup:
It works with other IP addresses too! Here are config files for a Linux test system in an archive: pxeconfs.tar.gz
1. Setup1.1. Extract the Plop Linux filesExtract the file ploplinux-pxeboot.tar.gz to your root directory. tar xfz ploplinux-pxeboot.tar.gz -C / Now you have the basic directory structure and files in '/tftpboot'. Extract the file ploplinux-25.2.1-x86_64.tar.gz to '/tmp'. tar xfz ploplinux-25.2.1.tgz -C /tmp Move the files to '/tftpboot/ploplinux-netboot/'. mv /tmp/ploplinux-25.2.1/* /tftpboot/ploplinux-netboot/ Now you should have the following directories and files
/tftpboot/
/ploplinux-netboot/
/boot.msg
/memtest
/menu.c32
/spash.png
/vesamenu.c32
/pxelinux.0
/ploplinux/
/bin/
/bin.sqfs
/etc.tgz
/lib.sqfs
/opt/
/ploplinux.version
/pxelinux.cfg/
/default
/syslinux/
/kernel/
/bzImage
/initramfs.gz
/plop/
/plpbt.bin
/plpinstc.com
1.2. Setup the DHCP serverYou need the DHCP server software. If your distribution has none then you can use
dhcp-4.4.3.tar.gz
(or search for the latest on the net) and
compile it.
This is the example DHCP server configuration.
subnet 10.0.0.0 netmask 255.255.255.0 {
option routers 10.0.0.1;
}
allow booting;
allow bootp;
# Standard configuration directives...
option domain-name "plop";
option subnet-mask 255.255.255.0;
option broadcast-address 10.0.0.255;
option domain-name-servers 10.0.0.1;
option routers 10.0.0.1;
# Group the PXE bootable hosts together
group {
# PXE-specific configuration directives...
next-server 10.0.0.1;
filename "/ploplinux-netboot/pxelinux.0";
# You need an entry like this for every host
# unless you're using dynamic addresses
host testpc {
hardware ethernet 00:0C:6E:A6:1A:E6;
fixed-address 10.0.0.250;
}
}
To start the DHCP server simply run 'dhcpd'. Note: For testing you can run 'dhcpd -f' to run dhcpd in the foreground and get some debug output. Note: Change the 'next-server' IP to set another TFTP server IP. 1.3. Setup the TFTP serverDownload the latest TFTP server from ftp://www.kernel.org/pub/software/network/tftp/ and install it with './configure --prefix=/usr && make && make install'. To start the TFTP server we use Xinetd. Here is the base Xinetd config file File name: /etc/xinetd.conf#
# Simple configuration file for xinetd
#
# Some defaults, and include /etc/xinetd.d/
defaults
{
log_type = SYSLOG daemon info
log_on_success = PID HOST DURATION
log_on_failure = HOST
instances = 100
per_source = 20
}
includedir /etc/xinetd.d
And the configuration for the tftp server.
# default: off
# description: The tftp server serves files using the trivial
# file transfer \
# protocol. The tftp protocol is often used to boot diskless \
# workstations, download configuration files to
# network-aware printers, \
# and to start the installation process for some operating systems.
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
#only_from = 10.0.0.1
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
disable = no
per_source = 11
cps = 100 2
}
To start Xinetd simply run 'xinetd'. Note: For testing you can run 'xinetd -d' to run Xinetd in the foreground and get some debug output. 2. NFS2.1. Boot with NFSRequirements are the DHCP and TFTP Server (Setup). Basic configs for your NFS server, without security aspects: File name: /etc/exports /tftpboot/ploplinux-netboot -no_subtree_check 10.0.0.250 File name: /etc/hosts.allow portmap: 10.0.0.0/255.255.255.0 lockd: 10.0.0.0/255.255.255.0 rquotad: 10.0.0.0/255.255.255.0 mountd: 10.0.0.0/255.255.255.0 statd: 10.0.0.0/255.255.255.0 File name: /etc/hosts.deny portmap:ALL lockd:ALL mountd:ALL rquotad:ALL statd:ALL Parameter: nfsmount=NFSSHARE|ADDITIONALPARAMS
Example: nfsmount=10.0.0.1:/tftpboot/ploplinux-netboot
File name: /tftpboot/ploplinux-netboot/pxelinux.cfg/nfs.conf
# Boot from NFS
label linux-nfs
menu label Plop Linux - NFS
kernel syslinux/kernel/bzImage
append initrd=syslinux/kernel/initramfs.gz vga=1 nfsmount=10.0.0.1:/tftpboot/ploplinux-netboot nomodeset
label linuxfb-nfs
menu label Plop Linux framebuffer mode - NFS
kernel syslinux/kernel/bzImage
append initrd=syslinux/kernel/initramfs.gz vga=0x317 nfsmount=10.0.0.1:/tftpboot/ploplinux-netboot
nfs.conf is loaded by /tftpboot/ploplinux-netboot/pxelinux.cfg/default If the DHCP, Xinetd and NFS server are running correct you should be able to boot Plop Linux via network. 2.2. Boot ISO over NFSYou need the ISO ploplinux-25.2.1-x86_64.iso, the directory structure and files of ploplinux-pxeboot.tar.gz and the 'syslinux' directory of ploplinux-25.2.1-x86_64.tar.gz. The DHCP and TFTP Server must work. Basic configs for your NFS server, without security aspects: File name: /etc/exports /tftpboot/ploplinux-netboot -no_subtree_check 10.0.0.250 File name: /etc/hosts.allow portmap: 10.0.0.0/255.255.255.0 lockd: 10.0.0.0/255.255.255.0 rquotad: 10.0.0.0/255.255.255.0 mountd: 10.0.0.0/255.255.255.0 statd: 10.0.0.0/255.255.255.0 File name: /etc/hosts.deny portmap:ALL lockd:ALL mountd:ALL rquotad:ALL statd:ALL Copy ploplinux-25.2.1-x86_64.iso to '/tftpboot/ploplinux-netboot/'. Create a symlink 'ln -s ploplinux-25.2.1-x86_64.iso ploplinux.iso'. Parameter: nfsmount=NFSSHARE|ADDITIONALPARAMS iso_filename=ISOFILE
On the server: /tftpboot/ploplinux-netboot/ploplinux.iso
File name: /tftpboot/ploplinux-netboot/pxelinux.cfg/nfs-iso.conf
# Boot from NFS - ISO
label linux-nfs-iso
menu label Plop Linux - NFS ISO
kernel syslinux/kernel/bzImage
append initrd=syslinux/kernel/initramfs.gz vga=1 nfsmount=10.0.0.1:/tftpboot/ploplinux iso_filename=ploplinux.iso nomodeset
label linuxfb-nfs-iso
menu label Plop Linux framebuffer mode - NFS ISO
kernel syslinux/kernel/bzImage
append initrd=syslinux/kernel/initramfs.gz vga=0x317 nfsmount=10.0.0.1:/tftpboot/ploplinux iso_filename=ploplinux.iso
nfs-iso.conf is loaded by /tftpboot/ploplinux-netboot/pxelinux.cfg/default 3. Samba network share3.1. Boot with Samba network shareRequirements are the DHCP and TFTP Server (Setup). Basic configs for your Samba server, without security aspects:
Create the share 'ploplinux-netboot'. ;=== CUT ===== [ploplinux-netboot] path = /tftpboot/ploplinux-netboot writable = no read only = no ;=== CUT ===== Parameter: smbmount=//SERVER/SHARE:SMBUSER:SMBPASSWORD
SMBUSER: user to access the share. If the share permits access to all users then use "" for SMBUSER
Example: smbmount=//10.0.0.1/ploplinux-netboot:myuser:mypass
# Boot from Samba/Windows share
label linux-smb
menu label Plop Linux - Samba
kernel syslinux/kernel/bzImage
append initrd=syslinux/kernel/initramfs.gz vga=1 smbmount=//10.0.0.1/ploplinux-netboot:SMBUSER:SMBPASSWORD nomodeset
label linuxfb-smb
menu label Plop Linux framebuffer mode - Samba
kernel syslinux/kernel/bzImage
append initrd=syslinux/kernel/initramfs.gz vga=0x317 smbmount=//10.0.0.1/ploplinux-netboot:SMBUSER:SMBPASSWORD
smb.conf is loaded by /tftpboot/ploplinux-netboot/pxelinux.cfg/default When the DHCP, Xinetd and Samba server are running correct you should be able to boot Plop Linux via network. 3.2. Boot ISO over SambaYou need the ISO ploplinux-25.2.1-x86_64.iso, the directory structure and files of ploplinux-pxeboot.tar.gz and the 'syslinux' directory of ploplinux-25.2.1-x86_64.tar.gz. The DHCP and TFTP Server must work. Basic configs for your Samba server, without security aspects:
Create the share 'ploplinux-netboot'. ;=== CUT ===== [ploplinux-netboot] path = /tftpboot/ploplinux-netboot writable = no read only = no ;=== CUT ===== Copy ploplinux-25.2.1-x86_64.iso to '/tftpboot/ploplinux-netboot/'. Create there a symlink 'ln -s ploplinux-25.2.1-x86_64.iso ploplinux.iso'. Parameter: smbmount=//SERVER/SHARE:SMBUSER:SMBPASSWORD iso_filename=ISOFILE
SMBUSER: user to access the share. If the share permits access to all users then use "" for SMBUSER
Example: smbmount=//10.0.0.1/ploplinux-netboot:myuser:mypass iso_filename=ploplinux.iso
File name: /tftpboot/ploplinux-netboot/pxelinux.cfg/smb-iso.conf
# Boot from Samba/Windows share - ISO
label linux-smb-iso
menu label Plop Linux - Samba ISO
kernel syslinux/kernel/bzImage
append initrd=syslinux/kernel/initramfs.gz vga=1 smbmount=//10.0.0.1/ploplinux-netboot:SMBUSER:SMBPASSWORD iso_filename=ploplinux.iso nomodeset
label linuxfb-smb-iso
menu label Plop Linux framebuffer mode - Samba ISO
kernel syslinux/kernel/bzImage
append initrd=syslinux/kernel/initramfs.gz vga=0x317 smbmount=//10.0.0.1/ploplinux-netboot:SMBUSER:SMBPASSWORD iso_filename=ploplinux.iso
smb-iso.conf is loaded by /tftpboot/ploplinux-netboot/pxelinux.cfg/default 4. TFTP4.1. Boot only with TFTPRequirements are the DHCP and TFTP Server (Setup). Create the file '/tftpboot/ploplinux-netboot/tftpfilelist' for TFTP boot that lists all Plop Linux files. cd /tftpboot Example file: /tftpboot/ploplinux-netboot/tftpfilelist Parameter: tftpboot=SERVER|FILELIST dir=PLOPLINUXDIRECTORY Example: tftpboot=10.0.0.1|ploplinux-netboot/tftpfilelist dir=/ploplinux-netboot/ploplinux
File name: /tftpboot/ploplinux-netboot/pxelinux.cfg/tftp.conf
# boot from TFTP
label linux-tftp
menu label Plop Linux - TFTP
kernel syslinux/kernel/bzImage
append initrd=syslinux/kernel/initramfs.gz vga=1 tftpboot=10.0.0.1|ploplinux-netboot/tftpfilelist dir=/ploplinux-netboot/ploplinux nomodeset
label linuxfb-tftp
menu label Plop Linux framebuffer mode - TFTP
kernel syslinux/kernel/bzImage
append initrd=syslinux/kernel/initramfs.gz vga=0x317 tftpboot=10.0.0.1|ploplinux-netboot/tftpfilelist dir=/ploplinux-netboot/ploplinux
tftp.conf is loaded by /tftpboot/ploplinux-netboot/pxelinux.cfg/default Note: The default block size is 65464 bytes. You can use an smaller block size with the optional parameter BLOCK_SIZE.
Optional parameter BLOCK_SIZE: tftpboot=SERVER|FILELIST|BLOCK_SIZE dir=PLOPLINUXDIRECTORY Example: tftpboot=10.0.0.1|ploplinux-netboot/tftpfilelist|32768 dir=/ploplinux-netboot/ploplinux 4.2. Boot ISO over TFTPYou need the ISO ploplinux-25.2.1-x86_64.iso, the directory structure and files of ploplinux-pxeboot.tar.gz and the 'syslinux' directory of ploplinux-25.2.1-x86_64.tar.gz. The DHCP and TFTP Server must work. Create the file '/tftpboot/ploplinux-netboot/tftpfilelist-iso' for TFTP boot with the Plop Linux ISO file name. cd /tftpboot/ploplinux-netboot Copy ploplinux-25.2.1-x86_64.iso to '/tftpboot/ploplinux-netboot/'. Create a symlink 'ln -s ploplinux-25.2.1-x86_64.iso ploplinux.iso'. Parameter: tftpboot=SERVER|FILELIST iso_filename=ISOFILE
Example: tftpboot=10.0.0.1|ploplinux-netboot/tftpfilelist-iso iso_filename=ploplinux-netboot/ploplinux.iso
File name: /tftpboot/ploplinux-netboot/pxelinux.cfg/tftp-iso.conf
# boot from TFTP - ISO
label linux-tftp-iso
menu label Plop Linux - TFTP ISO
kernel syslinux/kernel/bzImage
append initrd=syslinux/kernel/initramfs.gz vga=1 tftpboot=10.0.0.1|ploplinux-netboot/tftpfilelist-iso iso_filename=ploplinux-netboot/ploplinux.iso nomodeset
label linuxfb-tftp-iso
menu label Plop Linux framebuffer mode - TFTP ISO
kernel syslinux/kernel/bzImage
append initrd=syslinux/kernel/initramfs.gz vga=0x317 tftpboot=10.0.0.1|ploplinux-netboot/tftpfilelist-iso iso_filename=ploplinux-netboot/ploplinux.iso
tftp-iso.conf is loaded by /tftpboot/ploplinux-netboot/pxelinux.cfg/default Note: The default block size is 65464 bytes. You can use an smaller block size with the optional parameter BLOCK_SIZE.
Optional parameter BLOCK_SIZE: tftpboot=SERVER|FILELIST|BLOCK_SIZE iso_filename=ISOFILE Example: tftpboot=10.0.0.1|ploplinux-netboot/tftpfilelist-iso|32768 iso_filename=ploplinux-netboot/ploplinux.iso 5. FTP5.1. Boot with FTPRequirements are the DHCP and TFTP Server (Setup) and a FTP Server. The FTP root directory is in this example '/tftpboot/'. Create the file '/tftpboot/ploplinux-netboot/filelist' for FTP boot that lists all Plop Linux files. cd /tftpboot/ploplinux-netboot Example file: /tftpboot/ploplinux-netboot/ftpfilelist Parameter: url=ftp://FTPUSER:FTPPASSWORD@FTPSERVER/FTPDIRECTORY|FILELIST Example: url=ftp://myuser:mypass@10.0.0.1/ploplinux-netboot|/ftpfilelist
File name: /tftpboot/ploplinux-netboot/pxelinux.cfg/ftp.conf
# boot from FTP
label linux-ftp
menu label Plop Linux - FTP
kernel syslinux/kernel/bzImage
append initrd=syslinux/kernel/initramfs.gz vga=1 url=ftp://myuser:mypass@10.0.0.1/ploplinux-netboot|/ftpfilelist nomodeset
label linuxfb-ftp
menu label Plop Linux framebuffer mode - FTP
kernel syslinux/kernel/bzImage
append initrd=syslinux/kernel/initramfs.gz vga=0x317 url=ftp://myuser:mypass@10.0.0.1/ploplinux-netboot|/ftpfilelist
ftp.conf is loaded by /tftpboot/ploplinux-netboot/pxelinux.cfg/default 5.2. Boot ISO over FTPYou need the ISO ploplinux-25.2.1-x86_64.iso, the directory structure and files of ploplinux-pxeboot.tar.gz and the 'syslinux' directory of ploplinux-25.2.1-x86_64.tar.gz. The DHCP and TFTP Server must work. A FTP Server must be available. The FTP root directory is in this example '/tftpboot/'. Create the file '/tftpboot/ploplinux-netboot/ftpfilelist-iso' for FTP boot with the Plop Linux ISO file name. cd /tftpboot/ploplinux-netboot Copy ploplinux-25.2.1-x86_64.iso to '/tftpboot/ploplinux-netboot/'. Create a symlink 'ln -s ploplinux-25.2.1-x86_64.iso ploplinux.iso'. Parameter: url=ftp://FTPUSER:FTPPASSWORD@FTPSERVER/FTPDIRECTORY|FILELIST iso_filename=ISOFILE Example: url=ftp://myuser:mypass@10.0.0.1/ploplinux-netboot|/ftpfilelist-iso iso_filename=ploplinux.iso
File name: /tftpboot/ploplinux-netboot/pxelinux.cfg/ftp-iso.conf
# boot from FTP - ISO
label linux-ftp-iso
menu label Plop Linux - FTP ISO
kernel syslinux/kernel/bzImage
append initrd=syslinux/kernel/initramfs.gz vga=1 url=ftp://myuser:mypass@10.0.0.1/ploplinux-netboot|/ftpfilelist-iso iso_filename=ploplinux.iso nomodeset
label linuxfb-ftp-iso
menu label Plop Linux framebuffer mode - FTP ISO
kernel syslinux/kernel/bzImage
append initrd=syslinux/kernel/initramfs.gz vga=0x317 url=ftp://myuser:mypass@10.0.0.1/ploplinux-netboot|/ftpfilelist-iso iso_filename=ploplinux.iso
ftp-iso.conf is loaded by /tftpboot/ploplinux-netboot/pxelinux.cfg/default 6. HTTP6.1. Boot with HTTPRequirements are the DHCP and TFTP Server (Setup) and a WEB Server. The Virtual Host root directory is in this example '/tftpboot/'. Create the file '/tftpboot/ploplinux-netboot/filelist' for HTTP boot that lists all Plop Linux files. cd /tftpboot/ploplinux-netboot Example file: /tftpboot/ploplinux-netboot/webfilelist Parameter: url=http://USER:PASS@WEBSERVER/WEBDIRECTORY|FILELIST
Example: url=http://www.ploplinux.com/ploplinux-netboot|/webfilelist
File name: /tftpboot/ploplinux-netboot/pxelinux.cfg/http.conf
# boot from HTTP
label linux-http
menu label Plop Linux - HTTP
kernel syslinux/kernel/bzImage
append initrd=syslinux/kernel/initramfs.gz vga=1 url=http://www.ploplinux.com/ploplinux-netboot|/webfilelist nomodeset
label linuxfb-http
menu label Plop Linux framebuffer mode - HTTP
kernel syslinux/kernel/bzImage
append initrd=syslinux/kernel/initramfs.gz vga=0x317 url=http://www.ploplinux.com/ploplinux-netboot|/webfilelist
http.conf is loaded by /tftpboot/ploplinux-netboot/pxelinux.cfg/default 6.2. Boot ISO over HTTPYou need the ISO ploplinux-25.2.1-x86_64.iso, the directory structure and files of ploplinux-pxeboot.tar.gz and the 'syslinux' directory of ploplinux-25.2.1-x86_64.tar.gz. The DHCP and TFTP Server must work. A WEB Server must be available. The Virtual Host root directory is in this example '/tftpboot/'. Create the file '/tftpboot/ploplinux-netboot/webfilelist-iso' for HTTP boot with the Plop Linux ISO file name. cd /tftpboot/ploplinux-netboot Copy ploplinux-25.2.1-x86_64.iso to '/tftpboot/ploplinux-netboot/'. Create a symlink 'ln -s ploplinux-25.2.1-x86_64.iso ploplinux.iso'. Parameter: url=http://USER:PASS@WEBSERVER/WEBDIRECTORY|FILELIST iso_filename=ISOFILE
Example: url=http://www.ploplinux.com/ploplinux-netboot|/webfilelist-iso iso_filename=ploplinux.iso
File name: /tftpboot/ploplinux-netboot/pxelinux.cfg/http-iso.conf
# boot from HTTP - ISO
label linux-http-iso
menu label Plop Linux - HTTP ISO
kernel syslinux/kernel/bzImage
append initrd=syslinux/kernel/initramfs.gz vga=1 url=http://www.ploplinux.com/ploplinux-netboot|/webfilelist-iso iso_filename=ploplinux.iso nomodeset
label linuxfb-http-iso
menu label Plop Linux framebuffer mode - HTTP ISO
kernel syslinux/kernel/bzImage
append initrd=syslinux/kernel/initramfs.gz vga=0x317 url=http://www.ploplinux.com/ploplinux-netboot|/webfilelist-iso iso_filename=ploplinux.iso
http-iso.conf is loaded by /tftpboot/ploplinux-netboot/pxelinux.cfg/default 7. Boot problemsMaybe there is somewhere a wrong path. When you are in the boot menu, then press at the entry that you want to boot the tabulator key. Then add at the end of the line 'debug'. You will see more info's during booting.
© 2025 by
Elmar Hanlhofer |