#!/bin/bash # This is a temporary script to create/update the PXE boot menu # for OpenSLX-NG. It is designed to facilitate testing in early # stages and will be replaced by more sophisticated scripts or tools # later on. # - Simon Rettberg MLTK_PID="$$" qnd_exit() { unset_quiet kill "$MLTK_PID" [ $# -ge 1 ] && kill "$1" } . "helper/logging.inc" [ $# -lt 1 ] && perror "Usage: $0 " [ ! -d "server/boot" ] && perror "Not in tm-scripts root directory or no cloned systems created." cd "server/boot" || perror "Could not cd to server/boot" SERVERIP="$1" ifconfig | grep -- "$SERVERIP" > /dev/null RET=$? if [ "x$RET" != "x0" ]; then pwarning "Given server IP '$SERVERIP' not found in ifconfig output. Are you sure this machine is reachable with this address?" sleep 2 fi # generate config header LINKLOC="/srv/openslx/www" if [ -L "$LINKLOC/boot" -o ! -e "$LINKLOC/boot" ]; then ln -sf -t "$LINKLOC" "$(pwd)" "boot" || perror "Could not link $LINKLOC/boot to $(pwd)" fi mkdir -p "/srv/openslx/tftp/pxelinux.cfg" || perror "Could not create directory /srv/openslx/tftp/pxelinux.cfg" CONF="/srv/openslx/tftp/pxelinux.cfg/default" ## This is the template for the boot menu cat > "$CONF" << HEREEND # generated by openslx-ng # if you intend to change this file, remember that it will # be overwritten by generate_bootmenu.sh # this file was generated $(date) DEFAULT vesamenu.c32 # static configuration (override with include file) NOESCAPE 0 PROMPT 0 MENU BACKGROUND openslx.png MENU WIDTH 78 MENU MARGIN 9 MENU PASSWORDMARGIN 9 MENU ROWS 10 MENU TABMSGROW 16 MENU CMDLINEROW 16 MENU ENDROW -1 MENU PASSWORDROW 16 MENU TIMEOUTROW 20 MENU HELPMSGROW 16 MENU HELPMSGENDROW -1 MENU HSHIFT 0 MENU VSHIFT 7 menu color screen 37;40 #80ffffff #00000000 std menu color border 37;40 #40000000 #ff8093a1 std menu color title 1;37;40 #ffff8b00 #ff8093a1 std menu color unsel 37;40 #fff0f0f0 #ff8093a1 std menu color hotkey 1;37;40 #ffff8b00 #ff8093a1 std menu color sel 7;37;40 #ff1c2a33 #667799bb all menu color hotsel 1;7;37;40 #ffff8b00 #667799bb all menu color disabled 1;37;40 #ffff8b00 #ff8093a1 std menu color scrollbar 37;40 #40000000 #ee000000 std menu color tabmsg 37;40 #ffff8b00 #ff8093a1 std menu color cmdmark 1;37;40 #ffff8b00 #ff8093a1 std menu color cmdline 37;40 #fff0f0f0 #ff8093a1 std menu color pwdborder 37;40 #40000000 #ff8093a1 std menu color pwdheader 37;40 #ffff8b00 #ff8093a1 std menu color pwdentry 37;40 #ffff8b00 #ff8093a1 std menu color timeout_msg 37;40 #fff0f0f0 #ff8093a1 std menu color timeout 1;37;40 #ffff8b00 #ff8093a1 std menu color help 37;40 #ff1c2a33 #00000000 none MENU MSGCOLOR #ff1c2a33 #00000000 none # slxsettings configuration TIMEOUT 600 TOTALTIMEOUT 1800 MENU TITLE OpenSLX-NG Preview HEREEND BASEDIR="$(pwd)" LABEL=0 for BASE in $(ls "$BASEDIR"); do pinfo "Found base $BASE....." for STAGE31 in $(ls "$BASEDIR/$BASE/initramfs-stage31"*); do STAGE31="$(basename "$STAGE31")" SSTAGE31="$(echo "$STAGE31" | cut -c 19-)" [ ! -z "$SSTAGE31" ] && SSTAGE31="(31-$SSTAGE31)" pinfo " Found stage31 $SSTAGE31" for STAGE32 in $(ls "$BASEDIR/$BASE/initramfs-stage32"*); do STAGE32="$(basename "$STAGE32")" SSTAGE32="$(echo "$STAGE32" | cut -c 19-)" [ ! -z "$SSTAGE32" ] && SSTAGE32="(32-$SSTAGE32)" pinfo " Found stage32 $SSTAGE32" for KERNEL in $(ls "$BASEDIR/$BASE/kernel/vmlinuz-"*); do KERNEL="$(basename "$KERNEL")" KKERNEL="$(echo "$KERNEL" | cut -c 9-)" pinfo " Found kernel $KKERNEL" LABEL=$[$LABEL + 1] # write out this combination cat >> "$CONF" << HEREEND # --- $BASE --- $KERNEL --- $STAGE31 --- $STAGE32 --- # LABEL system$LABEL MENU LABEL $BASE ($KKERNEL) $SSTAGE31 $SSTAGE32 KERNEL http://$SERVERIP/boot/$BASE/kernel/$KERNEL INITRD http://$SERVERIP/boot/$BASE/$STAGE31,http://$SERVERIP/boot/$BASE/$STAGE32 IPAPPEND 3 HEREEND done done done done