Compare commits
4 Commits
f858d03ff9
...
3fb93b8359
Author | SHA1 | Date |
---|---|---|
Joshua Boniface | 3fb93b8359 | |
Joshua Boniface | 7e50efa9b9 | |
Joshua Boniface | 30f9bbec95 | |
Joshua Boniface | 252c543304 |
42
buildiso.sh
42
buildiso.sh
|
@ -32,23 +32,33 @@ show_help() {
|
||||||
echo -e " -k: Preserve live-build config."
|
echo -e " -k: Preserve live-build config."
|
||||||
}
|
}
|
||||||
|
|
||||||
while getopts "h?o:u:ak" opt; do
|
while [ $# -gt 0 ]; do
|
||||||
case "$opt" in
|
case "${1}" in
|
||||||
h|\?)
|
-h|\?)
|
||||||
show_help
|
show_help
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
o)
|
-o)
|
||||||
isofilename=$OPTARG
|
isofilename="${2}"
|
||||||
|
shift 2
|
||||||
;;
|
;;
|
||||||
u)
|
-u)
|
||||||
deployusername=$OPTARG
|
deployusername="${2}"
|
||||||
|
shift 2
|
||||||
;;
|
;;
|
||||||
a)
|
-a)
|
||||||
preserve_artifacts='y'
|
preserve_artifacts='y'
|
||||||
|
shift
|
||||||
;;
|
;;
|
||||||
k)
|
-k)
|
||||||
preserve_livebuild='y'
|
preserve_livebuild='y'
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Invalid option: ${1}"
|
||||||
|
echo
|
||||||
|
show_help
|
||||||
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
@ -57,8 +67,12 @@ PACKAGE_LIST_MAIN="live-tools linux-image-amd64 mdadm lvm2 parted gdisk debootst
|
||||||
PACKAGE_LIST_NONFREE="firmware-bnx2 firmware-bnx2x"
|
PACKAGE_LIST_NONFREE="firmware-bnx2 firmware-bnx2x"
|
||||||
|
|
||||||
mkdir -p artifacts/lb
|
mkdir -p artifacts/lb
|
||||||
pushd artifacts/lb
|
pushd artifacts/lb &>/dev/null
|
||||||
|
|
||||||
|
echo "Pre-cleaning live-build environment..."
|
||||||
|
sudo lb clean
|
||||||
|
|
||||||
|
echo "Initializing config..."
|
||||||
# Initialize the live-build config
|
# Initialize the live-build config
|
||||||
lb config --distribution buster --architectures amd64 --archive-areas "main contrib non-free" --apt-recommends false
|
lb config --distribution buster --architectures amd64 --archive-areas "main contrib non-free" --apt-recommends false
|
||||||
|
|
||||||
|
@ -123,6 +137,7 @@ sed -i "s/XXDATEXX/$(date)/g" config/includes.chroot/install.sh
|
||||||
sed -i "s/XXDEPLOYUSERXX/${deployusername}/g" config/includes.chroot/install.sh
|
sed -i "s/XXDEPLOYUSERXX/${deployusername}/g" config/includes.chroot/install.sh
|
||||||
|
|
||||||
# Build the live image
|
# Build the live image
|
||||||
|
echo "Building live image..."
|
||||||
sudo lb build
|
sudo lb build
|
||||||
|
|
||||||
# Move the ISO image out
|
# Move the ISO image out
|
||||||
|
@ -130,13 +145,18 @@ cp live-image-amd64.hybrid.iso ../../${isofilename}
|
||||||
|
|
||||||
# Clean up the artifacts
|
# Clean up the artifacts
|
||||||
if [[ -z ${preserve_artifacts} ]]; then
|
if [[ -z ${preserve_artifacts} ]]; then
|
||||||
|
echo "Cleaning live-build environment..."
|
||||||
sudo lb clean
|
sudo lb clean
|
||||||
fi
|
fi
|
||||||
|
|
||||||
popd
|
popd &>/dev/null
|
||||||
|
|
||||||
# Clean up the config
|
# Clean up the config
|
||||||
if [[ -z ${preserve_livebuild} ]]; then
|
if [[ -z ${preserve_livebuild} ]]; then
|
||||||
|
echo -n "Removing artifacts... "
|
||||||
sudo rm -rf artifacts/lb
|
sudo rm -rf artifacts/lb
|
||||||
|
echo "done."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Build completed. ISO file: ${isofilename}"
|
||||||
|
|
|
@ -0,0 +1,147 @@
|
||||||
|
#!/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 [ $# -gt 0 ]; do
|
||||||
|
case "${1}" in
|
||||||
|
-h|\?)
|
||||||
|
show_help
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
-o)
|
||||||
|
outputdir="${2}"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-u)
|
||||||
|
deployusername="${2}"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-a)
|
||||||
|
preserve_artifacts='-a'
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-k)
|
||||||
|
preserve_livebuild='-k'
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-i)
|
||||||
|
preserve_liveiso='y'
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Invalid option: ${1}"
|
||||||
|
echo
|
||||||
|
show_help
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
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} || fail "Failed to build ISO."
|
||||||
|
echo
|
||||||
|
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