diff --git a/build.sh b/build.sh index 22a7727..83a7436 100755 --- a/build.sh +++ b/build.sh @@ -48,30 +48,85 @@ if [ "$debug_mode" = true ]; then menu_message+=" \e[31m(Debug Mode)\e[0m" fi -menu_option_1() { - INPUT_PATH="$SCRIPT_PATH"/builds/linux/almalinux/10/ - BUILD_PATH=${INPUT_PATH#"${SCRIPT_PATH}/builds/"} +# Menu registry +# Format: key="Label|RelativeInputPath" +declare -A MENU_ITEMS=( + [1]="AlmaLinux 10|linux/almalinux/10" + [2]="AlmaLinux 9|linux/almalinux/9" + [3]="AlmaLinux 8|linux/almalinux/8" + [4]="CentOS 10 Stream|linux/centos/10-stream" + [5]="CentOS 9 Stream|linux/centos/9-stream" + [6]="Debian 12 (Bookworm)|linux/debian/12" + [7]="Debian 12 (Bullseye)|linux/debian/11" + [8]="openSUSE Leap 15.6|linux/opensuse/leap-15-6" + [9]="openSUSE Leap 15.5|linux/opensuse/leap-15-5" + [10]="Oracle Linux 9|linux/oracle/9" + [11]="Oracle Linux 8|linux/oracle/8" + [12]="Rocky Linux 10|linux/rocky/10" + [13]="Rocky Linux 9|linux/rocky/9" + [14]="Rocky Linux 8|linux/rocky/8" + [15]="Ubuntu Server 25.04|linux/ubuntu/25-04" + [16]="Ubuntu Server 24.04 LTS|linux/ubuntu/24-04-lts" + [17]="Ubuntu Server 22.04|linux/ubuntu/22-04-lts" + [18]="Ubuntu Server 20.04|linux/ubuntu/20-04-lts" + [19]="Windows 11 - All|windows/desktop/11|" + [20]="Windows 11 - Enterprise|windows/desktop/11|--only proxmox-iso.windows-desktop-ent" + [21]="Windows 11 - Professional|windows/desktop/11|--only proxmox-iso.windows-desktop-pro" + [I]="Information|info" + [Q]="Quit|quit_program" +) + +build_template() { + local label="$1" + local relative_path="$2" + local extra_args="$3" + + INPUT_PATH="$SCRIPT_PATH/builds/$relative_path" + BUILD_PATH="${relative_path}" BUILD_VARS="$(echo "${BUILD_PATH%/}" | tr -s '/' | tr '/' '-').pkrvars.hcl" - echo -e "\nCONFIRM: Build a AlmaLinux 10 Template for Proxmox?" - echo -e "\nContinue? (y/n)" - read -r REPLY - if [[ ! $REPLY =~ ^[Yy]$ ]] - then - exit 1 + # List of required var files + local var_files=( + "$CONFIG_PATH/ansible.pkrvars.hcl" + "$CONFIG_PATH/build.pkrvars.hcl" + "$CONFIG_PATH/common.pkrvars.hcl" + "$CONFIG_PATH/linux-storage.pkrvars.hcl" + "$CONFIG_PATH/network.pkrvars.hcl" + "$CONFIG_PATH/proxmox.pkrvars.hcl" + "$CONFIG_PATH/$BUILD_VARS" + ) + + # Validate all var files exist + local missing_files=() + for file in "${var_files[@]}"; do + if [[ ! -f "$file" ]]; then + missing_files+=("$file") + fi + done + + if [[ ${#missing_files[@]} -ne 0 ]]; then + echo "Error: The following required .pkrvars.hcl files are missing:" + for f in "${missing_files[@]}"; do + echo " - $f" + done + echo "Aborting build." + return 1 fi - ### Build a AlmaLinux 10 Template for Proxmox. ### - echo "Building a AlmaLinux 10 Template for Proxmox..." + # Confirmation prompt + echo -e "\nCONFIRM: Build a $label Template for Proxmox?" + read -rp "Continue? (y/n) " REPLY + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + echo "Aborted." + return + fi - ### Initialize HashiCorp Packer and required plugins. ### + echo "Building a $label Template for Proxmox..." echo "Initializing HashiCorp Packer and required plugins..." packer init "$INPUT_PATH" - ### Start the Build. ### - echo "Starting the build...." - echo "packer build -force -on-error=ask $debug_option" - packer build -force -on-error=ask $debug_option \ + echo "Starting the build..." + packer build -force -on-error=ask $debug_option $extra_args \ -var-file="$CONFIG_PATH/ansible.pkrvars.hcl" \ -var-file="$CONFIG_PATH/build.pkrvars.hcl" \ -var-file="$CONFIG_PATH/common.pkrvars.hcl" \ @@ -81,748 +136,24 @@ menu_option_1() { -var-file="$CONFIG_PATH/$BUILD_VARS" \ "$INPUT_PATH" - ### All done. ### echo "Done." } -menu_option_2() { - INPUT_PATH="$SCRIPT_PATH"/builds/linux/almalinux/9/ - BUILD_PATH=${INPUT_PATH#"${SCRIPT_PATH}/builds/"} - BUILD_VARS="$(echo "${BUILD_PATH%/}" | tr -s '/' | tr '/' '-').pkrvars.hcl" - - echo -e "\nCONFIRM: Build a AlmaLinux 9 Template for Proxmox?" - echo -e "\nContinue? (y/n)" - read -r REPLY - if [[ ! $REPLY =~ ^[Yy]$ ]] - then - exit 1 +dispatch_selection() { + entry="${MENU_ITEMS[$selection]}" + if [[ -z "$entry" ]]; then + echo "Invalid selection." + return fi - ### Build a AlmaLinux 9 Template for Proxmox. ### - echo "Building a AlmaLinux 9 Template for Proxmox..." + IFS='|' read -r label path_or_function extra_args <<< "$entry" - ### Initialize HashiCorp Packer and required plugins. ### - echo "Initializing HashiCorp Packer and required plugins..." - packer init "$INPUT_PATH" - - ### Start the Build. ### - echo "Starting the build...." - echo "packer build -force -on-error=ask $debug_option" - packer build -force -on-error=ask $debug_option \ - -var-file="$CONFIG_PATH/ansible.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/build.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/common.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/linux-storage.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/network.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/proxmox.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/$BUILD_VARS" \ - "$INPUT_PATH" - - ### All done. ### - echo "Done." -} - -menu_option_3() { - INPUT_PATH="$SCRIPT_PATH"/builds/linux/almalinux/8/ - BUILD_PATH=${INPUT_PATH#"${SCRIPT_PATH}/builds/"} - BUILD_VARS="$(echo "${BUILD_PATH%/}" | tr -s '/' | tr '/' '-').pkrvars.hcl" - - echo -e "\nCONFIRM: Build a AlmaLinux 8 Template for Proxmox?" - echo -e "\nContinue? (y/n)" - read -r REPLY - if [[ ! $REPLY =~ ^[Yy]$ ]] - then - exit 1 + # Decide if it’s a build or a function + if [[ -d "$SCRIPT_PATH/builds/$path_or_function" ]]; then + build_template "$label" "$path_or_function" "$extra_args" + else + $path_or_function fi - - ### Build a AlmaLinux 8 Template for Proxmox. ### - echo "Building a AlmaLinux 8 Template for Proxmox..." - - ### Initialize HashiCorp Packer and required plugins. ### - echo "Initializing HashiCorp Packer and required plugins..." - packer init "$INPUT_PATH" - - ### Start the Build. ### - echo "Starting the build...." - echo "packer build -force -on-error=ask $debug_option" - packer build -force -on-error=ask $debug_option \ - -var-file="$CONFIG_PATH/ansible.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/build.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/common.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/linux-storage.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/network.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/proxmox.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/$BUILD_VARS" \ - "$INPUT_PATH" - - ### All done. ### - echo "Done." -} - -menu_option_4() { - INPUT_PATH="$SCRIPT_PATH"/builds/linux/centos/10-stream/ - BUILD_PATH=${INPUT_PATH#"${SCRIPT_PATH}/builds/"} - BUILD_VARS="$(echo "${BUILD_PATH%/}" | tr -s '/' | tr '/' '-').pkrvars.hcl" - - echo -e "\nCONFIRM: Build a CentOS 10 Stream Template for Proxmox?" - echo -e "\nContinue? (y/n)" - read -r REPLY - if [[ ! $REPLY =~ ^[Yy]$ ]] - then - exit 1 - fi - - ### Build a CentOS 10 Stream Template for Proxmox. ### - echo "Building a CentOS 10 Stream Template for Proxmox..." - - ### Initialize HashiCorp Packer and required plugins. ### - echo "Initializing HashiCorp Packer and required plugins..." - packer init "$INPUT_PATH" - - ### Start the Build. ### - echo "Starting the build...." - echo "packer build -force -on-error=ask $debug_option" - packer build -force -on-error=ask $debug_option \ - -var-file="$CONFIG_PATH/ansible.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/build.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/common.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/linux-storage.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/network.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/proxmox.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/$BUILD_VARS" \ - "$INPUT_PATH" - - ### All done. ### - echo "Done." -} - -menu_option_5() { - INPUT_PATH="$SCRIPT_PATH"/builds/linux/centos/9-stream/ - BUILD_PATH=${INPUT_PATH#"${SCRIPT_PATH}/builds/"} - BUILD_VARS="$(echo "${BUILD_PATH%/}" | tr -s '/' | tr '/' '-').pkrvars.hcl" - - echo -e "\nCONFIRM: Build a CentOS 9 Stream Template for Proxmox?" - echo -e "\nContinue? (y/n)" - read -r REPLY - if [[ ! $REPLY =~ ^[Yy]$ ]] - then - exit 1 - fi - - ### Build a CentOS 9 Stream Template for Proxmox. ### - echo "Building a CentOS 9 Stream Template for Proxmox..." - - ### Initialize HashiCorp Packer and required plugins. ### - echo "Initializing HashiCorp Packer and required plugins..." - packer init "$INPUT_PATH" - - ### Start the Build. ### - echo "Starting the build...." - echo "packer build -force -on-error=ask $debug_option" - packer build -force -on-error=ask $debug_option \ - -var-file="$CONFIG_PATH/ansible.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/build.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/common.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/linux-storage.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/network.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/proxmox.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/$BUILD_VARS" \ - "$INPUT_PATH" - - ### All done. ### - echo "Done." -} - -menu_option_6() { - INPUT_PATH="$SCRIPT_PATH"/builds/linux/debian/12/ - BUILD_PATH=${INPUT_PATH#"${SCRIPT_PATH}/builds/"} - BUILD_VARS="$(echo "${BUILD_PATH%/}" | tr -s '/' | tr '/' '-').pkrvars.hcl" - - echo -e "\nCONFIRM: Build a Debian 12 (Bookworm) Template for Proxmox?" - echo -e "\nContinue? (y/n)" - read -r REPLY - if [[ ! $REPLY =~ ^[Yy]$ ]] - then - exit 1 - fi - - ### Build a Debian 12 (Bookworm) for Proxmox. ### - echo "Building a Debian 12 (Bookworm) for Proxmox..." - - ### Initialize HashiCorp Packer and required plugins. ### - echo "Initializing HashiCorp Packer and required plugins..." - packer init "$INPUT_PATH" - - ### Start the Build. ### - echo "Starting the build...." - echo "packer build -force -on-error=ask $debug_option" - packer build -force -on-error=ask $debug_option \ - -var-file="$CONFIG_PATH/ansible.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/build.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/common.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/linux-storage.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/network.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/proxmox.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/$BUILD_VARS" \ - "$INPUT_PATH" - - ### All done. ### - echo "Done." -} - -menu_option_7() { - INPUT_PATH="$SCRIPT_PATH"/builds/linux/debian/11/ - BUILD_PATH=${INPUT_PATH#"${SCRIPT_PATH}/builds/"} - BUILD_VARS="$(echo "${BUILD_PATH%/}" | tr -s '/' | tr '/' '-').pkrvars.hcl" - - echo -e "\nCONFIRM: Build a Debian 11 (Bullseye) Template for Proxmox?" - echo -e "\nContinue? (y/n)" - read -r REPLY - if [[ ! $REPLY =~ ^[Yy]$ ]] - then - exit 1 - fi - - ### Build a Debian 11 (Bullseye) for Proxmox. ### - echo "Building a Debian 11 (Bullseye) for Proxmox..." - - ### Initialize HashiCorp Packer and required plugins. ### - echo "Initializing HashiCorp Packer and required plugins..." - packer init "$INPUT_PATH" - - ### Start the Build. ### - echo "Starting the build...." - echo "packer build -force -on-error=ask $debug_option" - packer build -force -on-error=ask $debug_option \ - -var-file="$CONFIG_PATH/ansible.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/build.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/common.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/linux-storage.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/network.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/proxmox.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/$BUILD_VARS" \ - "$INPUT_PATH" - - ### All done. ### - echo "Done." -} - -menu_option_8() { - INPUT_PATH="$SCRIPT_PATH"/builds/linux/opensuse/leap-15-6/ - BUILD_PATH=${INPUT_PATH#"${SCRIPT_PATH}/builds/"} - BUILD_VARS="$(echo "${BUILD_PATH%/}" | tr -s '/' | tr '/' '-').pkrvars.hcl" - - echo -e "\nCONFIRM: Build a OpenSUSE Leap 15.6 Template for Proxmox?" - echo -e "\nContinue? (y/n)" - read -r REPLY - if [[ ! $REPLY =~ ^[Yy]$ ]] - then - exit 1 - fi - - ### Build a OpenSUSE Leap 15.6 Template for Proxmox. ### - echo "Building a OpenSUSE Leap 15.6 Template for Proxmox..." - - ### Initialize HashiCorp Packer and required plugins. ### - echo "Initializing HashiCorp Packer and required plugins..." - packer init "$INPUT_PATH" - - ### Start the Build. ### - echo "Starting the build...." - echo "packer build -force -on-error=ask $debug_option" - packer build -force -on-error=ask $debug_option \ - -var-file="$CONFIG_PATH/ansible.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/build.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/common.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/linux-storage.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/network.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/proxmox.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/$BUILD_VARS" \ - "$INPUT_PATH" - - ### All done. ### - echo "Done." -} - -menu_option_9() { - INPUT_PATH="$SCRIPT_PATH"/builds/linux/opensuse/leap-15-5/ - BUILD_PATH=${INPUT_PATH#"${SCRIPT_PATH}/builds/"} - BUILD_VARS="$(echo "${BUILD_PATH%/}" | tr -s '/' | tr '/' '-').pkrvars.hcl" - - echo -e "\nCONFIRM: Build a OpenSUSE Leap 15.5 Template for Proxmox?" - echo -e "\nContinue? (y/n)" - read -r REPLY - if [[ ! $REPLY =~ ^[Yy]$ ]] - then - exit 1 - fi - - ### Build a OpenSUSE Leap 15.5 Template for Proxmox. ### - echo "Building a OpenSUSE Leap 15.5 Template for Proxmox..." - - ### Initialize HashiCorp Packer and required plugins. ### - echo "Initializing HashiCorp Packer and required plugins..." - packer init "$INPUT_PATH" - - ### Start the Build. ### - echo "Starting the build...." - echo "packer build -force -on-error=ask $debug_option" - packer build -force -on-error=ask $debug_option \ - -var-file="$CONFIG_PATH/ansible.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/build.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/common.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/linux-storage.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/network.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/proxmox.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/$BUILD_VARS" \ - "$INPUT_PATH" - - ### All done. ### - echo "Done." -} - -menu_option_10() { - INPUT_PATH="$SCRIPT_PATH"/builds/linux/oracle/9/ - BUILD_PATH=${INPUT_PATH#"${SCRIPT_PATH}/builds/"} - BUILD_VARS="$(echo "${BUILD_PATH%/}" | tr -s '/' | tr '/' '-').pkrvars.hcl" - - echo -e "\nCONFIRM: Build a Oracle Linux 9 Template for Proxmox?" - echo -e "\nContinue? (y/n)" - read -r REPLY - if [[ ! $REPLY =~ ^[Yy]$ ]] - then - exit 1 - fi - - ### Build a Oracle Linux 9 Template for Proxmox. ### - echo "Building a Oracle Linux 9 Template for Proxmox..." - - ### Initialize HashiCorp Packer and required plugins. ### - echo "Initializing HashiCorp Packer and required plugins..." - packer init "$INPUT_PATH" - - ### Start the Build. ### - echo "Starting the build...." - echo "packer build -force -on-error=ask $debug_option" - packer build -force -on-error=ask $debug_option \ - -var-file="$CONFIG_PATH/ansible.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/build.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/common.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/linux-storage.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/network.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/proxmox.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/$BUILD_VARS" \ - "$INPUT_PATH" - - ### All done. ### - echo "Done." -} - -menu_option_11() { - INPUT_PATH="$SCRIPT_PATH"/builds/linux/oracle/8/ - BUILD_PATH=${INPUT_PATH#"${SCRIPT_PATH}/builds/"} - BUILD_VARS="$(echo "${BUILD_PATH%/}" | tr -s '/' | tr '/' '-').pkrvars.hcl" - - echo -e "\nCONFIRM: Build a Oracle Linux 8 Template for Proxmox?" - echo -e "\nContinue? (y/n)" - read -r REPLY - if [[ ! $REPLY =~ ^[Yy]$ ]] - then - exit 1 - fi - - ### Build a Oracle Linux 8 Template for Proxmox. ### - echo "Building a Oracle Linux 8 Template for Proxmox..." - - ### Initialize HashiCorp Packer and required plugins. ### - echo "Initializing HashiCorp Packer and required plugins..." - packer init "$INPUT_PATH" - - ### Start the Build. ### - echo "Starting the build...." - echo "packer build -force -on-error=ask $debug_option" - packer build -force -on-error=ask $debug_option \ - -var-file="$CONFIG_PATH/ansible.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/build.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/common.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/linux-storage.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/network.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/proxmox.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/$BUILD_VARS" \ - "$INPUT_PATH" - - ### All done. ### - echo "Done." -} - -menu_option_12() { - INPUT_PATH="$SCRIPT_PATH"/builds/linux/rocky/10/ - BUILD_PATH=${INPUT_PATH#"${SCRIPT_PATH}/builds/"} - BUILD_VARS="$(echo "${BUILD_PATH%/}" | tr -s '/' | tr '/' '-').pkrvars.hcl" - - echo -e "\nCONFIRM: Build a Rocky Linux 10 Template for Proxmox?" - echo -e "\nContinue? (y/n)" - read -r REPLY - if [[ ! $REPLY =~ ^[Yy]$ ]] - then - exit 1 - fi - - ### Build a Rocky Linux 10 for Proxmox. ### - echo "Building a Rocky Linux 10 for Proxmox..." - - ### Initialize HashiCorp Packer and required plugins. ### - echo "Initializing HashiCorp Packer and required plugins..." - packer init "$INPUT_PATH" - - ### Start the Build. ### - echo "Starting the build...." - echo "packer build -force -on-error=ask $debug_option" - packer build -force -on-error=ask $debug_option \ - -var-file="$CONFIG_PATH/ansible.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/build.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/common.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/linux-storage.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/network.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/proxmox.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/$BUILD_VARS" \ - "$INPUT_PATH" - - ### All done. ### - echo "Done." -} - -menu_option_13() { - INPUT_PATH="$SCRIPT_PATH"/builds/linux/rocky/9/ - BUILD_PATH=${INPUT_PATH#"${SCRIPT_PATH}/builds/"} - BUILD_VARS="$(echo "${BUILD_PATH%/}" | tr -s '/' | tr '/' '-').pkrvars.hcl" - - echo -e "\nCONFIRM: Build a Rocky Linux 9 Template for Proxmox?" - echo -e "\nContinue? (y/n)" - read -r REPLY - if [[ ! $REPLY =~ ^[Yy]$ ]] - then - exit 1 - fi - - ### Build a Rocky Linux 9 for Proxmox. ### - echo "Building a Rocky Linux 9 for Proxmox..." - - ### Initialize HashiCorp Packer and required plugins. ### - echo "Initializing HashiCorp Packer and required plugins..." - packer init "$INPUT_PATH" - - ### Start the Build. ### - echo "Starting the build...." - echo "packer build -force -on-error=ask $debug_option" - packer build -force -on-error=ask $debug_option \ - -var-file="$CONFIG_PATH/ansible.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/build.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/common.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/linux-storage.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/network.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/proxmox.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/$BUILD_VARS" \ - "$INPUT_PATH" - - ### All done. ### - echo "Done." -} - -menu_option_14() { - INPUT_PATH="$SCRIPT_PATH"/builds/linux/rocky/8/ - BUILD_PATH=${INPUT_PATH#"${SCRIPT_PATH}/builds/"} - BUILD_VARS="$(echo "${BUILD_PATH%/}" | tr -s '/' | tr '/' '-').pkrvars.hcl" - - echo -e "\nCONFIRM: Build a Rocky Linux 8 Template for Proxmox?" - echo -e "\nContinue? (y/n)" - read -r REPLY - if [[ ! $REPLY =~ ^[Yy]$ ]] - then - exit 1 - fi - - ### Build a Rocky Linux 8 for Proxmox. ### - echo "Building a Rocky Linux 8 for Proxmox..." - - ### Initialize HashiCorp Packer and required plugins. ### - echo "Initializing HashiCorp Packer and required plugins..." - packer init "$INPUT_PATH" - - ### Start the Build. ### - echo "Starting the build...." - echo "packer build -force -on-error=ask $debug_option" - packer build -force -on-error=ask $debug_option \ - -var-file="$CONFIG_PATH/ansible.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/build.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/common.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/linux-storage.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/network.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/proxmox.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/$BUILD_VARS" \ - "$INPUT_PATH" - - ### All done. ### - echo "Done." -} - -menu_option_15() { - INPUT_PATH="$SCRIPT_PATH"/builds/linux/ubuntu/25-04/ - BUILD_PATH=${INPUT_PATH#"${SCRIPT_PATH}/builds/"} - BUILD_VARS="$(echo "${BUILD_PATH%/}" | tr -s '/' | tr '/' '-').pkrvars.hcl" - - echo -e "\nCONFIRM: Build a Ubuntu Server 25.04 Template for Proxmox?" - echo -e "\nContinue? (y/n)" - read -r REPLY - if [[ ! $REPLY =~ ^[Yy]$ ]] - then - exit 1 - fi - - ### Build a Ubuntu Server 25.04 Template for Proxmox. ### - echo "Building a Ubuntu Server 25.04 Template for Proxmox..." - - ### Initialize HashiCorp Packer and required plugins. ### - echo "Initializing HashiCorp Packer and required plugins..." - packer init "$INPUT_PATH" - - ### Start the Build. ### - echo "Starting the build...." - echo "packer build -force -on-error=ask $debug_option" - packer build -force -on-error=ask $debug_option \ - -var-file="$CONFIG_PATH/ansible.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/build.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/common.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/linux-storage.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/network.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/proxmox.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/$BUILD_VARS" \ - "$INPUT_PATH" - - ### All done. ### - echo "Done." -} - -menu_option_16() { - INPUT_PATH="$SCRIPT_PATH"/builds/linux/ubuntu/24-04-lts/ - BUILD_PATH=${INPUT_PATH#"${SCRIPT_PATH}/builds/"} - BUILD_VARS="$(echo "${BUILD_PATH%/}" | tr -s '/' | tr '/' '-').pkrvars.hcl" - - echo -e "\nCONFIRM: Build a Ubuntu Server 24.04 LTS Template for Proxmox?" - echo -e "\nContinue? (y/n)" - read -r REPLY - if [[ ! $REPLY =~ ^[Yy]$ ]] - then - exit 1 - fi - - ### Build a Ubuntu Server 24.04 LTS Template for Proxmox. ### - echo "Building a Ubuntu Server 24.04 LTS Template for Proxmox..." - - ### Initialize HashiCorp Packer and required plugins. ### - echo "Initializing HashiCorp Packer and required plugins..." - packer init "$INPUT_PATH" - - ### Start the Build. ### - echo "Starting the build...." - echo "packer build -force -on-error=ask $debug_option" - packer build -force -on-error=ask $debug_option \ - -var-file="$CONFIG_PATH/ansible.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/build.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/common.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/linux-storage.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/network.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/proxmox.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/$BUILD_VARS" \ - "$INPUT_PATH" - - ### All done. ### - echo "Done." -} - - -menu_option_17() { - INPUT_PATH="$SCRIPT_PATH"/builds/linux/ubuntu/22-04-lts/ - BUILD_PATH=${INPUT_PATH#"${SCRIPT_PATH}/builds/"} - BUILD_VARS="$(echo "${BUILD_PATH%/}" | tr -s '/' | tr '/' '-').pkrvars.hcl" - - echo -e "\nCONFIRM: Build a Ubuntu Server 22.04 LTS Template for Proxmox?" - echo -e "\nContinue? (y/n)" - read -r REPLY - if [[ ! $REPLY =~ ^[Yy]$ ]] - then - exit 1 - fi - - ### Build a Ubuntu Server 22.04 LTS Template for Proxmox. ### - echo "Building a Ubuntu Server 22.04 LTS Template for Proxmox..." - - ### Initialize HashiCorp Packer and required plugins. ### - echo "Initializing HashiCorp Packer and required plugins..." - packer init "$INPUT_PATH" - - ### Start the Build. ### - echo "Starting the build...." - echo "packer build -force -on-error=ask $debug_option" - packer build -force -on-error=ask $debug_option \ - -var-file="$CONFIG_PATH/ansible.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/build.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/common.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/linux-storage.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/network.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/proxmox.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/$BUILD_VARS" \ - "$INPUT_PATH" - - ### All done. ### - echo "Done." -} - -menu_option_18() { - INPUT_PATH="$SCRIPT_PATH"/builds/linux/ubuntu/20-04-lts/ - BUILD_PATH=${INPUT_PATH#"${SCRIPT_PATH}/builds/"} - BUILD_VARS="$(echo "${BUILD_PATH%/}" | tr -s '/' | tr '/' '-').pkrvars.hcl" - - echo -e "\nCONFIRM: Build a Ubuntu Server 20.04 LTS Template for Proxmox?" - echo -e "\nContinue? (y/n)" - read -r REPLY - if [[ ! $REPLY =~ ^[Yy]$ ]] - then - exit 1 - fi - - ### Build a Ubuntu Server 20.04 LTS Template for Proxmox. ### - echo "Building a Ubuntu Server 20.04 LTS Template for Proxmox..." - - ### Initialize HashiCorp Packer and required plugins. ### - echo "Initializing HashiCorp Packer and required plugins..." - packer init "$INPUT_PATH" - - ### Start the Build. ### - echo "Starting the build...." - echo "packer build -force -on-error=ask $debug_option" - packer build -force -on-error=ask $debug_option \ - -var-file="$CONFIG_PATH/ansible.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/build.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/common.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/linux-storage.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/network.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/proxmox.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/$BUILD_VARS" \ - "$INPUT_PATH" - - ### All done. ### - echo "Done." -} - -menu_option_19() { - INPUT_PATH="$SCRIPT_PATH"/builds/windows/desktop/11/ - BUILD_PATH=${INPUT_PATH#"${SCRIPT_PATH}/builds/"} - BUILD_VARS="$(echo "${BUILD_PATH%/}" | tr -s '/' | tr '/' '-').pkrvars.hcl" - - echo -e "\nCONFIRM: Build all Windows 11 Templates for Proxmox?" - echo -e "\nContinue? (y/n)" - read -r REPLY - if [[ ! $REPLY =~ ^[Yy]$ ]] - then - exit 1 - fi - - ### Build all Windows 11 Templates for Proxmox. ### - echo "Building all Windows 11 Templates for Proxmox..." - - ### Initialize HashiCorp Packer and required plugins. ### - echo "Initializing HashiCorp Packer and required plugins..." - packer init "$INPUT_PATH" - - ### Start the Build. ### - echo "Starting the build...." - echo "packer build -force -on-error=ask $debug_option" - packer build -force -on-error=ask $debug_option \ - -var-file="$CONFIG_PATH/ansible.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/build.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/common.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/network.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/proxmox.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/$BUILD_VARS" \ - "$INPUT_PATH" - - ### All done. ### - echo "Done." -} - -menu_option_20() { - INPUT_PATH="$SCRIPT_PATH"/builds/windows/desktop/11/ - BUILD_PATH=${INPUT_PATH#"${SCRIPT_PATH}/builds/"} - BUILD_VARS="$(echo "${BUILD_PATH%/}" | tr -s '/' | tr '/' '-').pkrvars.hcl" - - echo -e "\nCONFIRM: Build a Windows 11 - Enterprise Template for Proxmox?" - echo -e "\nContinue? (y/n)" - read -r REPLY - if [[ ! $REPLY =~ ^[Yy]$ ]] - then - exit 1 - fi - - ### Build a Windows 11 - Enterprise Template for Proxmox. ### - echo "Building a Windows 11 - Enterprise Template for Proxmox..." - - ### Initialize HashiCorp Packer and required plugins. ### - echo "Initializing HashiCorp Packer and required plugins..." - packer init "$INPUT_PATH" - - ### Start the Build. ### - echo "Starting the build...." - echo "packer build -force -on-error=ask $debug_option" - packer build -force -on-error=ask $debug_option \ - --only proxmox-iso.windows-desktop-ent \ - -var-file="$CONFIG_PATH/ansible.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/build.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/common.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/network.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/proxmox.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/$BUILD_VARS" \ - "$INPUT_PATH" - - ### All done. ### - echo "Done." -} - -menu_option_21() { - INPUT_PATH="$SCRIPT_PATH"/builds/windows/desktop/11/ - BUILD_PATH=${INPUT_PATH#"${SCRIPT_PATH}/builds/"} - BUILD_VARS="$(echo "${BUILD_PATH%/}" | tr -s '/' | tr '/' '-').pkrvars.hcl" - - echo -e "\nCONFIRM: Build a Windows 11 - Professional Template for Proxmox?" - echo -e "\nContinue? (y/n)" - read -r REPLY - if [[ ! $REPLY =~ ^[Yy]$ ]] - then - exit 1 - fi - - ### Build a Windows 11 - Professional Templates for Proxmox. ### - echo "Building a Windows 11 - Professional Template for Proxmox..." - - ### Initialize HashiCorp Packer and required plugins. ### - echo "Initializing HashiCorp Packer and required plugins..." - packer init "$INPUT_PATH" - - ### Start the Build. ### - echo "Starting the build...." - echo "packer build -force -on-error=ask $debug_option" - packer build -force -on-error=ask $debug_option \ - --only proxmox-iso.windows-desktop-pro \ - -var-file="$CONFIG_PATH/ansible.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/build.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/common.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/network.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/proxmox.pkrvars.hcl" \ - -var-file="$CONFIG_PATH/$BUILD_VARS" \ - "$INPUT_PATH" - - ### All done. ### - echo "Done." } press_enter() { @@ -839,11 +170,17 @@ info() { read -r } -incorrect_selection() { - echo "Invalid selection, please try again." +quit_program() { + echo "Exiting..." + exit 0 } -until [ "$selection" = "0" ]; do +read_selection() { + read -rp "Selection: " input + echo "${input^^}" # always uppercase +} + +display_menu() { clear echo "" echo " ____ __ ____ " @@ -857,61 +194,18 @@ until [ "$selection" = "0" ]; do echo -n " Select a HashiCorp Packer build for your hypervisor:" echo "" echo "" - echo " Linux Distribution:" + + for key in $(printf "%s\n" "${!MENU_ITEMS[@]}" | sort -n 2>/dev/null); do + IFS='|' read -r label _ <<< "${MENU_ITEMS[$key]}" + printf " %2s - %s\n" "$key" "$label" + done echo "" - echo " 1 - AlmaLinux 10" - echo " 2 - AlmaLinux 9" - echo " 3 - AlmaLinux 8" - echo " 4 - CentOS 10 Stream" - echo " 5 - CentOS 9 Stream" - echo " 6 - Debian 12" - echo " 7 - Debian 11" - echo " 8 - OpenSUSE Leap 15.6" - echo " 9 - OpenSUSE Leap 15.5" - echo " 10 - Oracle Linux 9" - echo " 11 - Oracle Linux 8" - echo " 12 - Rocky Linux 10" - echo " 13 - Rocky Linux 9" - echo " 14 - Rocky Linux 8" - echo " 15 - Ubuntu Server 25.04" - echo " 16 - Ubuntu Server 24.04 LTS" - echo " 17 - Ubuntu Server 22.04 LTS" - echo " 18 - Ubuntu Server 20.04 LTS" - echo " 19 - Windows 11 - All" - echo " 20 - Windows 11 - Enterprise Only" - echo " 21 - Windows 11 - Professional Only" + selection=$(read_selection) +} + +while true; do + display_menu + dispatch_selection echo "" - echo " Other:" - echo "" - echo " I - Information" - echo " Q - Quit" - echo "" - read -r selection - echo "" - case $selection in - 1 ) clear ; menu_option_1 ; press_enter ;; - 2 ) clear ; menu_option_2 ; press_enter ;; - 3 ) clear ; menu_option_3 ; press_enter ;; - 4 ) clear ; menu_option_4 ; press_enter ;; - 5 ) clear ; menu_option_5 ; press_enter ;; - 6 ) clear ; menu_option_6 ; press_enter ;; - 7 ) clear ; menu_option_7 ; press_enter ;; - 8 ) clear ; menu_option_8 ; press_enter ;; - 9 ) clear ; menu_option_9 ; press_enter ;; - 10) clear ; menu_option_10 ; press_enter ;; - 11) clear ; menu_option_11 ; press_enter ;; - 12) clear ; menu_option_12 ; press_enter ;; - 13) clear ; menu_option_13 ; press_enter ;; - 14) clear ; menu_option_14 ; press_enter ;; - 15) clear ; menu_option_15 ; press_enter ;; - 16) clear ; menu_option_16 ; press_enter ;; - 17) clear ; menu_option_17 ; press_enter ;; - 18) clear ; menu_option_18 ; press_enter ;; - 19) clear ; menu_option_19 ; press_enter ;; - 20) clear ; menu_option_20 ; press_enter ;; - 21) clear ; menu_option_21 ; press_enter ;; - [Ii] ) clear ; info ; press_enter ;; - [Qq] ) clear ; exit ;; - * ) clear ; incorrect_selection ; press_enter ;; - esac + read -rp "Press enter to continue..." done