Update build.func
This commit is contained in:
parent
005f1204d8
commit
a9de7571ec
324
misc/build.func
324
misc/build.func
@ -13,7 +13,7 @@ variables() {
|
|||||||
DIAGNOSTICS="yes" # sets the DIAGNOSTICS variable to "yes", used for the API call.
|
DIAGNOSTICS="yes" # sets the DIAGNOSTICS variable to "yes", used for the API call.
|
||||||
METHOD="default" # sets the METHOD variable to "default", used for the API call.
|
METHOD="default" # sets the METHOD variable to "default", used for the API call.
|
||||||
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)" # generates a random UUID and sets it to the RANDOM_UUID variable.
|
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)" # generates a random UUID and sets it to the RANDOM_UUID variable.
|
||||||
CT_TYPE=${var_unprivileged:-$CT_TYPE}
|
#CT_TYPE=${var_unprivileged:-$CT_TYPE}
|
||||||
}
|
}
|
||||||
|
|
||||||
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/api.func)
|
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/api.func)
|
||||||
@ -214,93 +214,6 @@ ssh_check() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# select_storage() {
|
|
||||||
# local CLASS=$1 CONTENT CONTENT_LABEL
|
|
||||||
# case $CLASS in
|
|
||||||
# container)
|
|
||||||
# CONTENT='rootdir'
|
|
||||||
# CONTENT_LABEL='Container'
|
|
||||||
# ;;
|
|
||||||
# template)
|
|
||||||
# CONTENT='vztmpl'
|
|
||||||
# CONTENT_LABEL='Template'
|
|
||||||
# ;;
|
|
||||||
# iso)
|
|
||||||
# CONTENT='iso'
|
|
||||||
# CONTENT_LABEL='ISO image'
|
|
||||||
# ;;
|
|
||||||
# images)
|
|
||||||
# CONTENT='images'
|
|
||||||
# CONTENT_LABEL='VM Disk image'
|
|
||||||
# ;;
|
|
||||||
# backup)
|
|
||||||
# CONTENT='backup'
|
|
||||||
# CONTENT_LABEL='Backup'
|
|
||||||
# ;;
|
|
||||||
# snippets)
|
|
||||||
# CONTENT='snippets'
|
|
||||||
# CONTENT_LABEL='Snippets'
|
|
||||||
# ;;
|
|
||||||
# *)
|
|
||||||
# msg_error "Invalid storage class '$CLASS'."
|
|
||||||
# exit 201
|
|
||||||
# ;;
|
|
||||||
# esac
|
|
||||||
|
|
||||||
# command -v whiptail >/dev/null || {
|
|
||||||
# msg_error "whiptail missing."
|
|
||||||
# exit 220
|
|
||||||
# }
|
|
||||||
# command -v numfmt >/dev/null || {
|
|
||||||
# msg_error "numfmt missing."
|
|
||||||
# exit 221
|
|
||||||
# }
|
|
||||||
|
|
||||||
# local -a MENU
|
|
||||||
# while read -r line; do
|
|
||||||
# local TAG=$(echo "$line" | awk '{print $1}')
|
|
||||||
# local TYPE=$(echo "$line" | awk '{printf "%-10s", $2}')
|
|
||||||
# local FREE=$(echo "$line" | numfmt --field 4-6 --from-unit=K --to=iec --format %.2f | awk '{printf "%9sB", $6}')
|
|
||||||
# MENU+=("$TAG" "Type: $TYPE Free: $FREE" "OFF")
|
|
||||||
# done < <(pvesm status -content "$CONTENT" | awk 'NR>1')
|
|
||||||
|
|
||||||
# if [ ${#MENU[@]} -eq 0 ]; then
|
|
||||||
# msg_error "No storage found for content type '$CONTENT'."
|
|
||||||
# exit 203
|
|
||||||
# fi
|
|
||||||
|
|
||||||
# if [ $((${#MENU[@]} / 3)) -eq 1 ]; then
|
|
||||||
# echo "${MENU[0]}"
|
|
||||||
# return
|
|
||||||
# fi
|
|
||||||
|
|
||||||
# local STORAGE
|
|
||||||
# STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \
|
|
||||||
# "Which storage pool for ${CONTENT_LABEL,,}?\n(Spacebar to select)" \
|
|
||||||
# 16 70 6 "${MENU[@]}" 3>&1 1>&2 2>&3) || {
|
|
||||||
# msg_error "Storage selection cancelled by user."
|
|
||||||
# exit 202
|
|
||||||
# }
|
|
||||||
# echo "$STORAGE"
|
|
||||||
# }
|
|
||||||
|
|
||||||
# manage_default_storage() {
|
|
||||||
# local file="/usr/local/community-scripts/default_storage"
|
|
||||||
# mkdir -p /usr/local/community-scripts
|
|
||||||
|
|
||||||
# local tmpl=$(select_storage template)
|
|
||||||
# local cont=$(select_storage container)
|
|
||||||
|
|
||||||
# cat <<EOF >"$file"
|
|
||||||
# TEMPLATE_STORAGE=$tmpl
|
|
||||||
# CONTAINER_STORAGE=$cont
|
|
||||||
# EOF
|
|
||||||
|
|
||||||
# msg_ok "Default Storage set: Template=${BL}$tmpl${CL} ${GN}|${CL} Container=${BL}$cont${CL}"
|
|
||||||
# whiptail --backtitle "[dev] Proxmox VE Helper Scripts" \
|
|
||||||
# --msgbox "Default Storage set:\n\nTemplate: $tmpl\nContainer: $cont" 10 58
|
|
||||||
# }
|
|
||||||
|
|
||||||
base_settings() {
|
base_settings() {
|
||||||
# Default Settings
|
# Default Settings
|
||||||
CT_TYPE=${var_unprivileged:-"1"}
|
CT_TYPE=${var_unprivileged:-"1"}
|
||||||
@ -902,6 +815,205 @@ EOF
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# default_var_settings
|
||||||
|
#
|
||||||
|
# - Ensures /usr/local/community-scripts/default.vars exists (creates if missing)
|
||||||
|
# - Loads var_* values from default.vars (safe parser, no source/eval)
|
||||||
|
# - Precedence: ENV var_* > default.vars > built-in defaults
|
||||||
|
# - Maps var_verbose → VERBOSE
|
||||||
|
# - Calls base_settings "$VERBOSE" and echo_default
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
default_var_settings() {
|
||||||
|
# Allowed var_* keys (alphabetically sorted)
|
||||||
|
local VAR_WHITELIST=(
|
||||||
|
var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_ctid var_disk var_fuse
|
||||||
|
var_gateway var_hostname var_ipv6_method var_ipv6_static var_mac var_mtu
|
||||||
|
var_net var_ns var_os var_pw var_ram var_storage var_tags var_tun var_unprivileged
|
||||||
|
var_verbose var_version var_vlan var_ssh var_ssh_authorized_key
|
||||||
|
)
|
||||||
|
|
||||||
|
# Snapshot: environment variables (highest precedence)
|
||||||
|
declare -A _HARD_ENV=()
|
||||||
|
local _k
|
||||||
|
for _k in "${VAR_WHITELIST[@]}"; do
|
||||||
|
if printenv "$_k" >/dev/null 2>&1; then _HARD_ENV["$_k"]=1; fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Find default.vars (first valid path wins)
|
||||||
|
local _find_default_vars
|
||||||
|
_find_default_vars() {
|
||||||
|
local f
|
||||||
|
for f in \
|
||||||
|
/usr/local/community-scripts/default.vars \
|
||||||
|
"$HOME/.config/community-scripts/default.vars" \
|
||||||
|
"./default.vars"; do
|
||||||
|
[ -f "$f" ] && {
|
||||||
|
echo "$f"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Ensure default.vars exists, create with sane defaults if missing
|
||||||
|
local _ensure_default_vars
|
||||||
|
_ensure_default_vars() {
|
||||||
|
_find_default_vars >/dev/null 2>&1 && return 0
|
||||||
|
local canonical="/usr/local/community-scripts/default.vars"
|
||||||
|
msg_info "No default.vars found. Creating ${canonical}"
|
||||||
|
mkdir -p /usr/local/community-scripts
|
||||||
|
cat >"$canonical" <<'EOF'
|
||||||
|
# Community-Scripts defaults (var_* only). Lines starting with # are comments.
|
||||||
|
# Precedence: ENV var_* > default.vars > built-ins.
|
||||||
|
# Keep keys alphabetically sorted.
|
||||||
|
|
||||||
|
# CT/OS
|
||||||
|
var_os=debian
|
||||||
|
var_version=12
|
||||||
|
var_unprivileged=1
|
||||||
|
|
||||||
|
# Resources
|
||||||
|
var_cpu=1
|
||||||
|
var_disk=4
|
||||||
|
var_ram=1024
|
||||||
|
|
||||||
|
# Network
|
||||||
|
var_brg=vmbr0
|
||||||
|
var_net=dhcp
|
||||||
|
var_ipv6_method=auto
|
||||||
|
# var_gateway=
|
||||||
|
# var_ipv6_static=
|
||||||
|
# var_vlan=
|
||||||
|
# var_mtu=
|
||||||
|
# var_mac=
|
||||||
|
# var_ns=
|
||||||
|
# var_storage=
|
||||||
|
|
||||||
|
# SSH
|
||||||
|
var_ssh=no
|
||||||
|
# var_ssh_authorized_key=
|
||||||
|
|
||||||
|
# APT Cacher
|
||||||
|
# var_apt_cacher=yes
|
||||||
|
# var_apt_cacher_ip=192.168.1.10
|
||||||
|
|
||||||
|
# Features/Tags
|
||||||
|
var_fuse=no
|
||||||
|
var_tun=no
|
||||||
|
var_tags=community-script
|
||||||
|
var_verbose=no
|
||||||
|
|
||||||
|
# Security (root PW) – empty => Autologin
|
||||||
|
# var_pw=
|
||||||
|
|
||||||
|
# CTID/Hostname – empty => auto
|
||||||
|
# var_ctid=
|
||||||
|
# var_hostname=
|
||||||
|
EOF
|
||||||
|
chmod 0644 "$canonical"
|
||||||
|
msg_ok "Created ${canonical}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Whitelist check
|
||||||
|
local _is_whitelisted_key
|
||||||
|
_is_whitelisted_key() {
|
||||||
|
local k="$1"
|
||||||
|
local w
|
||||||
|
for w in "${VAR_WHITELIST[@]}"; do [ "$k" = "$w" ] && return 0; done
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Safe parser for KEY=VALUE lines
|
||||||
|
local _load_vars_file
|
||||||
|
_load_vars_file() {
|
||||||
|
local file="$1"
|
||||||
|
[ -f "$file" ] || return 0
|
||||||
|
msg_info "Loading defaults from ${file}"
|
||||||
|
local line key val
|
||||||
|
while IFS= read -r line || [ -n "$line" ]; do
|
||||||
|
line="${line#"${line%%[![:space:]]*}"}"
|
||||||
|
line="${line%"${line##*[![:space:]]}"}"
|
||||||
|
[[ -z "$line" || "$line" == \#* ]] && continue
|
||||||
|
if [[ "$line" =~ ^([A-Za-z_][A-Za-z0-9_]*)=(.*)$ ]]; then
|
||||||
|
local var_key="${BASH_REMATCH[1]}"
|
||||||
|
local var_val="${BASH_REMATCH[2]}"
|
||||||
|
|
||||||
|
[[ "$var_key" != var_* ]] && continue
|
||||||
|
_is_whitelisted_key "$var_key" || {
|
||||||
|
msg_debug "Ignore non-whitelisted ${var_key}"
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
# Strip quotes
|
||||||
|
if [[ "$var_val" =~ ^\"(.*)\"$ ]]; then
|
||||||
|
var_val="${BASH_REMATCH[1]}"
|
||||||
|
elif [[ "$var_val" =~ ^\'(.*)\'$ ]]; then
|
||||||
|
var_val="${BASH_REMATCH[1]}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Unsafe check without regex (formatter-friendly)
|
||||||
|
local _unsafe=""
|
||||||
|
case "$var_val" in
|
||||||
|
*'$('*) _unsafe=1 ;;
|
||||||
|
*'`'*) _unsafe=1 ;;
|
||||||
|
*';'*) _unsafe=1 ;;
|
||||||
|
*'&'*) _unsafe=1 ;;
|
||||||
|
*'<('*) _unsafe=1 ;;
|
||||||
|
esac
|
||||||
|
if [[ -n "$_unsafe" ]]; then
|
||||||
|
msg_warn "Ignoring ${var_key} from ${file}: unsafe characters"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Hard env wins
|
||||||
|
if [[ -n "${_HARD_ENV[$var_key]:-}" ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set only if not already exported
|
||||||
|
if [[ -z "${!var_key+x}" ]]; then
|
||||||
|
export "${var_key}=${var_val}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
else
|
||||||
|
msg_warn "Malformed line in ${file}: ${line}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
done <"$file"
|
||||||
|
msg_ok "Loaded ${file}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 1) Ensure file exists
|
||||||
|
_ensure_default_vars
|
||||||
|
|
||||||
|
# 2) Load file
|
||||||
|
local dv
|
||||||
|
dv="$(_find_default_vars)" || {
|
||||||
|
msg_error "default.vars not found after ensure step"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
_load_vars_file "$dv"
|
||||||
|
|
||||||
|
# 3) Map var_verbose → VERBOSE
|
||||||
|
if [[ -n "${var_verbose:-}" ]]; then
|
||||||
|
case "${var_verbose,,}" in
|
||||||
|
1 | yes | true | on) VERBOSE="yes" ;;
|
||||||
|
0 | no | false | off) VERBOSE="no" ;;
|
||||||
|
*) VERBOSE="${var_verbose}" ;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
VERBOSE="no"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 4) Apply base settings and show summary
|
||||||
|
METHOD="mydefaults-global"
|
||||||
|
base_settings "$VERBOSE"
|
||||||
|
header_info
|
||||||
|
echo -e "${DEFAULT}${BOLD}${BL}Using My Defaults (default.vars) on node $PVEHOST_NAME${CL}"
|
||||||
|
echo_default
|
||||||
|
}
|
||||||
|
|
||||||
install_script() {
|
install_script() {
|
||||||
pve_check
|
pve_check
|
||||||
shell_check
|
shell_check
|
||||||
@ -931,23 +1043,27 @@ install_script() {
|
|||||||
ADVANCED | advanced | 3)
|
ADVANCED | advanced | 3)
|
||||||
CHOICE="3"
|
CHOICE="3"
|
||||||
;;
|
;;
|
||||||
|
DEFAULT_VARS | default_vars | 4)
|
||||||
|
CHOICE="4"
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
echo -e "\n${CROSS}${RD}Invalid PRESET value: ${PRESET}${CL}\n"
|
echo -e "\n${CROSS}${RD}Invalid PRESET value: ${PRESET}${CL}\n"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
else
|
else
|
||||||
|
#"4" "Use Config File" \
|
||||||
|
#"5" "Manage Default Storage" \
|
||||||
while true; do
|
while true; do
|
||||||
TMP_CHOICE=$(whiptail --backtitle "[dev] Proxmox VE Helper Scripts" \
|
TMP_CHOICE=$(whiptail --backtitle "[dev] Proxmox VE Helper Scripts" \
|
||||||
--title "SETTINGS" \
|
--title "SETTINGS" \
|
||||||
--menu "Choose an option:" 20 60 7 \
|
--menu "Choose an option:" 20 60 6 \
|
||||||
"1" "Default Settings" \
|
"1" "Default Settings" \
|
||||||
"2" "Default Settings (with verbose)" \
|
"2" "Default Settings (with verbose)" \
|
||||||
"3" "Advanced Settings" \
|
"3" "Advanced Settings" \
|
||||||
"4" "Use Config File" \
|
"4" "My Default Vars" \
|
||||||
"5" "Manage Default Storage" \
|
"5" "Diagnostic Settings" \
|
||||||
"6" "Diagnostic Settings" \
|
"6" "Exit" \
|
||||||
"7" "Exit" \
|
|
||||||
--default-item "1" 3>&1 1>&2 2>&3) || true
|
--default-item "1" 3>&1 1>&2 2>&3) || true
|
||||||
|
|
||||||
if [ -z "$TMP_CHOICE" ]; then
|
if [ -z "$TMP_CHOICE" ]; then
|
||||||
@ -984,17 +1100,21 @@ install_script() {
|
|||||||
base_settings
|
base_settings
|
||||||
advanced_settings
|
advanced_settings
|
||||||
;;
|
;;
|
||||||
|
# 4)
|
||||||
|
# header_info
|
||||||
|
# echo -e "${INFO}${HOLD} ${GN}Using Config File on node $PVEHOST_NAME${CL}"
|
||||||
|
# METHOD="advanced"
|
||||||
|
# source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/config-file.func)
|
||||||
|
# config_file
|
||||||
|
# ;;
|
||||||
4)
|
4)
|
||||||
header_info
|
# My Defaults (default.vars)
|
||||||
echo -e "${INFO}${HOLD} ${GN}Using Config File on node $PVEHOST_NAME${CL}"
|
default_var_settings || {
|
||||||
METHOD="advanced"
|
msg_error "Failed to apply default.vars"
|
||||||
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/config-file.func)
|
exit 1
|
||||||
config_file
|
}
|
||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
manage_default_storage
|
|
||||||
;;
|
|
||||||
6)
|
|
||||||
if [[ $DIAGNOSTICS == "yes" ]]; then
|
if [[ $DIAGNOSTICS == "yes" ]]; then
|
||||||
if whiptail --backtitle "[dev] Proxmox VE Helper Scripts" --title "DIAGNOSTICS SETTINGS" --yesno "Send Diagnostics of LXC Installation?\n\nCurrent setting: ${DIAGNOSTICS}" 10 58 \
|
if whiptail --backtitle "[dev] Proxmox VE Helper Scripts" --title "DIAGNOSTICS SETTINGS" --yesno "Send Diagnostics of LXC Installation?\n\nCurrent setting: ${DIAGNOSTICS}" 10 58 \
|
||||||
--yes-button "No" --no-button "Back"; then
|
--yes-button "No" --no-button "Back"; then
|
||||||
@ -1011,7 +1131,7 @@ install_script() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
7)
|
6)
|
||||||
echo -e "\n${CROSS}${RD}Script terminated. Have a great day!${CL}\n"
|
echo -e "\n${CROSS}${RD}Script terminated. Have a great day!${CL}\n"
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user