2025-05-16 15:48:18 +02:00
config_file( ) {
CONFIG_FILE = "/opt/community-scripts/.settings"
if [ [ -f " /opt/community-scripts/ ${ NSAPP } .conf " ] ] ; then
CONFIG_FILE = " /opt/community-scripts/ ${ NSAPP } .conf "
fi
2025-05-20 11:00:58 +02:00
if CONFIG_FILE = $( whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set absolute path to config file" 8 58 " $CONFIG_FILE " --title "CONFIG FILE" 3>& 1 1>& 2 2>& 3) ; then
2025-05-16 15:48:18 +02:00
if [ [ ! -f " $CONFIG_FILE " ] ] ; then
echo -e " ${ CROSS } ${ RD } Config file not found, exiting script!. ${ CL } "
exit
else
echo -e " ${ INFO } ${ BOLD } ${ DGN } Using config File: ${ BGN } $CONFIG_FILE ${ CL } "
source " $CONFIG_FILE "
fi
fi
if [ [ -n " ${ CT_ID - } " ] ] ; then
if [ [ " $CT_ID " = ~ ^( [ 0-9] { 3,4} ) -( [ 0-9] { 3,4} ) $ ] ] ; then
MIN_ID = ${ BASH_REMATCH [1] }
MAX_ID = ${ BASH_REMATCH [2] }
if ( ( MIN_ID >= MAX_ID) ) ; then
msg_error " Invalid Container ID range. The first number must be smaller than the second number, was ${ CT_ID } "
exit
fi
LIST_OF_IDS = $( pvesh get /cluster/resources --type vm --output-format json 2>/dev/null | grep -oP '"vmid":\s*\K\d+' ) || true
if [ [ -n " $LIST_OF_IDS " ] ] ; then
for ( ( ID = MIN_ID; ID <= MAX_ID; ID++) ) ; do
if ! grep -q " ^ $ID $" <<< " $LIST_OF_IDS " ; then
CT_ID = $ID
break
fi
done
fi
echo -e " ${ CONTAINERID } ${ BOLD } ${ DGN } Container ID: ${ BGN } $CT_ID ${ CL } "
elif [ [ " $CT_ID " = ~ ^[ 0-9] +$ ] ] ; then
LIST_OF_IDS = $( pvesh get /cluster/resources --type vm --output-format json 2>/dev/null | grep -oP '"vmid":\s*\K\d+' ) || true
if [ [ -n " $LIST_OF_IDS " ] ] ; then
if ! grep -q " ^ $CT_ID $" <<< " $LIST_OF_IDS " ; then
echo -e " ${ CONTAINERID } ${ BOLD } ${ DGN } Container ID: ${ BGN } $CT_ID ${ CL } "
else
msg_error " Container ID $CT_ID already exists "
exit
fi
else
echo -e " ${ CONTAINERID } ${ BOLD } ${ DGN } Container ID: ${ BGN } $CT_ID ${ CL } "
fi
else
msg_error " Invalid Container ID format. Needs to be 0000-9999 or 0-9999, was ${ CT_ID } "
exit
fi
else
if CT_ID = $( whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Container ID" 8 58 " $NEXTID " --title "CONTAINER ID" 3>& 1 1>& 2 2>& 3) ; then
2025-06-20 13:28:06 +02:00
if [ -z " $CT_ID " ] ; then
CT_ID = " $NEXTID "
echo -e " ${ CONTAINERID } ${ BOLD } ${ DGN } Container ID: ${ BGN } $CT_ID ${ CL } "
else
echo -e " ${ CONTAINERID } ${ BOLD } ${ DGN } Container ID: ${ BGN } $CT_ID ${ CL } "
fi
2025-05-16 15:48:18 +02:00
else
2025-06-20 13:28:06 +02:00
exit_script
2025-05-16 15:48:18 +02:00
fi
fi
if [ [ -n " ${ CT_TYPE - } " ] ] ; then
if [ [ " $CT_TYPE " -eq 0 ] ] ; then
CT_TYPE_DESC = "Privileged"
elif [ [ " $CT_TYPE " -eq 1 ] ] ; then
CT_TYPE_DESC = "Unprivileged"
else
msg_error " Unknown setting for CT_TYPE, should be 1 or 0, was ${ CT_TYPE } "
exit
fi
echo -e " ${ CONTAINERTYPE } ${ BOLD } ${ DGN } Container Type: ${ BGN } $CT_TYPE_DESC ${ CL } "
else
2025-06-20 13:28:06 +02:00
if CT_TYPE = $( whiptail --backtitle "Proxmox VE Helper Scripts" --title "CONTAINER TYPE" --radiolist "Choose Type" 10 58 2 \
"1" "Unprivileged" ON \
"0" "Privileged" OFF \
3>& 1 1>& 2 2>& 3) ; then
if [ -n " $CT_TYPE " ] ; then
CT_TYPE_DESC = "Unprivileged"
if [ " $CT_TYPE " -eq 0 ] ; then
CT_TYPE_DESC = "Privileged"
2025-05-16 15:48:18 +02:00
fi
2025-06-20 13:28:06 +02:00
echo -e " ${ CONTAINERTYPE } ${ BOLD } ${ DGN } Container Type: ${ BGN } $CT_TYPE_DESC ${ CL } "
2025-05-16 15:48:18 +02:00
fi
2025-06-20 13:28:06 +02:00
else
exit_script
fi
2025-05-16 15:48:18 +02:00
fi
if [ [ -n " ${ PW - } " ] ] ; then
if [ [ " $PW " = = "none" ] ] ; then
PW = ""
else
if [ [ " $PW " = = *" " * ] ] ; then
msg_error "Password cannot be empty"
exit
elif [ [ ${# PW } -lt 5 ] ] ; then
msg_error "Password must be at least 5 characters long"
exit
else
echo -e " ${ VERIFYPW } ${ BOLD } ${ DGN } Root Password: ${ BGN } ******** ${ CL } "
fi
PW = " -password $PW "
fi
else
while true; do
2025-06-20 13:28:06 +02:00
if PW1 = $( whiptail --backtitle "Proxmox VE Helper Scripts" --passwordbox "\nSet Root Password (needed for root ssh access)" 9 58 --title "PASSWORD (leave blank for automatic login)" 3>& 1 1>& 2 2>& 3) ; then
if [ [ -n " $PW1 " ] ] ; then
if [ [ " $PW1 " = = *" " * ] ] ; then
whiptail --msgbox "Password cannot contain spaces. Please try again." 8 58
elif [ ${# PW1 } -lt 5 ] ; then
whiptail --msgbox "Password must be at least 5 characters long. Please try again." 8 58
else
if PW2 = $( whiptail --backtitle "Proxmox VE Helper Scripts" --passwordbox "\nVerify Root Password" 9 58 --title "PASSWORD VERIFICATION" 3>& 1 1>& 2 2>& 3) ; then
if [ [ " $PW1 " = = " $PW2 " ] ] ; then
PW = " -password $PW1 "
echo -e " ${ VERIFYPW } ${ BOLD } ${ DGN } Root Password: ${ BGN } ******** ${ CL } "
break
else
whiptail --msgbox "Passwords do not match. Please try again." 8 58
fi
2025-05-16 15:48:18 +02:00
else
2025-06-20 13:28:06 +02:00
exit_script
2025-05-16 15:48:18 +02:00
fi
fi
2025-06-20 13:28:06 +02:00
else
PW1 = "Automatic Login"
PW = ""
echo -e " ${ VERIFYPW } ${ BOLD } ${ DGN } Root Password: ${ BGN } $PW1 ${ CL } "
break
2025-05-16 15:48:18 +02:00
fi
else
2025-06-20 13:28:06 +02:00
exit_script
2025-05-16 15:48:18 +02:00
fi
2025-06-20 13:28:06 +02:00
done
2025-05-16 15:48:18 +02:00
fi
if [ [ -n " ${ HN - } " ] ] ; then
echo -e " ${ HOSTNAME } ${ BOLD } ${ DGN } Hostname: ${ BGN } $HN ${ CL } "
else
if CT_NAME = $( whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 " $NSAPP " --title "HOSTNAME" 3>& 1 1>& 2 2>& 3) ; then
2025-06-20 13:28:06 +02:00
if [ -z " $CT_NAME " ] ; then
HN = " $NSAPP "
else
HN = $( echo " ${ CT_NAME ,, } " | tr -d ' ' )
fi
echo -e " ${ HOSTNAME } ${ BOLD } ${ DGN } Hostname: ${ BGN } $HN ${ CL } "
2025-05-16 15:48:18 +02:00
else
2025-06-20 13:28:06 +02:00
exit_script
2025-05-16 15:48:18 +02:00
fi
fi
if [ [ -n " ${ DISK_SIZE - } " ] ] ; then
if [ [ " $DISK_SIZE " = ~ ^-?[ 0-9] +$ ] ] ; then
echo -e " ${ DISKSIZE } ${ BOLD } ${ DGN } Disk Size: ${ BGN } ${ DISK_SIZE } GB ${ CL } "
else
msg_error " DISK_SIZE must be an integer, was ${ DISK_SIZE } "
exit
fi
else
if DISK_SIZE = $( whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Disk Size in GB" 8 58 " $var_disk " --title "DISK SIZE" 3>& 1 1>& 2 2>& 3) ; then
2025-06-20 13:28:06 +02:00
if [ -z " $DISK_SIZE " ] ; then
DISK_SIZE = " $var_disk "
echo -e " ${ DISKSIZE } ${ BOLD } ${ DGN } Disk Size: ${ BGN } ${ DISK_SIZE } GB ${ CL } "
else
if ! [ [ $DISK_SIZE = ~ $INTEGER ] ] ; then
echo -e " {INFO} ${ HOLD } ${ RD } DISK SIZE MUST BE AN INTEGER NUMBER! ${ CL } "
advanced_settings
fi
echo -e " ${ DISKSIZE } ${ BOLD } ${ DGN } Disk Size: ${ BGN } ${ DISK_SIZE } GB ${ CL } "
2025-05-16 15:48:18 +02:00
fi
2025-06-20 13:28:06 +02:00
else
exit_script
2025-05-16 15:48:18 +02:00
fi
fi
if [ [ -n " ${ CORE_COUNT - } " ] ] ; then
if [ [ " $CORE_COUNT " = ~ ^-?[ 0-9] +$ ] ] ; then
echo -e " ${ CPUCORE } ${ BOLD } ${ DGN } CPU Cores: ${ BGN } ${ CORE_COUNT } ${ CL } "
else
msg_error " CORE_COUNT must be an integer, was ${ CORE_COUNT } "
exit
fi
else
if CORE_COUNT = $( whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate CPU Cores" 8 58 " $var_cpu " --title "CORE COUNT" 3>& 1 1>& 2 2>& 3) ; then
2025-06-20 13:28:06 +02:00
if [ -z " $CORE_COUNT " ] ; then
CORE_COUNT = " $var_cpu "
echo -e " ${ CPUCORE } ${ BOLD } ${ DGN } CPU Cores: ${ BGN } $CORE_COUNT ${ CL } "
else
echo -e " ${ CPUCORE } ${ BOLD } ${ DGN } CPU Cores: ${ BGN } $CORE_COUNT ${ CL } "
fi
2025-05-16 15:48:18 +02:00
else
2025-06-20 13:28:06 +02:00
exit_script
2025-05-16 15:48:18 +02:00
fi
fi
if [ [ -n " ${ RAM_SIZE - } " ] ] ; then
if [ [ " $RAM_SIZE " = ~ ^-?[ 0-9] +$ ] ] ; then
echo -e " ${ RAMSIZE } ${ BOLD } ${ DGN } RAM Size: ${ BGN } ${ RAM_SIZE } MiB ${ CL } "
else
msg_error " RAM_SIZE must be an integer, was ${ RAM_SIZE } "
exit
fi
else
if RAM_SIZE = $( whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate RAM in MiB" 8 58 " $var_ram " --title "RAM" 3>& 1 1>& 2 2>& 3) ; then
2025-06-20 13:28:06 +02:00
if [ -z " $RAM_SIZE " ] ; then
RAM_SIZE = " $var_ram "
echo -e " ${ RAMSIZE } ${ BOLD } ${ DGN } RAM Size: ${ BGN } ${ RAM_SIZE } MiB ${ CL } "
else
echo -e " ${ RAMSIZE } ${ BOLD } ${ DGN } RAM Size: ${ BGN } ${ RAM_SIZE } MiB ${ CL } "
fi
2025-05-16 15:48:18 +02:00
else
2025-06-20 13:28:06 +02:00
exit_script
2025-05-16 15:48:18 +02:00
fi
fi
IFACE_FILEPATH_LIST = "/etc/network/interfaces" $'\n' $( find "/etc/network/interfaces.d/" -type f)
BRIDGES = ""
OLD_IFS = $IFS
IFS = $'\n'
for iface_filepath in ${ IFACE_FILEPATH_LIST } ; do
iface_indexes_tmpfile = $( mktemp -q -u '.iface-XXXX' )
2025-06-20 13:28:06 +02:00
( grep -Pn '^\s*iface' " ${ iface_filepath } " | cut -d':' -f1 && wc -l " ${ iface_filepath } " | cut -d' ' -f1) | awk 'FNR==1 {line=$0; next} {print line":"$0-1; line=$0}' >" ${ iface_indexes_tmpfile } " || true
2025-05-16 15:48:18 +02:00
if [ -f " ${ iface_indexes_tmpfile } " ] ; then
2025-06-20 13:28:06 +02:00
while read -r pair; do
start = $( echo " ${ pair } " | cut -d':' -f1)
end = $( echo " ${ pair } " | cut -d':' -f2)
if awk " NR >= ${ start } && NR <= ${ end } " " ${ iface_filepath } " | grep -qP '^\s*(bridge[-_](ports|stp|fd|vlan-aware|vids)|ovs_type\s+OVSBridge)\b' ; then
iface_name = $( sed " ${ start } q;d " " ${ iface_filepath } " | awk '{print $2}' )
BRIDGES = " ${ iface_name } " $'\n' " ${ BRIDGES } "
fi
2025-05-16 15:48:18 +02:00
2025-06-20 13:28:06 +02:00
done <" ${ iface_indexes_tmpfile } "
rm -f " ${ iface_indexes_tmpfile } "
2025-05-16 15:48:18 +02:00
fi
done
IFS = $OLD_IFS
BRIDGES = $( echo " $BRIDGES " | grep -v '^\s*$' | sort | uniq)
if [ [ -n " ${ BRG - } " ] ] ; then
if echo " $BRIDGES " | grep -q " ${ BRG } " ; then
echo -e " ${ BRIDGE } ${ BOLD } ${ DGN } Bridge: ${ BGN } $BRG ${ CL } "
else
msg_error " Bridge ' ${ BRG } ' does not exist in /etc/network/interfaces or /etc/network/interfaces.d/sdn "
exit
fi
else
BRG = $( whiptail --backtitle "Proxmox VE Helper Scripts" --menu "Select network bridge:" 15 40 6 $( echo " $BRIDGES " | awk '{print $0, "Bridge"}' ) 3>& 1 1>& 2 2>& 3)
if [ -z " $BRG " ] ; then
exit_script
else
echo -e " ${ BRIDGE } ${ BOLD } ${ DGN } Bridge: ${ BGN } $BRG ${ CL } "
fi
fi
local ip_cidr_regex = '^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/([0-9]{1,2})$'
local ip_regex = '^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$'
if [ [ -n ${ NET - } ] ] ; then
if [ " $NET " = = "dhcp" ] ; then
echo -e " ${ NETWORK } ${ BOLD } ${ DGN } IP Address: ${ BGN } DHCP ${ CL } "
echo -e " ${ GATEWAY } ${ BOLD } ${ DGN } Gateway IP Address: ${ BGN } Default ${ CL } "
elif [ [ " $NET " = ~ $ip_cidr_regex ] ] ; then
echo -e " ${ NETWORK } ${ BOLD } ${ DGN } IP Address: ${ BGN } $NET ${ CL } "
if [ ! -z " $GATE " ] ; then
if [ [ " $GATE " = ~ $ip_regex ] ] ; then
echo -e " ${ GATEWAY } ${ BOLD } ${ DGN } Gateway IP Address: ${ BGN } $GATE ${ CL } "
GATE = " ,gw= $GATE "
else
msg_error " Invalid IP Address format for Gateway. Needs to be 0.0.0.0, was ${ GATE } "
exit
2025-05-20 11:00:58 +02:00
fi
else
while true; do
GATE1 = $( whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Enter gateway IP address" 8 58 --title "Gateway IP" 3>& 1 1>& 2 2>& 3)
if [ -z " $GATE1 " ] ; then
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox "Gateway IP address cannot be empty" 8 58
elif [ [ ! " $GATE1 " = ~ ^( [ 0-9] { 1,3} \. ) { 3} [ 0-9] { 1,3} $ ] ] ; then
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox "Invalid IP address format" 8 58
else
GATE = " ,gw= $GATE1 "
echo -e " ${ GATEWAY } ${ BOLD } ${ DGN } Gateway IP Address: ${ BGN } $GATE1 ${ CL } "
break
fi
done
fi
elif [ [ " $NET " = = *-* ] ] ; then
2025-06-20 13:28:06 +02:00
IFS = "-" read -r ip_start ip_end <<< " $NET "
2025-05-20 11:00:58 +02:00
if [ [ ! " $ip_start " = ~ $ip_cidr_regex ] ] || [ [ ! " $ip_end " = ~ $ip_cidr_regex ] ] ; then
msg_error " Invalid IP range format, was $NET should be 0.0.0.0/0-0.0.0.0/0 "
exit 1
fi
ip1 = " ${ ip_start %%/* } "
ip2 = " ${ ip_end %%/* } "
cidr = " ${ ip_start ##*/ } "
ip_to_int( ) {
local IFS = .
2025-06-20 13:28:06 +02:00
read -r i1 i2 i3 i4 <<< " $1 "
echo $(( ( i1 << 24) + (i2 << 16 ) + ( i3 << 8 ) + i4))
2025-05-20 11:00:58 +02:00
}
int_to_ip( ) {
local ip = $1
2025-06-20 13:28:06 +02:00
echo " $(( ( ip >> 24 ) & 0 xFF)) . $(( ( ip >> 16 ) & 0 xFF)) . $(( ( ip >> 8 ) & 0 xFF)) . $(( ip & 0 xFF)) "
2025-05-20 11:00:58 +02:00
}
start_int = $( ip_to_int " $ip1 " )
end_int = $( ip_to_int " $ip2 " )
2025-06-20 13:28:06 +02:00
for ( ( ip_int = start_int; ip_int <= end_int; ip_int++) ) ; do
2025-05-20 11:00:58 +02:00
ip = $( int_to_ip $ip_int )
2025-06-20 13:28:06 +02:00
msg_info " Checking IP: $ip "
2025-05-20 11:00:58 +02:00
if ! ping -c 2 -W 1 " $ip " >/dev/null 2>& 1; then
NET = " $ip / $cidr "
msg_ok " Using free IP Address: ${ BGN } $NET ${ CL } "
sleep 3
break
fi
done
if [ [ " $NET " = = *-* ] ] ; then
msg_error "No free IP found in range"
exit 1
fi
if [ -n " $GATE " ] ; then
if [ [ " $GATE " = ~ $ip_regex ] ] ; then
echo -e " ${ GATEWAY } ${ BOLD } ${ DGN } Gateway IP Address: ${ BGN } $GATE ${ CL } "
GATE = " ,gw= $GATE "
else
msg_error " Invalid IP Address format for Gateway. Needs to be 0.0.0.0, was ${ GATE } "
exit
fi
else
while true; do
GATE1 = $( whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Enter gateway IP address" 8 58 --title "Gateway IP" 3>& 1 1>& 2 2>& 3)
if [ -z " $GATE1 " ] ; then
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox "Gateway IP address cannot be empty" 8 58
elif [ [ ! " $GATE1 " = ~ ^( [ 0-9] { 1,3} \. ) { 3} [ 0-9] { 1,3} $ ] ] ; then
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox "Invalid IP address format" 8 58
else
GATE = " ,gw= $GATE1 "
echo -e " ${ GATEWAY } ${ BOLD } ${ DGN } Gateway IP Address: ${ BGN } $GATE1 ${ CL } "
break
fi
done
2025-05-16 15:48:18 +02:00
fi
else
2025-05-20 11:00:58 +02:00
msg_error " Invalid IP Address format. Needs to be 0.0.0.0/0 or a range like 10.0.0.1/24-10.0.0.10/24, was ${ NET } "
2025-05-16 15:48:18 +02:00
exit
fi
else
while true; do
2025-06-20 13:28:06 +02:00
NET = $( whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Static IPv4 CIDR Address (/24)" 8 58 dhcp --title "IP ADDRESS" 3>& 1 1>& 2 2>& 3)
exit_status = $?
if [ $exit_status -eq 0 ] ; then
if [ " $NET " = "dhcp" ] ; then
2025-05-16 15:48:18 +02:00
echo -e " ${ NETWORK } ${ BOLD } ${ DGN } IP Address: ${ BGN } $NET ${ CL } "
break
else
2025-06-20 13:28:06 +02:00
if [ [ " $NET " = ~ ^( [ 0-9] { 1,3} \. ) { 3} [ 0-9] { 1,3} /( [ 0-9] | [ 1-2] [ 0-9] | 3[ 0-2] ) $ ] ] ; then
echo -e " ${ NETWORK } ${ BOLD } ${ DGN } IP Address: ${ BGN } $NET ${ CL } "
break
else
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox " $NET is an invalid IPv4 CIDR address. Please enter a valid IPv4 CIDR address or 'dhcp' " 8 58
fi
2025-05-16 15:48:18 +02:00
fi
else
2025-06-20 13:28:06 +02:00
exit_script
2025-05-16 15:48:18 +02:00
fi
done
2025-06-20 13:28:06 +02:00
if [ " $NET " != "dhcp" ] ; then
while true; do
GATE1 = $( whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Enter gateway IP address" 8 58 --title "Gateway IP" 3>& 1 1>& 2 2>& 3)
if [ -z " $GATE1 " ] ; then
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox "Gateway IP address cannot be empty" 8 58
elif [ [ ! " $GATE1 " = ~ ^( [ 0-9] { 1,3} \. ) { 3} [ 0-9] { 1,3} $ ] ] ; then
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox "Invalid IP address format" 8 58
else
GATE = " ,gw= $GATE1 "
echo -e " ${ GATEWAY } ${ BOLD } ${ DGN } Gateway IP Address: ${ BGN } $GATE1 ${ CL } "
break
fi
done
2025-05-16 15:48:18 +02:00
else
GATE = ""
echo -e " ${ GATEWAY } ${ BOLD } ${ DGN } Gateway IP Address: ${ BGN } Default ${ CL } "
fi
fi
if [ " $var_os " = = "alpine" ] ; then
APT_CACHER = ""
APT_CACHER_IP = ""
else
if [ [ -n " ${ APT_CACHER_IP - } " ] ] ; then
if [ [ ! $APT_CACHER_IP = = "none" ] ] ; then
2025-06-20 13:28:06 +02:00
APT_CACHER = "yes"
echo -e " ${ NETWORK } ${ BOLD } ${ DGN } APT-CACHER IP Address: ${ BGN } $APT_CACHER_IP ${ CL } "
2025-05-16 15:48:18 +02:00
else
APT_CACHER = ""
echo -e " ${ NETWORK } ${ BOLD } ${ DGN } APT-Cacher IP Address: ${ BGN } No ${ CL } "
fi
else
if APT_CACHER_IP = $( whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set APT-Cacher IP (leave blank for none)" 8 58 --title "APT-Cacher IP" 3>& 1 1>& 2 2>& 3) ; then
APT_CACHER = " ${ APT_CACHER_IP : +yes } "
echo -e " ${ NETWORK } ${ BOLD } ${ DGN } APT-Cacher IP Address: ${ BGN } ${ APT_CACHER_IP :- Default } ${ CL } "
2025-06-20 13:28:06 +02:00
if [ [ -n $APT_CACHER_IP ] ] ; then
2025-05-16 15:48:18 +02:00
APT_CACHER_IP = "none"
fi
else
exit_script
fi
fi
fi
if [ [ -n " ${ MTU - } " ] ] ; then
if [ [ " $MTU " = ~ ^-?[ 0-9] +$ ] ] ; then
echo -e " ${ DEFAULT } ${ BOLD } ${ DGN } Interface MTU Size: ${ BGN } $MTU ${ CL } "
MTU = " ,mtu= $MTU "
else
msg_error " MTU must be an integer, was ${ MTU } "
exit
fi
else
if MTU1 = $( whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default [The MTU of your selected vmbr, default is 1500])" 8 58 --title "MTU SIZE" 3>& 1 1>& 2 2>& 3) ; then
if [ -z " $MTU1 " ] ; then
MTU1 = "Default"
MTU = ""
else
MTU = " ,mtu= $MTU1 "
fi
echo -e " ${ DEFAULT } ${ BOLD } ${ DGN } Interface MTU Size: ${ BGN } $MTU1 ${ CL } "
else
exit_script
fi
fi
2025-07-14 21:50:56 +02:00
if [ [ " $IPV6_METHOD " = = "static" ] ] ; then
if [ [ -n " $IPV6STATIC " ] ] ; then
IP6 = " ,ip6= ${ IPV6STATIC } "
echo -e " ${ NETWORK } ${ BOLD } ${ DGN } IPv6 Address: ${ BGN } ${ IPV6STATIC } ${ CL } "
else
msg_error "IPV6_METHOD is set to static but IPV6STATIC is empty"
exit
fi
elif [ [ " $IPV6_METHOD " = = "auto" ] ] ; then
IP6 = ",ip6=auto"
echo -e " ${ NETWORK } ${ BOLD } ${ DGN } IPv6 Address: ${ BGN } auto ${ CL } "
else
IP6 = ""
echo -e " ${ NETWORK } ${ BOLD } ${ DGN } IPv6 Address: ${ BGN } none ${ CL } "
fi
2025-05-16 15:48:18 +02:00
if [ [ -n " ${ SD - } " ] ] ; then
if [ [ " $SD " = = "none" ] ] ; then
SD = ""
echo -e " ${ SEARCH } ${ BOLD } ${ DGN } DNS Search Domain: ${ BGN } Host ${ CL } "
else
echo -e " ${ SEARCH } ${ BOLD } ${ DGN } DNS Search Domain: ${ BGN } $SD ${ CL } "
SD = " -searchdomain= $SD "
fi
else
if SD = $( whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a DNS Search Domain (leave blank for HOST)" 8 58 --title "DNS Search Domain" 3>& 1 1>& 2 2>& 3) ; then
if [ -z " $SD " ] ; then
SX = Host
SD = ""
else
SX = $SD
SD = " -searchdomain= $SD "
fi
echo -e " ${ SEARCH } ${ BOLD } ${ DGN } DNS Search Domain: ${ BGN } $SX ${ CL } "
else
exit_script
fi
fi
if [ [ -n " ${ NS - } " ] ] ; then
if [ [ $NS = = "none" ] ] ; then
NS = ""
echo -e " ${ NETWORK } ${ BOLD } ${ DGN } DNS Server IP Address: ${ BGN } Host ${ CL } "
else
if [ [ " $NS " = ~ $ip_regex ] ] ; then
echo -e " ${ NETWORK } ${ BOLD } ${ DGN } DNS Server IP Address: ${ BGN } $NS ${ CL } "
NS = " -nameserver= $NS "
else
msg_error " Invalid IP Address format for DNS Server. Needs to be 0.0.0.0, was ${ NS } "
exit
fi
fi
else
if NX = $( whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a DNS Server IP (leave blank for HOST)" 8 58 --title "DNS SERVER IP" 3>& 1 1>& 2 2>& 3) ; then
if [ -z " $NX " ] ; then
NX = Host
NS = ""
else
NS = " -nameserver= $NX "
fi
echo -e " ${ NETWORK } ${ BOLD } ${ DGN } DNS Server IP Address: ${ BGN } $NX ${ CL } "
else
2025-06-20 13:28:06 +02:00
exit_script
2025-05-16 15:48:18 +02:00
fi
fi
if [ [ -n " ${ MAC - } " ] ] ; then
if [ [ " $MAC " = = "none" ] ] ; then
MAC = ""
echo -e " ${ MACADDRESS } ${ BOLD } ${ DGN } MAC Address: ${ BGN } Host ${ CL } "
else
if [ [ " $MAC " = ~ ^( [ A-Fa-f0-9] { 2} :) { 5} [ A-Fa-f0-9] { 2} $ ] ] ; then
echo -e " ${ MACADDRESS } ${ BOLD } ${ DGN } MAC Address: ${ BGN } $MAC ${ CL } "
MAC = " ,hwaddr= $MAC "
else
msg_error " MAC Address must be in the format xx:xx:xx:xx:xx:xx, was ${ MAC } "
exit
fi
fi
else
if MAC1 = $( whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a MAC Address(leave blank for generated MAC)" 8 58 --title "MAC ADDRESS" 3>& 1 1>& 2 2>& 3) ; then
if [ -z " $MAC1 " ] ; then
MAC1 = "Default"
MAC = ""
else
MAC = " ,hwaddr= $MAC1 "
echo -e " ${ MACADDRESS } ${ BOLD } ${ DGN } MAC Address: ${ BGN } $MAC1 ${ CL } "
fi
else
2025-06-20 13:28:06 +02:00
exit_script
2025-05-16 15:48:18 +02:00
fi
fi
if [ [ -n " ${ VLAN - } " ] ] ; then
if [ [ " $VLAN " = = "none" ] ] ; then
VLAN = ""
echo -e " ${ VLANTAG } ${ BOLD } ${ DGN } Vlan: ${ BGN } Host ${ CL } "
else
if [ [ " $VLAN " = ~ ^-?[ 0-9] +$ ] ] ; then
echo -e " ${ VLANTAG } ${ BOLD } ${ DGN } Vlan: ${ BGN } $VLAN ${ CL } "
VLAN = " ,tag= $VLAN "
else
msg_error " VLAN must be an integer, was ${ VLAN } "
exit
fi
fi
else
if VLAN1 = $( whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Vlan(leave blank for no VLAN)" 8 58 --title "VLAN" 3>& 1 1>& 2 2>& 3) ; then
if [ -z " $VLAN1 " ] ; then
VLAN1 = "Default"
VLAN = ""
else
VLAN = " ,tag= $VLAN1 "
fi
echo -e " ${ VLANTAG } ${ BOLD } ${ DGN } Vlan: ${ BGN } $VLAN1 ${ CL } "
else
exit_script
fi
fi
if [ [ -n " ${ TAGS - } " ] ] ; then
2025-05-20 11:00:58 +02:00
if [ [ " $TAGS " = = *"DEFAULT" * ] ] ; then
TAGS = " ${ TAGS //DEFAULT/ } "
TAGS = " ${ TAGS //;/ } "
TAGS = " $TAGS ; ${ var_tags :- } "
echo -e " ${ NETWORK } ${ BOLD } ${ DGN } Tags: ${ BGN } $TAGS ${ CL } "
fi
2025-05-16 15:48:18 +02:00
else
TAGS = "community-scripts;"
if ADV_TAGS = $( whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Custom Tags?[If you remove all, there will be no tags!]" 8 58 " ${ TAGS } " --title "Advanced Tags" 3>& 1 1>& 2 2>& 3) ; then
if [ -n " ${ ADV_TAGS } " ] ; then
ADV_TAGS = $( echo " $ADV_TAGS " | tr -d '[:space:]' )
TAGS = " ${ ADV_TAGS } "
else
TAGS = ";"
fi
echo -e " ${ NETWORK } ${ BOLD } ${ DGN } Tags: ${ BGN } $TAGS ${ CL } "
else
2025-06-20 13:28:06 +02:00
exit_script
2025-05-16 15:48:18 +02:00
fi
fi
if [ [ -n " ${ SSH - } " ] ] ; then
if [ [ " $SSH " = = "yes" ] ] ; then
echo -e " ${ ROOTSSH } ${ BOLD } ${ DGN } Root SSH Access: ${ BGN } $SSH ${ CL } "
if [ [ ! -z " $SSH_AUTHORIZED_KEY " ] ] ; then
echo -e " ${ ROOTSSH } ${ BOLD } ${ DGN } SSH Authorized Key: ${ BGN } ******************** ${ CL } "
else
echo -e " ${ ROOTSSH } ${ BOLD } ${ DGN } SSH Authorized Key: ${ BGN } None ${ CL } "
fi
elif [ [ " $SSH " = = "no" ] ] ; then
echo -e " ${ ROOTSSH } ${ BOLD } ${ DGN } Root SSH Access: ${ BGN } $SSH ${ CL } "
else
msg_error " SSH needs to be 'yes' or 'no', was ${ SSH } "
exit
fi
else
2025-05-20 11:00:58 +02:00
SSH_AUTHORIZED_KEY = " $( whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "SSH Authorized key for root (leave empty for none)" 8 58 --title "SSH Key" 3>& 1 1>& 2 2>& 3) "
2025-05-16 15:48:18 +02:00
if [ [ -z " ${ SSH_AUTHORIZED_KEY } " ] ] ; then
SSH_AUTHORIZED_KEY = ""
fi
if [ [ " $PW " = = -password* || -n " $SSH_AUTHORIZED_KEY " ] ] ; then
2025-05-20 11:00:58 +02:00
if ( whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "SSH ACCESS" --yesno "Enable Root SSH Access?" 10 58) ; then
2025-05-16 15:48:18 +02:00
SSH = "yes"
else
SSH = "no"
fi
echo -e " ${ ROOTSSH } ${ BOLD } ${ DGN } Root SSH Access: ${ BGN } $SSH ${ CL } "
else
SSH = "no"
echo -e " ${ ROOTSSH } ${ BOLD } ${ DGN } Root SSH Access: ${ BGN } $SSH ${ CL } "
fi
fi
2025-06-02 14:16:11 +02:00
if [ [ -n " $ENABLE_FUSE " ] ] ; then
if [ [ " $ENABLE_FUSE " = = "yes" ] ] ; then
echo -e " ${ FUSE } ${ BOLD } ${ DGN } Enable FUSE: ${ BGN } Yes ${ CL } "
elif [ [ " $ENABLE_FUSE " = = "no" ] ] ; then
echo -e " ${ FUSE } ${ BOLD } ${ DGN } Enable FUSE: ${ BGN } No ${ CL } "
else
msg_error " Enable FUSE needs to be 'yes' or 'no', was ${ ENABLE_FUSE } "
exit
fi
else
if ( whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "FUSE" --yesno "Enable FUSE?" 10 58) ; then
ENABLE_FUSE = "yes"
else
ENABLE_FUSE = "no"
fi
echo -e " ${ FUSE } ${ BOLD } ${ DGN } Enable FUSE: ${ BGN } $ENABLE_FUSE ${ CL } "
fi
2025-07-14 21:50:56 +02:00
if [ [ -n " $ENABLE_TUN " ] ] ; then
if [ [ " $ENABLE_TUN " = = "yes" ] ] ; then
echo -e " ${ FUSE } ${ BOLD } ${ DGN } Enable TUN: ${ BGN } Yes ${ CL } "
elif [ [ " $ENABLE_TUN " = = "no" ] ] ; then
echo -e " ${ FUSE } ${ BOLD } ${ DGN } Enable TUN: ${ BGN } No ${ CL } "
else
msg_error " Enable TUN needs to be 'yes' or 'no', was ${ ENABLE_TUN } "
exit
fi
else
if ( whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "TUN" --yesno "Enable TUN?" 10 58) ; then
ENABLE_TUN = "yes"
else
ENABLE_TUN = "no"
fi
echo -e " ${ FUSE } ${ BOLD } ${ DGN } Enable TUN: ${ BGN } $ENABLE_TUN ${ CL } "
fi
2025-05-16 15:48:18 +02:00
if [ [ -n " ${ VERBOSE - } " ] ] ; then
if [ [ " $VERBOSE " = = "yes" ] ] ; then
echo -e " ${ SEARCH } ${ BOLD } ${ DGN } Verbose Mode: ${ BGN } $VERBOSE ${ CL } "
elif [ [ " $VERBOSE " = = "no" ] ] ; then
echo -e " ${ SEARCH } ${ BOLD } ${ DGN } Verbose Mode: ${ BGN } No ${ CL } "
else
msg_error " Verbose Mode needs to be 'yes' or 'no', was ${ VERBOSE } "
exit
fi
else
2025-06-20 13:28:06 +02:00
if ( whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "VERBOSE MODE" --yesno "Enable Verbose Mode?" 10 58) ; then
2025-05-16 15:48:18 +02:00
VERBOSE = "yes"
else
VERBOSE = "no"
fi
echo -e " ${ SEARCH } ${ BOLD } ${ DGN } Verbose Mode: ${ BGN } $VERBOSE ${ CL } "
fi
2025-05-20 11:00:58 +02:00
if ( whiptail --backtitle "Proxmox VE Helper Scripts" --title "ADVANCED SETTINGS WITH CONFIG FILE COMPLETE" --yesno " Ready to create ${ APP } LXC? " 10 58) ; then
2025-05-16 15:48:18 +02:00
echo -e " ${ CREATING } ${ BOLD } ${ RD } Creating a ${ APP } LXC using the above settings ${ CL } "
else
clear
header_info
echo -e " ${ INFO } ${ HOLD } ${ GN } Using Config File on node $PVEHOST_NAME ${ CL } "
config_file
fi
}