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-24.2-x86_64.tar.gz to '/tmp'. tar xfz ploplinux-24.2.tgz -C /tmp Move the files to '/tftpboot/ploplinux-netboot/'. mv /tmp/ploplinux-24.2/* /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-24.2-x86_64.iso, the directory structure and files of ploplinux-pxeboot.tar.gz and the 'syslinux' directory of ploplinux-24.2-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-24.2-x86_64.iso to '/tftpboot/ploplinux-netboot/'. Create a symlink 'ln -s ploplinux-24.2-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-24.2-x86_64.iso, the directory structure and files of ploplinux-pxeboot.tar.gz and the 'syslinux' directory of ploplinux-24.2-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-24.2-x86_64.iso to '/tftpboot/ploplinux-netboot/'. Create there a symlink 'ln -s ploplinux-24.2-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 4.2. Boot ISO over TFTPYou need the ISO ploplinux-24.2-x86_64.iso, the directory structure and files of ploplinux-pxeboot.tar.gz and the 'syslinux' directory of ploplinux-24.2-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-24.2-x86_64.iso to '/tftpboot/ploplinux-netboot/'. Create a symlink 'ln -s ploplinux-24.2-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 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-24.2-x86_64.iso, the directory structure and files of ploplinux-pxeboot.tar.gz and the 'syslinux' directory of ploplinux-24.2-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-24.2-x86_64.iso to '/tftpboot/ploplinux-netboot/'. Create a symlink 'ln -s ploplinux-24.2-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-24.2-x86_64.iso, the directory structure and files of ploplinux-pxeboot.tar.gz and the 'syslinux' directory of ploplinux-24.2-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-24.2-x86_64.iso to '/tftpboot/ploplinux-netboot/'. Create a symlink 'ln -s ploplinux-24.2-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.
© 2024 by
Elmar Hanlhofer |