update to new post-install script

This commit is contained in:
2026-07-26 01:15:01 -05:00
parent c51e1ab1de
commit aa0e74ae8c
5 changed files with 1633 additions and 109 deletions
+389 -103
View File
@@ -7,6 +7,7 @@ source /opt/idssys/defaults/default.inc
source /opt/idssys/ta-proxmenu/defaults.inc
source /opt/idssys/ta-proxmenu/inc/git-update.inc
source /opt/idssys/ta-proxmenu/inc/ha-status.inc
source /opt/idssys/ta-proxmenu/inc/post-install.inc
source /opt/idssys/ta-proxmenu/inc/deploy-iso-nfs-lxc.sh
source /opt/idssys/ta-proxmenu/inc/deploy-pulse-lxc.sh
source /opt/idssys/ta-proxmenu/inc/virtio-helpers.inc
@@ -280,97 +281,6 @@ INSTALL_ACRONIS() {
FINISH_ACTION
}
INSTALL_PROXMENUX() {
local installer
local temp_dir
if ! TAPM_CREATE_TEMP_DIR proxmenux; then
FINISH_FAILED_ACTION
return
fi
temp_dir="$TAPM_TEMP_DIR"
installer="${temp_dir}/install.sh"
if ! TAPM_DOWNLOAD_HTTPS \
'https://raw.githubusercontent.com/MacRimi/ProxMenux/main/install_proxmenux.sh' \
"$installer" 'ProxMenux installer' ||
! bash "$installer" ||
[[ ! -x /usr/local/bin/menu ]]; then
TAPM_CLEAN_TEMP_DIR "$temp_dir"
echo -e "${idsCL[LightRed]}ProxMenux installation failed or could not be verified.${idsCL[Default]}"
FINISH_FAILED_ACTION
return
fi
TAPM_CLEAN_TEMP_DIR "$temp_dir"
/usr/local/bin/menu
}
PROXMENUX_POST_INSTALL() {
local backup_dir='/var/backups/ta-proxmenu'
local backup_file=''
local post_install_dir='/usr/local/share/proxmenux/scripts/post_install'
local post_install_script="${post_install_dir}/customizable_post_install.sh"
local timestamp
if [[ ! -f "$post_install_script" ]]; then
INSTALL_PROXMENUX
[[ -f "$post_install_script" ]] || return 1
fi
if ! bash "$post_install_script"; then
echo -e "${idsCL[LightRed]}The ProxMenux post-install script failed. A completion marker was not created.${idsCL[Default]}"
FINISH_FAILED_ACTION
return
fi
if [[ -e /etc/apt/sources.list && ! -f /etc/apt/sources.list ]]; then
echo -e "${idsCL[LightRed]}/etc/apt/sources.list is not a regular file and was not changed.${idsCL[Default]}"
FINISH_FAILED_ACTION
return
fi
if [[ -s /etc/apt/sources.list ]]; then
timestamp="$(date +%Y%m%d-%H%M%S)"
if ! install -d -m 0700 "$backup_dir" ||
! backup_file="$(mktemp "${backup_dir}/sources.list.proxmenux.${timestamp}.XXXXXX")" ||
! install -m 0600 /etc/apt/sources.list "$backup_file"; then
[[ -n "$backup_file" ]] && rm -f -- "$backup_file"
echo -e "${idsCL[LightRed]}Could not back up /etc/apt/sources.list; it was not cleared.${idsCL[Default]}"
FINISH_FAILED_ACTION
return
fi
fi
if ! : >/etc/apt/sources.list ||
! chmod 0644 /etc/apt/sources.list; then
echo -e "${idsCL[LightRed]}Could not enforce an empty /etc/apt/sources.list.${idsCL[Default]}"
[[ -n "$backup_file" ]] &&
echo "Backup retained at: ${backup_file}"
FINISH_FAILED_ACTION
return
fi
if ! apt-get update; then
echo -e "${idsCL[LightRed]}APT repository validation failed after ProxMenux post-install.${idsCL[Default]}"
[[ -n "$backup_file" ]] &&
echo "Removed sources were retained at: ${backup_file}"
FINISH_FAILED_ACTION
return
fi
if ! touch /opt/.PROXMENUX_POST_INSTALL; then
echo -e "${idsCL[LightRed]}Post-install succeeded, but the completion marker could not be created.${idsCL[Default]}"
FINISH_FAILED_ACTION
return
fi
echo -e "\n${idsCL[Green]}ProxMenux post-install completed and APT sources were validated.${idsCL[Default]}"
[[ -n "$backup_file" ]] &&
echo "ProxMenux additions to sources.list were saved at: ${backup_file}"
FINISH_ACTION
}
INSTALL_GLANCES() {
echo
if ! DEBIAN_FRONTEND=noninteractive apt-get install glances -y ||
@@ -1860,6 +1770,389 @@ SELECT_MENU() {
done
}
TAPM_POST_PROFILE_SUMMARY() {
echo
echo -e " ${idsCL[LightCyan]}Recommended TAPM host profile${idsCL[Default]}"
echo
echo " [x] System utilities and CPU-appropriate microcode"
echo " [x] Chrony time synchronization (existing timezone preserved)"
echo " [x] Kernel panic recovery (30 seconds)"
echo " [x] Conservative inotify limits"
echo " [x] Persistent journald (1 GiB / 30 days)"
echo " [x] Verify and repair log rotation"
echo " [x] Host memory behavior (swappiness 10)"
echo " [x] Network safeguards"
echo " [x] BBR and TCP Fast Open"
echo " [x] Native parallel gzip support for vzdump"
echo " [ ] APT network compatibility / conditional IPv4 (optional)"
echo
echo " Global vzdump bandwidth and I/O-priority overrides are not applied."
}
TAPM_POST_FAILURE_RECOVERY() {
local backup_dir="$1"
local mode="$2"
local -a labels=(
"Retry the selected profile"
"Restore the pre-change backup"
"Stop and return to the menu"
)
local -a values=(retry restore stop)
while true; do
echo
[[ -n "$backup_dir" ]] && echo " Pre-change backup: ${backup_dir}"
SELECT_MENU "Host Configuration Recovery" labels values
case "$MENU_SELECTION" in
retry)
if TAPM_POST_APPLY_PROFILE "$mode"; then
echo -e "\n${idsCL[Green]}The profile retry completed successfully.${idsCL[Default]}"
echo " New backup: ${TAPM_POST_LAST_BACKUP}"
return 0
fi
echo -e "\n${idsCL[LightRed]}${TAPM_POST_LAST_ERROR:-The retry failed.}${idsCL[Default]}"
;;
restore)
if [[ -n "$backup_dir" ]] &&
TAPM_POST_RESTORE_BACKUP "$backup_dir"; then
echo -e "\n${idsCL[Green]}The pre-change configuration was restored.${idsCL[Default]}"
return 0
fi
echo -e "\n${idsCL[LightRed]}The pre-change backup could not be restored.${idsCL[Default]}"
;;
stop|back) return 1 ;;
quit) EXIT1; exit 0 ;;
esac
done
}
TAPM_POST_APPLY_RECOMMENDED() {
local backup_dir
local confirmation
TAPM_POST_DEFAULT_SELECTIONS
TAPM_POST_PROFILE_SUMMARY
read -r -p " Apply this profile to the current host (type yes to continue)? " \
confirmation
[[ "${confirmation,,}" == yes ]] || return
if TAPM_POST_APPLY_PROFILE apply; then
echo -e "\n${idsCL[Green]}The TAPM host profile was applied and verified.${idsCL[Default]}"
echo " Backup: ${TAPM_POST_LAST_BACKUP}"
FINISH_ACTION
return
fi
echo -e "\n${idsCL[LightRed]}${TAPM_POST_LAST_ERROR:-Host profile application failed.}${idsCL[Default]}"
backup_dir="$TAPM_POST_LAST_BACKUP"
if TAPM_POST_FAILURE_RECOVERY "$backup_dir" apply; then
FINISH_ACTION
else
FINISH_FAILED_ACTION
fi
}
TAPM_POST_MIGRATE_PROXMENUX() {
local backup_dir
local confirmation
if ! TAPM_POST_PROXMENUX_DETECTED; then
echo -e "\n${idsCL[LightYellow]}No ProxMenux installation or recognized artifacts were detected.${idsCL[Default]}"
FINISH_FAILED_ACTION
return
fi
TAPM_POST_DEFAULT_SELECTIONS
TAPM_POST_PROFILE_SUMMARY
TAPM_POST_MIGRATION_PLAN
echo
echo -e " ${idsCL[LightYellow]}Migration will repair recognized ProxMenux settings, restore gzip,"
echo -e " apply the TAPM profile, and then remove ProxMenux itself.${idsCL[Default]}"
echo " Shared packages such as dialog, jq, curl, Git, and Python are retained."
echo
read -r -p " Migrate this host and remove ProxMenux (type yes to continue)? " \
confirmation
[[ "${confirmation,,}" == yes ]] || return
if TAPM_POST_APPLY_PROFILE migrate; then
echo -e "\n${idsCL[Green]}The host was migrated to the TAPM profile and ProxMenux was removed.${idsCL[Default]}"
echo " Backup: ${TAPM_POST_LAST_BACKUP}"
FINISH_ACTION
return
fi
echo -e "\n${idsCL[LightRed]}${TAPM_POST_LAST_ERROR:-ProxMenux migration failed.}${idsCL[Default]}"
echo " ProxMenux removal is the final migration step; earlier failures leave it installed."
backup_dir="$TAPM_POST_LAST_BACKUP"
if TAPM_POST_FAILURE_RECOVERY "$backup_dir" migrate; then
FINISH_ACTION
else
FINISH_FAILED_ACTION
fi
}
TAPM_POST_FLAG_LABEL() {
local value="$1"
local label="$2"
(( value == 1 )) && printf '[x] %s' "$label" || printf '[ ] %s' "$label"
}
TAPM_POST_TOGGLE_FLAG() {
local variable_name="$1"
local current_value="${!variable_name}"
(( current_value == 1 )) &&
printf -v "$variable_name" '%d' 0 ||
printf -v "$variable_name" '%d' 1
}
TAPM_POST_CUSTOMIZE() {
local -a labels
local -a values
TAPM_POST_DEFAULT_SELECTIONS
while true; do
labels=(
"$(TAPM_POST_FLAG_LABEL "$TAPM_POST_DO_UTILITIES" "System utilities")"
"$(TAPM_POST_FLAG_LABEL "$TAPM_POST_DO_TIME" "Time synchronization")"
"$(TAPM_POST_FLAG_LABEL "$TAPM_POST_DO_PANIC" "Kernel panic recovery")"
"$(TAPM_POST_FLAG_LABEL "$TAPM_POST_DO_LIMITS" "Conservative inotify limits")"
"$(TAPM_POST_FLAG_LABEL "$TAPM_POST_DO_JOURNALD" "Journald — 1 GiB / 30 days")"
"$(TAPM_POST_FLAG_LABEL "$TAPM_POST_DO_LOGROTATE" "Verify and repair log rotation")"
"$(TAPM_POST_FLAG_LABEL "$TAPM_POST_DO_MEMORY" "Host memory behavior")"
"$(TAPM_POST_FLAG_LABEL "$TAPM_POST_DO_NETWORK" "Network safeguards")"
"$(TAPM_POST_FLAG_LABEL "$TAPM_POST_DO_BBR" "BBR and TCP Fast Open")"
"$(TAPM_POST_FLAG_LABEL "$TAPM_POST_DO_PIGZ" "Native parallel gzip for vzdump")"
"$(TAPM_POST_FLAG_LABEL "$TAPM_POST_DO_APT_NETWORK" "APT network compatibility check")"
"Apply selected profile"
)
values=(
utilities time panic limits journald logrotate memory network bbr pigz
apt_network apply
)
SELECT_MENU "Customize TAPM Host Profile" labels values
case "$MENU_SELECTION" in
utilities) TAPM_POST_TOGGLE_FLAG TAPM_POST_DO_UTILITIES ;;
time) TAPM_POST_TOGGLE_FLAG TAPM_POST_DO_TIME ;;
panic) TAPM_POST_TOGGLE_FLAG TAPM_POST_DO_PANIC ;;
limits) TAPM_POST_TOGGLE_FLAG TAPM_POST_DO_LIMITS ;;
journald) TAPM_POST_TOGGLE_FLAG TAPM_POST_DO_JOURNALD ;;
logrotate) TAPM_POST_TOGGLE_FLAG TAPM_POST_DO_LOGROTATE ;;
memory) TAPM_POST_TOGGLE_FLAG TAPM_POST_DO_MEMORY ;;
network) TAPM_POST_TOGGLE_FLAG TAPM_POST_DO_NETWORK ;;
bbr) TAPM_POST_TOGGLE_FLAG TAPM_POST_DO_BBR ;;
pigz) TAPM_POST_TOGGLE_FLAG TAPM_POST_DO_PIGZ ;;
apt_network) TAPM_POST_TOGGLE_FLAG TAPM_POST_DO_APT_NETWORK ;;
apply)
local backup_dir
local confirmation
echo
read -r -p " Apply the selected profile (type yes to continue)? " \
confirmation
[[ "${confirmation,,}" == yes ]] || continue
if TAPM_POST_APPLY_PROFILE custom; then
echo -e "\n${idsCL[Green]}The custom TAPM profile was applied.${idsCL[Default]}"
echo " Backup: ${TAPM_POST_LAST_BACKUP}"
FINISH_ACTION
return
fi
echo -e "\n${idsCL[LightRed]}${TAPM_POST_LAST_ERROR:-Custom profile application failed.}${idsCL[Default]}"
backup_dir="$TAPM_POST_LAST_BACKUP"
if TAPM_POST_FAILURE_RECOVERY "$backup_dir" custom; then
FINISH_ACTION
else
FINISH_FAILED_ACTION
fi
return
;;
back) return ;;
quit) EXIT1; exit 0 ;;
esac
done
}
TAPM_POST_SHOW_AUDIT() {
MENU_HEADER
echo
TAPM_POST_AUDIT
FINISH_ACTION
}
TAPM_POST_SHOW_REPORT() {
local report='/var/lib/ta-proxmenu/post-install/last-report.txt'
MENU_HEADER
echo
if [[ -f "$report" ]]; then
cat "$report"
else
echo -e " ${idsCL[LightYellow]}No completed TAPM host configuration report is available.${idsCL[Default]}"
fi
FINISH_ACTION
}
TAPM_POST_RESTORE_MENU() {
local backup_base='/var/backups/ta-proxmenu/post-install'
local -a labels=()
local -a values=()
local backup_dir
local confirmation
if [[ -d "$backup_base" ]]; then
while IFS= read -r backup_dir; do
[[ -f "${backup_dir}/manifest.tsv" ]] || continue
labels+=("${backup_dir##*/}")
values+=("$backup_dir")
done < <(find "$backup_base" -mindepth 1 -maxdepth 1 -type d |
sort -r)
fi
if (( ${#labels[@]} == 0 )); then
echo -e "\n${idsCL[LightYellow]}No TAPM host configuration backups were found.${idsCL[Default]}"
FINISH_FAILED_ACTION
return
fi
SELECT_MENU "Restore TAPM Host Configuration Backup" labels values
case "$MENU_SELECTION" in
back) return ;;
quit) EXIT1; exit 0 ;;
esac
backup_dir="$MENU_SELECTION"
echo
echo " Selected backup: $backup_dir"
echo " Restoring may also reinstate files or services removed during migration."
read -r -p " Restore this backup (type restore to continue)? " confirmation
[[ "${confirmation,,}" == restore ]] || return
if TAPM_POST_RESTORE_BACKUP "$backup_dir"; then
echo -e "\n${idsCL[Green]}The selected configuration backup was restored.${idsCL[Default]}"
FINISH_ACTION
return
fi
echo -e "\n${idsCL[LightRed]}The selected backup could not be fully restored.${idsCL[Default]}"
FINISH_FAILED_ACTION
}
TAPM_POST_VZDUMP_APPLY() {
local mode="$1"
local bandwidth="${2:-}"
local ionice="${3:-}"
TAPM_POST_LAST_ERROR=''
if ! TAPM_POST_PRECHECK; then
echo -e "\n${idsCL[LightRed]}$TAPM_POST_LAST_ERROR${idsCL[Default]}"
FINISH_FAILED_ACTION
return
fi
if ! TAPM_POST_BACKUP >/dev/null; then
echo -e "\n${idsCL[LightRed]}The vzdump configuration backup failed.${idsCL[Default]}"
FINISH_FAILED_ACTION
return
fi
case "$mode" in
defaults)
TAPM_POST_REMOVE_COLON_KEY /etc/vzdump.conf bwlimit &&
TAPM_POST_REMOVE_COLON_KEY /etc/vzdump.conf ionice
;;
maximum)
TAPM_POST_SET_COLON_KEY /etc/vzdump.conf bwlimit 0 &&
TAPM_POST_SET_COLON_KEY /etc/vzdump.conf ionice 5
;;
custom)
TAPM_POST_SET_COLON_KEY /etc/vzdump.conf bwlimit "$bandwidth" &&
TAPM_POST_SET_COLON_KEY /etc/vzdump.conf ionice "$ionice"
;;
esac
if (( $? == 0 )); then
echo -e "\n${idsCL[Green]}vzdump performance settings were updated.${idsCL[Default]}"
echo " Backup: ${TAPM_POST_LAST_BACKUP}"
FINISH_ACTION
return
fi
echo -e "\n${idsCL[LightRed]}vzdump performance settings could not be updated.${idsCL[Default]}"
FINISH_FAILED_ACTION
}
TAPM_POST_VZDUMP_MENU() {
local -a labels=(
"Use Proxmox defaults — recommended"
"Maximum throughput — unlimited, ionice 5"
"Set a custom bandwidth limit"
"Restore a TAPM configuration backup"
)
local -a values=(defaults maximum custom restore)
local confirmation
local bandwidth_mib
local bandwidth_kib
local ionice
SELECT_MENU "Configure vzdump Performance" labels values
case "$MENU_SELECTION" in
defaults)
TAPM_POST_VZDUMP_APPLY defaults
;;
maximum)
echo
echo -e "${idsCL[LightYellow]}This can saturate shared storage and increase guest latency.${idsCL[Default]}"
read -r -p " Enable maximum throughput (type yes to continue)? " confirmation
[[ "${confirmation,,}" == yes ]] &&
TAPM_POST_VZDUMP_APPLY maximum
;;
custom)
echo
while true; do
read -r -p " Bandwidth limit in MiB/s (0 means unlimited): " bandwidth_mib
[[ "$bandwidth_mib" =~ ^[0-9]+$ ]] && break
echo " Enter a nonnegative whole number."
done
while true; do
read -r -p " I/O priority [0-8, Proxmox default is 7]: " ionice
[[ "$ionice" =~ ^[0-8]$ ]] && break
echo " Enter a value from 0 through 8."
done
bandwidth_kib=$((bandwidth_mib * 1024))
TAPM_POST_VZDUMP_APPLY custom "$bandwidth_kib" "$ionice"
;;
restore) TAPM_POST_RESTORE_MENU ;;
back) return ;;
quit) EXIT1; exit 0 ;;
esac
}
TAPM_HOST_CONFIGURATION_MENU() {
local -a labels
local -a values
while true; do
labels=(
"Audit current host"
"Apply/repair recommended TAPM profile"
"Customize TAPM profile"
)
values=(audit apply customize)
if TAPM_POST_PROXMENUX_DETECTED; then
labels+=("** Migrate from ProxMenux — RECOMMENDED **")
values+=(migrate)
fi
labels+=(
"Configure vzdump performance"
"Restore a TAPM configuration backup"
"View last configuration report"
)
values+=(vzdump restore report)
SELECT_MENU "TAPM Host Configuration" labels values
case "$MENU_SELECTION" in
audit) TAPM_POST_SHOW_AUDIT ;;
apply) TAPM_POST_APPLY_RECOMMENDED ;;
customize) TAPM_POST_CUSTOMIZE ;;
migrate) TAPM_POST_MIGRATE_PROXMENUX ;;
vzdump) TAPM_POST_VZDUMP_MENU ;;
restore) TAPM_POST_RESTORE_MENU ;;
report) TAPM_POST_SHOW_REPORT ;;
back) return ;;
quit) EXIT1; exit 0 ;;
esac
done
}
SHOW_ABOUT() {
MENU_HEADER
echo
@@ -1877,10 +2170,10 @@ HOST_SETUP_MENU() {
local -a values
while true; do
labels=("Run ProxMenux post-install configuration")
labels=("TAPM Host Configuration")
values=("post_install")
[ -f /opt/.PROXMENUX_POST_INSTALL ] &&
labels[0]="Run ProxMenux post-install configuration (previously run)"
TAPM_POST_PROXMENUX_DETECTED &&
labels[0]="TAPM Host Configuration — ProxMenux migration recommended"
labels+=("Detect CPU model for live migrations")
values+=("cpu")
@@ -1902,7 +2195,7 @@ HOST_SETUP_MENU() {
SELECT_MENU "Host Setup" labels values
case "$MENU_SELECTION" in
post_install) PROXMENUX_POST_INSTALL;;
post_install) TAPM_HOST_CONFIGURATION_MENU;;
cpu) DETECT_CPU;;
virtio) VIRTIO_MENU;;
glances) INSTALL_GLANCES;;
@@ -2285,14 +2578,7 @@ if (( ACTION_REQUESTED == 1 )); then
omsa) INSTALL_OMSA;;
glances) INSTALL_GLANCES;;
acronis) INSTALL_ACRONIS;;
post-install|post_install) PROXMENUX_POST_INSTALL;;
proxmenux)
if [[ ! -f /usr/local/bin/menu ]]; then
INSTALL_PROXMENUX
else
/usr/local/bin/menu
fi
;;
post-install|post_install|proxmenux) TAPM_HOST_CONFIGURATION_MENU;;
virtio) VIRTIO_MENU;;
sentinelone|s1) INSTALL_S1;;
screenconnect) INSTALL_SCREENCONNECT;;