add pxe script to Slax so user can start PXE server with simple 'pxe' command
parent
1e3fdc1a8b
commit
7c102af221
|
|
@ -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 <www.slax.org>
|
||||||
|
|
||||||
|
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 <a href=http://www.slax.org/>Slax</a> PXE data server. PXE clients will download <a href=PXEFILELIST>file list</a>" > "$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
|
||||||
Loading…
Reference in New Issue