Add buildpxe.sh framework
Adds a script to set up a PXE image directory for the PVC installer. Provides an alternative to the ISO for automating deploys in a controlled, PXE-based environment.
This commit is contained in:
		
							
								
								
									
										135
									
								
								buildpxe.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										135
									
								
								buildpxe.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,135 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Generate a PVC autoinstaller PXE configuration
 | 
			
		||||
 | 
			
		||||
fail() {
 | 
			
		||||
    echo "$@"
 | 
			
		||||
    exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
test -f /usr/lib/PXELINUX/pxelinux.0 &>/dev/null || fail "This script requires pxelinux and syslinux-common"
 | 
			
		||||
test -f /usr/lib/syslinux/modules/bios/ldlinux.c32 &>/dev/null || fail "This script requires pxelinux and syslinux-common"
 | 
			
		||||
sudo -n true &>/dev/null || fail "The user running this script must have sudo privileges."
 | 
			
		||||
 | 
			
		||||
outputdir="pvc-installer-pxe_$(date +%Y-%m-%d)/"
 | 
			
		||||
deployusername="deploy"
 | 
			
		||||
 | 
			
		||||
show_help() {
 | 
			
		||||
    echo -e "PVC install PXE generator"
 | 
			
		||||
    echo
 | 
			
		||||
    echo -e " Generates a mostly-automated installer PXE image for a PVC node base system."
 | 
			
		||||
    echo -e " This setup is designed to be used with the pvcbootstrapd system; for a normal"
 | 
			
		||||
    echo -e " installation, use buildiso.sh instead."
 | 
			
		||||
    echo
 | 
			
		||||
    echo -e "Usage: $0 [-h] [-o <outputdirectory>] [-u username]"
 | 
			
		||||
    echo
 | 
			
		||||
    echo -e "   -h: Display this help message."
 | 
			
		||||
    echo -e "   -o: Create the PXE images under <outputdirectory> instead of the default."
 | 
			
		||||
    echo -e "   -u: Change 'deploy' user to a new username."
 | 
			
		||||
    echo -e "   -a: Preserve live-build artifacts (passed through to buildiso.sh)."
 | 
			
		||||
    echo -e "   -k: Preserve live-build config (passed through to buildiso.sh)."
 | 
			
		||||
    echo -e "   -i: Preserve live-build ISO image."
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
while getopts "h?o:u:aki" opt; do
 | 
			
		||||
    case "$opt" in
 | 
			
		||||
        h|\?)
 | 
			
		||||
            show_help
 | 
			
		||||
            exit 0
 | 
			
		||||
        ;;
 | 
			
		||||
        o)
 | 
			
		||||
            outputdir="$OPTARG"
 | 
			
		||||
        ;;
 | 
			
		||||
        u)
 | 
			
		||||
            deployusername=$OPTARG
 | 
			
		||||
        ;;
 | 
			
		||||
        a)
 | 
			
		||||
            preserve_artifacts='-a'
 | 
			
		||||
        ;;
 | 
			
		||||
        k)
 | 
			
		||||
            preserve_livebuild='-l'
 | 
			
		||||
        ;;
 | 
			
		||||
        i)
 | 
			
		||||
            preserve_liveiso='y'
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
cleanup() {
 | 
			
		||||
    echo -n "Cleaning up... "
 | 
			
		||||
    echo "done."
 | 
			
		||||
    echo
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fail() {
 | 
			
		||||
    echo $@
 | 
			
		||||
    cleanup
 | 
			
		||||
    exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
build_iso() {
 | 
			
		||||
	if [[ ! -f pvc-installer_pxe-tmp.iso ]]; then
 | 
			
		||||
	    ./buildiso.sh \
 | 
			
		||||
            -o pvc-installer_pxe-tmp.iso \
 | 
			
		||||
            -u ${deployusername} \
 | 
			
		||||
            ${preserve_artifacts} \
 | 
			
		||||
            ${preserve_livebuild}
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
build_pxe() {
 | 
			
		||||
    mkdir -p ${outputdir} ${outputdir}/boot
 | 
			
		||||
 | 
			
		||||
    echo -n "Mounting temporary ISO file... "
 | 
			
		||||
    tmpdir=$( mktemp -d )
 | 
			
		||||
    sudo mount pvc-installer_pxe-tmp.iso ${tmpdir} &>/dev/null
 | 
			
		||||
    echo "done."
 | 
			
		||||
 | 
			
		||||
    echo -n "Copying live boot files... "
 | 
			
		||||
    cp ${tmpdir}/live/filesystem.squashfs ${outputdir}/
 | 
			
		||||
    cp ${tmpdir}/live/vmlinuz ${outputdir}/
 | 
			
		||||
    cp ${tmpdir}/live/initrd.img ${outputdir}/
 | 
			
		||||
    echo "done."
 | 
			
		||||
 | 
			
		||||
    echo -n "Unmounting and removing temporary ISO file... "
 | 
			
		||||
    sudo umount ${tmpdir}
 | 
			
		||||
    rmdir ${tmpdir}
 | 
			
		||||
    echo "done."
 | 
			
		||||
 | 
			
		||||
    echo -n "Creating base iPXE configuration... "
 | 
			
		||||
    cat <<EOF > ${outputdir}/boot.pxe
 | 
			
		||||
#!ipxe
 | 
			
		||||
 | 
			
		||||
# Set global variables
 | 
			
		||||
set root-url tftp://\${next-server}
 | 
			
		||||
set host-url tftp://\${next-server}/host
 | 
			
		||||
 | 
			
		||||
# Load host/mac-*.ipxe if present (per-host host-args configuration)
 | 
			
		||||
chain --autofree \${host-url}/mac-\${mac:hexraw}.ipxe ||
 | 
			
		||||
 | 
			
		||||
set menu-default pvc-installer
 | 
			
		||||
set submenu-default pvc-installer
 | 
			
		||||
 | 
			
		||||
:pvc-installer
 | 
			
		||||
kernel \${root-url}/vmlinuz
 | 
			
		||||
initrd \${root-url}/initrd.img
 | 
			
		||||
imgargs vmlinuz console=tty0 console=ttyS0,115200n8 boot=live components timezone=America/Toronto fetch=\${root-url}/filesystem.squashfs username=root \${host-args}
 | 
			
		||||
boot
 | 
			
		||||
EOF
 | 
			
		||||
	echo "done."
 | 
			
		||||
 | 
			
		||||
	sudo chown -R $(whoami) ${outputdir}
 | 
			
		||||
	sudo chmod -R u+w ${outputdir}
 | 
			
		||||
 | 
			
		||||
    if [[ -z ${preserve_liveiso} ]]; then
 | 
			
		||||
        echo -n "Removing temporary ISO... "
 | 
			
		||||
        rm pvc-installer_pxe-tmp.iso &>/dev/null
 | 
			
		||||
        echo "done."
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
build_iso
 | 
			
		||||
build_pxe
 | 
			
		||||
cleanup
 | 
			
		||||
 | 
			
		||||
echo "PVC Live Installer PXE generation complete."
 | 
			
		||||
		Reference in New Issue
	
	Block a user