Porteus Kiosk PXE Server


Porteus Kiosk has the ability to boot over a network through the PXE protocol. Our system can easily be deployed on multiple PCs without burning a dozen CDs or usb sticks. Please be mindful that this feature brings some restrictions that are not present in the standard way of booting:


1) The same ISO image is shipped to every client PC so the 'static IP' feature must not be selected in the wizard in order to avoid IP conflicts on the network. Please use the 'DHCPC' option instead. The same rule applies to other kiosk settings like e.g. 'hostname'.

UPDATE: Porteus Kiosk 3.5.0 supports PXE booting with nested configurations enabled which allows configurations 'per PXE client'. Please mind that all modules which you are using across all clients must be hosted on your own PXE server (clients pulling components from porteus-kiosk.org during every boot would bring an unnecessary overhead on our server). If the kiosk configuration differs between the clients (e.g. some PCs are using Firefox and other Chrome browser) then all modules will be downloaded on the client side and then unwanted ones will be deleted from the system automatically.

2) PXE boot needs a wired connection between the server and the client.

3) An additional operating system is required to work as a PXE server hosting the kiosk ISO. You may use your favorite linux distribution (or even Windows) for this task. The only requirement is the presence of the following services:

  • dhcpcd - used for assigning IP addresses to the clients
  • tftpd - used for transporting PXE components (firmware, kernel, initrd)
  • httpd - used for transporting xzm modules to the client PCs (http protocol is much faster than tftp)

  • My server is up and running and has all required services active - what next?

    a) Please boot the kiosk installation ISO and make sure that 'PXE client' component is enabled in the Kiosk Wizard. Set other features to match the client PCs specification (please remember that the kiosk will run on the clients and not the server). On the installation page in the wizard press the 'Exit' button and upload your PXE enabled ISO to some online storage as presented in this video: link

    b) Unpack the ISO to a folder on the server and edit /boot/pxelinux.cfg/default to update 'http_server=' parameter as in this example: http_server=192.168.1.34:8090

    If kiosk ISO is unpacked to specific folder on the http server (rather than root) then please use this parameter: http_server=192.168.1.34:8090/path

    WARNING: If doing a kiosk upgrade or reconfiguration you must delete the old ISO, unpack the new one in its place and edit 'http_server=' parameter once again. Copying xzm modules is not enough as every single file from the ISO image must be replaced.

    c) Point your dhcpc, tftp and http daemons to the folder where the ISO is unpacked. Dhcpcd should be able to upload PXE firmware: /boot/pxelinux.0, tftpd should be able to transport vmlinuz and both initrds (/boot/vmlinuz, /boot/initrd.xz and /boot/pxelinux.cfg/initrdpxe.xz), and httpd should host the folder with all ISO data.

    To automate the process of starting required services, you can use the script below which was tested with the Porteus Desktop edition but should also work for any other linux distro. Be aware that Porteus Desktop uses 'dnsmasq' package for dhcpcd and tftpd services and 'webfsd' which acts as http daemon. Both are small, fast and can be configured from the command line making them perfect for scripting. If you are using different utilities then you have to tweak their configs according to this script.

      #!/bin/bash

      # Run services necessary for booting Porteus Kiosk over the network.


      # Path to folder where Kiosk ISO is unpacked/mounted:

      PXEDATA=/home/guest/kiosk-pxe

      # HTTP server IP address:

      IP=192.168.1.34

      # Port on which the HTTP daemon is listening:

      PORT=8090


      # Start the DHCP server and the TFTP server:

      killall dnsmasq 2>/dev/null

      dnsmasq --enable-tftp --tftp-root=$PXEDATA/boot --dhcp-boot=pxelinux.0,"$IP",$IP --dhcp-range=$(echo $IP | cut -d. -f1-3).50,$(echo $IP | cut -d. -f1-3).250,infinite --log-dhcp


      # Start the HTTP daemon:

      killall webfsd 2>/dev/null

      webfsd -i $IP -p $PORT -r $PXEDATA -u nobody -g nogroup >/dev/null


      # Enable packet forwarding so pxe clients can connect to the internet:

      echo 1 > /proc/sys/net/ipv4/ip_forward


      echo "PXE services for Porteus Kiosk should be started now."


    Once services are started you need to check if they are working correctly. Please run 'ps auxww' command in the terminal and you should see similar output:

    nobody 3123 0.0 0.0 12824 696 ? S 15:16 0:00 dnsmasq --enable-tftp --tftp-root=/home/guest/kiosk-pxe/boot --dhcp-boot=pxelinux.0,192.168.1.34,192.168.1.34 --dhcp-range=192.168.1.50,192.168.1.250,infinite --log-dhcp
    nobody 3126 0.0 0.0 25272 472 ? Ss 15:16 0:00 webfsd -i 192.168.1.34 -p 8090 -r /home/guest/kiosk-pxe -u nobody -g nogroup

    You can also open your browser and navigate to the 192.168.1.34:8090 address where you should find all kiosk data hosted.

    If the service test passes you can test the kiosk ISO booted over PXE. You can do this directly on the server with the help of the virtualization software:

  • make sure that your firewall is not blocking anything PXE related
  • start VirtualBox and create a new virtual machine with the network interface set to 'bridged mode'
  • launch virtual machine -> press F12 to select booting device -> press 'l' for LAN

  • Enjoy Porteus Kiosk booted over the network.