@@ -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 B uild. ###
echo "Starting the build...."
echo " packer build -force -on-error=ask $debug_option "
packer build -force -on-error= ask $debug_option \
echo " Starting the b uild..."
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_op tion_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_selec tion( ) {
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:"
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"
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
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 ""
selection = $( read_selection)
}
while true; do
display_menu
dispatch_selection
echo ""
read -rp "Press enter to continue... "
done