Refactor and modernize build.func script

Refactored case statements and conditional checks to use more idiomatic and consistent Bash syntax. Replaced German comments with English, improved readability by splitting long lines, and standardized variable assignments. Enhanced maintainability by using case/esac and if/then constructs, and replaced double-bracketed conditionals with POSIX-compliant single brackets where appropriate.
This commit is contained in:
CanbiZ 2025-09-16 13:13:20 +02:00
parent d6a1183824
commit 4c4f4ecfe6

View File

@ -1192,7 +1192,10 @@ _is_whitelisted_key() {
_sanitize_value() {
# Disallow Command-Substitution / Shell-Meta
case "$1" in
*'$('*|*'`'*|*';'*|*'&'*|*'<('* ) echo ""; return 0 ;;
*'$('* | *'`'* | *';'* | *'&'* | *'<('*)
echo ""
return 0
;;
esac
echo "$1"
}
@ -1205,7 +1208,8 @@ _load_vars_file_to_map() {
[[ -f "$file" ]] || return 0
local line
while IFS= read -r line || [[ -n "$line" ]]; do
line="${line#"${line%%[![:space:]]*}"}"; line="${line%"${line##*[![:space:]]}"}"
line="${line#"${line%%[![:space:]]*}"}"
line="${line%"${line##*[![:space:]]}"}"
[[ -z "$line" || "$line" == \#* ]] && continue
if [[ "$line" =~ ^([A-Za-z_][A-Za-z0-9_]*)=(.*)$ ]]; then
local k="${BASH_REMATCH[1]}"
@ -1225,8 +1229,10 @@ _build_vars_diff() {
local oldf="$1" newf="$2"
local k
local -A OLD=() NEW=()
_load_vars_file_to_map "$oldf"; for k in "${!_VARS_IN[@]}"; do OLD["$k"]="${_VARS_IN[$k]}"; done
_load_vars_file_to_map "$newf"; for k in "${!_VARS_IN[@]}"; do NEW["$k"]="${_VARS_IN[$k]}"; done
_load_vars_file_to_map "$oldf"
for k in "${!_VARS_IN[@]}"; do OLD["$k"]="${_VARS_IN[$k]}"; done
_load_vars_file_to_map "$newf"
for k in "${!_VARS_IN[@]}"; do NEW["$k"]="${_VARS_IN[$k]}"; done
local out
out+="# Diff for ${APP} (${NSAPP})\n"
@ -1262,58 +1268,70 @@ _build_vars_diff() {
printf "%b" "$out"
}
# Baut aus der aktuellen Advanced-Auswahl eine temporäre <app>.vars-Datei
# Build a temporary <app>.vars file from current advanced settings
_build_current_app_vars_tmp() {
local tmpf
tmpf="$(mktemp -p /tmp "${NSAPP:-app}.vars.new.XXXXXX")"
tmpf="$(mktemp /tmp/${NSAPP:-app}.vars.new.XXXXXX)"
# NET/GW
local _net="${NET:-}"
local _gate=""
[[ "${GATE:-}" =~ ^,gw= ]] && _gate="${GATE#,gw=}"
# IPv6
local _ipv6_method="${IPV6_METHOD:-auto}"
local _ipv6_static=""
local _ipv6_gateway=""
case "$_ipv6_method" in
static)
_ipv6_static="${IPV6_ADDR:-}"
_ipv6_gateway="${IPV6_GATE:-}"
;;
_net="${NET:-}"
_gate=""
case "${GATE:-}" in
,gw=*) _gate=$(echo "$GATE" | sed 's/^,gw=//') ;;
esac
# MTU/VLAN/MAC
local _mtu="" _vlan="" _mac=""
[[ "${MTU:-}" =~ ^,mtu= ]] && _mtu="${MTU#,mtu=}"
[[ "${VLAN:-}" =~ ^,tag= ]] && _vlan="${VLAN#,tag=}"
[[ "${MAC:-}" =~ ^,hwaddr=]] && _mac="${MAC#,hwaddr=}"
# IPv6
_ipv6_method="${IPV6_METHOD:-auto}"
_ipv6_static=""
_ipv6_gateway=""
if [ "$_ipv6_method" = "static" ]; then
_ipv6_static="${IPV6_ADDR:-}"
_ipv6_gateway="${IPV6_GATE:-}"
fi
# DNS/SD
local _ns="" _searchdomain=""
[[ "${NS:-}" =~ ^-nameserver= ]] && _ns="${NS#-nameserver=}"
[[ "${SD:-}" =~ ^-searchdomain= ]] && _searchdomain="${SD#-searchdomain=}"
# MTU/VLAN/MAC
_mtu=""
_vlan=""
_mac=""
case "${MTU:-}" in
,mtu=*) _mtu=$(echo "$MTU" | sed 's/^,mtu=//') ;;
esac
case "${VLAN:-}" in
,tag=*) _vlan=$(echo "$VLAN" | sed 's/^,tag=//') ;;
esac
case "${MAC:-}" in
,hwaddr=*) _mac=$(echo "$MAC" | sed 's/^,hwaddr=//') ;;
esac
# DNS / Searchdomain
_ns=""
_searchdomain=""
case "${NS:-}" in
-nameserver=*) _ns=$(echo "$NS" | sed 's/^-nameserver=//') ;;
esac
case "${SD:-}" in
-searchdomain=*) _searchdomain=$(echo "$SD" | sed 's/^-searchdomain=//') ;;
esac
# SSH / APT / Features
local _ssh="${SSH:-no}"
local _ssh_auth="${SSH_AUTHORIZED_KEY:-}"
local _apt_cacher="${APT_CACHER:-}"
local _apt_cacher_ip="${APT_CACHER_IP:-}"
local _fuse="${ENABLE_FUSE:-no}"
local _tun="${ENABLE_TUN:-no}"
local _tags="${TAGS:-}"
local _verbose="${VERBOSE:-no}"
_ssh="${SSH:-no}"
_ssh_auth="${SSH_AUTHORIZED_KEY:-}"
_apt_cacher="${APT_CACHER:-}"
_apt_cacher_ip="${APT_CACHER_IP:-}"
_fuse="${ENABLE_FUSE:-no}"
_tun="${ENABLE_TUN:-no}"
_tags="${TAGS:-}"
_verbose="${VERBOSE:-no}"
# Typ/Resourcen/Identity
local _unpriv="${CT_TYPE:-1}"
local _cpu="${CORE_COUNT:-1}"
local _ram="${RAM_SIZE:-1024}"
local _disk="${DISK_SIZE:-4}"
local _hostname="${HN:-$NSAPP}"
# Type / Resources / Identity
_unpriv="${CT_TYPE:-1}"
_cpu="${CORE_COUNT:-1}"
_ram="${RAM_SIZE:-1024}"
_disk="${DISK_SIZE:-4}"
_hostname="${HN:-$NSAPP}"
# Storage (falls vorhanden)
local _tpl_storage="${TEMPLATE_STORAGE:-}"
local _ct_storage="${CONTAINER_STORAGE:-}"
# Storage
_tpl_storage="${TEMPLATE_STORAGE:-}"
_ct_storage="${CONTAINER_STORAGE:-}"
{
echo "# App-specific defaults for ${APP} (${NSAPP})"
@ -1325,33 +1343,33 @@ _build_current_app_vars_tmp() {
echo "var_ram=$(_sanitize_value "$_ram")"
echo "var_disk=$(_sanitize_value "$_disk")"
[[ -n "${BRG:-}" ]] && echo "var_brg=$(_sanitize_value "$BRG")"
[[ -n "$_net" ]] && echo "var_net=$(_sanitize_value "$_net")"
[[ -n "$_gate" ]] && echo "var_gateway=$(_sanitize_value "$_gate")"
[[ -n "$_mtu" ]] && echo "var_mtu=$(_sanitize_value "$_mtu")"
[[ -n "$_vlan" ]] && echo "var_vlan=$(_sanitize_value "$_vlan")"
[[ -n "$_mac" ]] && echo "var_mac=$(_sanitize_value "$_mac")"
[[ -n "$_ns" ]] && echo "var_ns=$(_sanitize_value "$_ns")"
[ -n "${BRG:-}" ] && echo "var_brg=$(_sanitize_value "$BRG")"
[ -n "$_net" ] && echo "var_net=$(_sanitize_value "$_net")"
[ -n "$_gate" ] && echo "var_gateway=$(_sanitize_value "$_gate")"
[ -n "$_mtu" ] && echo "var_mtu=$(_sanitize_value "$_mtu")"
[ -n "$_vlan" ] && echo "var_vlan=$(_sanitize_value "$_vlan")"
[ -n "$_mac" ] && echo "var_mac=$(_sanitize_value "$_mac")"
[ -n "$_ns" ] && echo "var_ns=$(_sanitize_value "$_ns")"
[[ -n "$_ipv6_method" ]] && echo "var_ipv6_method=$(_sanitize_value "$_ipv6_method")"
[[ -n "$_ipv6_static" ]] && echo "var_ipv6_static=$(_sanitize_value "$_ipv6_static")"
[ -n "$_ipv6_method" ] && echo "var_ipv6_method=$(_sanitize_value "$_ipv6_method")"
[ -n "$_ipv6_static" ] && echo "var_ipv6_static=$(_sanitize_value "$_ipv6_static")"
[[ -n "$_ssh" ]] && echo "var_ssh=$(_sanitize_value "$_ssh")"
[[ -n "$_ssh_auth" ]] && echo "var_ssh_authorized_key=$(_sanitize_value "$_ssh_auth")"
[ -n "$_ssh" ] && echo "var_ssh=$(_sanitize_value "$_ssh")"
[ -n "$_ssh_auth" ] && echo "var_ssh_authorized_key=$(_sanitize_value "$_ssh_auth")"
[[ -n "$_apt_cacher" ]] && echo "var_apt_cacher=$(_sanitize_value "$_apt_cacher")"
[[ -n "$_apt_cacher_ip" ]] && echo "var_apt_cacher_ip=$(_sanitize_value "$_apt_cacher_ip")"
[ -n "$_apt_cacher" ] && echo "var_apt_cacher=$(_sanitize_value "$_apt_cacher")"
[ -n "$_apt_cacher_ip" ] && echo "var_apt_cacher_ip=$(_sanitize_value "$_apt_cacher_ip")"
[[ -n "$_fuse" ]] && echo "var_fuse=$(_sanitize_value "$_fuse")"
[[ -n "$_tun" ]] && echo "var_tun=$(_sanitize_value "$_tun")"
[[ -n "$_tags" ]] && echo "var_tags=$(_sanitize_value "$_tags")"
[[ -n "$_verbose" ]] && echo "var_verbose=$(_sanitize_value "$_verbose")"
[ -n "$_fuse" ] && echo "var_fuse=$(_sanitize_value "$_fuse")"
[ -n "$_tun" ] && echo "var_tun=$(_sanitize_value "$_tun")"
[ -n "$_tags" ] && echo "var_tags=$(_sanitize_value "$_tags")"
[ -n "$_verbose" ] && echo "var_verbose=$(_sanitize_value "$_verbose")"
[[ -n "$_hostname" ]] && echo "var_hostname=$(_sanitize_value "$_hostname")"
[[ -n "$_searchdomain" ]] && echo "var_searchdomain=$(_sanitize_value "$_searchdomain")"
[ -n "$_hostname" ] && echo "var_hostname=$(_sanitize_value "$_hostname")"
[ -n "$_searchdomain" ] && echo "var_searchdomain=$(_sanitize_value "$_searchdomain")"
[[ -n "$_tpl_storage" ]] && echo "var_template_storage=$(_sanitize_value "$_tpl_storage")"
[[ -n "$_ct_storage" ]] && echo "var_container_storage=$(_sanitize_value "$_ct_storage")"
[ -n "$_tpl_storage" ] && echo "var_template_storage=$(_sanitize_value "$_tpl_storage")"
[ -n "$_ct_storage" ] && echo "var_container_storage=$(_sanitize_value "$_ct_storage")"
} >"$tmpf"
echo "$tmpf"
@ -1419,7 +1437,7 @@ maybe_offer_save_app_defaults() {
--title "Diff ${APP}" \
--scrolltext --textbox "$diff_tmp" 25 100
;;
"Cancel"|*)
"Cancel" | *)
msg_info "Canceled. No changes to app defaults."
break
;;
@ -1429,7 +1447,6 @@ maybe_offer_save_app_defaults() {
rm -f "$new_tmp" "$diff_tmp"
}
install_script() {
pve_check
shell_check
@ -1667,7 +1684,6 @@ storage_settings_menu() {
esac
}
check_container_resources() {
# Check actual RAM & Cores
current_ram=$(free -m | awk 'NR==2{print $2}')