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:
parent
f635e7010c
commit
818f6a636d
|
@ -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."
|
Loading…
Reference in New Issue