From 7c102af221a1a0ed0a123bd1921018d5a45d77f6 Mon Sep 17 00:00:00 2001 From: TomasM Date: Thu, 11 Oct 2018 04:42:40 -0500 Subject: [PATCH] add pxe script to Slax so user can start PXE server with simple 'pxe' command --- Slax/debian/rootcopy/usr/bin/pxe | 74 ++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100755 Slax/debian/rootcopy/usr/bin/pxe diff --git a/Slax/debian/rootcopy/usr/bin/pxe b/Slax/debian/rootcopy/usr/bin/pxe new file mode 100755 index 0000000..9434325 --- /dev/null +++ b/Slax/debian/rootcopy/usr/bin/pxe @@ -0,0 +1,74 @@ +#!/bin/bash +# Rebuild initial ramdisk with full network drivers, +# start DHCP and TFTP server in order to provide PXE service +# +# Author: Tomas M + +LIVE=/run/initramfs +FTPROOT=/var/state/dnsmasq/root + +# find out our own IP address. If more interfaces are available, use the first one +IP="$(ls -1 /sys/class/net | egrep -v '^lo$' | sort | head -n 1 | xargs -r ifconfig | fgrep "inet " | tr -s " " | cut -d " " -f 3)" + +# if no IP is assigned to this computer, setup private address randomly +if [ "$IP" = "" ]; then + killall dhcpcd 2>/dev/null + IP="10."$(($RANDOM/130+1))"."$(($RANDOM/130+1))".1" + ifconfig $(ls -1 /sys/class/net | egrep -v '^lo$' | sort | head -n 1) $IP netmask 255.255.255.0 +fi + +# calculate C class range +RANGE=$(echo $IP | cut -d "." -f 1-3) + +# make sure dnsmasq can be started +killall dnsmasq 2>/dev/null +killall busybox 2>/dev/null +rm -Rf $FTPROOT 2>/dev/null +mkdir -p $FTPROOT/{pxelinux.cfg,tmp}/ + +# create root filesystem for ftfp +cd $LIVE +( find . -print | grep -v "memory" + cd / + find /lib/modules/$(uname -r)/kernel/drivers/net | grep -v wireless +) | cpio -pvd $FTPROOT/tmp 2>/dev/null + +cp /lib/modules/$(uname -r)/modules.* $FTPROOT/tmp/lib/modules/$(uname -r) +rm $FTPROOT/tmp/lib/initramfs_escaped + +# pack root in initramfs +cd $FTPROOT/tmp +find . -print | cpio -o -H newc 2>/dev/null | gzip -f --fast >../initrfs.img +cd .. +rm -Rf tmp + +# link files here since copying is not necessary +ln -s $(find $LIVE/memory/{data,iso,toram} 2>/dev/null | grep vmlinuz | head -n 1) $FTPROOT/vmlinuz +ln -s $(find $LIVE/memory/{data,iso,toram} 2>/dev/null | grep pxelinux.0 | head -n 1) $FTPROOT/pxelinux.0 +ln -s $(find $LIVE/memory/{data,iso,toram} 2>/dev/null | grep ldlinux.c32 | head -n 1) $FTPROOT/ldlinux.c32 + +find $LIVE/memory/{data,iso,toram} 2>/dev/null | egrep "[.]sb\$" | sort -n | while read LINE; do + BAS="$(basename "$LINE")" + ln -s $LINE "$FTPROOT/$BAS" + echo $BAS >> "$FTPROOT/PXEFILELIST" +done + +echo "This is Slax PXE data server. PXE clients will download file list" > "$FTPROOT/index.html" + +# default pxelinux configuration. Keep xmode selection for clients the same like for the server +echo " +PROMPT 0 +DEFAULT slax +LABEL slax +KERNEL /vmlinuz +IPAPPEND 1 +APPEND initrd=/initrfs.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 $(cat /proc/cmdline | egrep -o 'slax.flags=[^ ]+' | sed -r 's:[,=]pxe::' | sed -r 's:[,=]toram::') +" > $FTPROOT/pxelinux.cfg/default + +# start the DHCP server and TFTP server +dnsmasq --enable-tftp --tftp-root=/var/state/dnsmasq/root \ +--dhcp-boot=pxelinux.0,"$IP",$IP \ +--dhcp-range=$RANGE.2,$RANGE.250,infinite --log-dhcp + +# start HTTP server at port 7529 (that are the numbers you type on your phone to write 'slax') +busybox httpd -p 7529 -h /var/state/dnsmasq/root