From 53fcf1793a4f1f5d34c75f5808becd1a64a82440 Mon Sep 17 00:00:00 2001 From: MickLesk Date: Fri, 1 May 2026 22:14:44 +0200 Subject: [PATCH] build.func: add var_post_install (host-side post-install script). Configurable via default.vars/app.vars or new advanced-settings step (path on Proxmox host); runs in description() with APP/CTID/IP env vars. --- misc/build.func | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/misc/build.func b/misc/build.func index dfb21213d..3ee6c73ab 100644 --- a/misc/build.func +++ b/misc/build.func @@ -1062,6 +1062,7 @@ load_vars_file() { var_gateway var_hostname var_ipv6_method var_mac var_mknod var_mount_fs var_mtu var_net var_nesting var_ns var_os var_protection var_pw var_ram var_tags var_timezone var_tun var_unprivileged var_verbose var_version var_vlan var_ssh var_ssh_authorized_key var_container_storage var_template_storage var_searchdomain + var_post_install ) # Whitelist check helper @@ -1279,6 +1280,7 @@ default_var_settings() { var_gateway var_hostname var_ipv6_method var_mac var_mknod var_mount_fs var_mtu var_net var_nesting var_ns var_os var_protection var_pw var_ram var_tags var_timezone var_tun var_unprivileged var_verbose var_version var_vlan var_ssh var_ssh_authorized_key var_container_storage var_template_storage + var_post_install ) # Snapshot: environment variables (highest precedence) @@ -1374,6 +1376,11 @@ var_verbose=no # GitHub Personal Access Token (optional – avoids API rate limits during installs) # Create at https://github.com/settings/tokens – read-only public access is sufficient # var_github_token=ghp_your_token_here + +# Optional post-install script (host-side path to a *.sh on the Proxmox host) +# Runs ON THE HOST after the container is fully provisioned. +# Available env vars: APP, NSAPP, CTID, IP, HN, STORAGE, BRG +# var_post_install=/opt/post-install/myhook.sh EOF # Now choose storages (always prompt unless just one exists) @@ -1452,6 +1459,7 @@ if ! declare -p VAR_WHITELIST >/dev/null 2>&1; then var_gateway var_hostname var_ipv6_method var_mac var_mknod var_mount_fs var_mtu var_net var_nesting var_ns var_os var_protection var_pw var_ram var_tags var_timezone var_tun var_unprivileged var_verbose var_version var_vlan var_ssh var_ssh_authorized_key var_container_storage var_template_storage var_searchdomain + var_post_install ) fi @@ -1664,6 +1672,7 @@ _build_current_app_vars_tmp() { [ -n "$_tpl_storage" ] && echo "var_template_storage=$(_sanitize_value "$_tpl_storage")" [ -n "$_ct_storage" ] && echo "var_container_storage=$(_sanitize_value "$_ct_storage")" + [ -n "${var_post_install:-}" ] && echo "var_post_install=$(_sanitize_value "${var_post_install}")" } >"$tmpf" echo "$tmpf" @@ -1808,7 +1817,7 @@ advanced_settings() { TAGS="community-script${var_tags:+;${var_tags}}" fi local STEP=1 - local MAX_STEP=28 + local MAX_STEP=29 # Store values for back navigation - inherit from var_* app defaults local _ct_type="${var_unprivileged:-1}" @@ -1842,6 +1851,7 @@ advanced_settings() { local _enable_mknod="${var_mknod:-0}" local _mount_fs="${var_mount_fs:-}" local _protect_ct="${var_protection:-no}" + local _post_install="${var_post_install:-}" # Detect host timezone for default (if not set via var_timezone) local _host_timezone="" @@ -2753,7 +2763,8 @@ Features: Advanced: Timezone: $tz_display APT Cacher: $apt_display - Verbose: $_verbose" + Verbose: $_verbose + Post-Install Script: ${_post_install:-(none)}" if whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \ --title "CONFIRM SETTINGS" \ @@ -2796,6 +2807,7 @@ Advanced: APT_CACHER="$_apt_cacher" APT_CACHER_IP="$_apt_cacher_ip" VERBOSE="$_verbose" + var_post_install="$_post_install" # Update var_* based on user choice (for functions that check these) var_gpu="$_enable_gpu" @@ -6305,6 +6317,25 @@ EOF systemctl start ping-instances.service fi + # Optional host-side post-install hook + # Path comes from var_post_install (default.vars / app.vars / advanced settings). + # Runs ON THE PROXMOX HOST after the container is up and configured. + # Exposed env vars: APP, NSAPP, CTID, IP, HN, STORAGE, BRG. + if [[ -n "${var_post_install:-}" ]]; then + if [[ -f "${var_post_install}" ]]; then + msg_info "Running post-install script: ${var_post_install}" + if APP="$APP" NSAPP="${NSAPP:-}" CTID="$CTID" IP="$IP" HN="${HN:-}" \ + STORAGE="${STORAGE:-}" BRG="${BRG:-}" \ + bash "${var_post_install}"; then + msg_ok "Ran post-install script" + else + msg_error "Post-install script exited with non-zero status (rc=$?)" + fi + else + msg_error "Post-install script not found on host: ${var_post_install}" + fi + fi + INSTALL_COMPLETE=true post_update_to_api "done" "none" }