111 lines
3.7 KiB
Bash
111 lines
3.7 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
DEFAULT_DIR="/usr/share/pve-mod"
|
|
CONF_DIR="/etc/pve-mod"
|
|
|
|
# Config file pairs to compare on upgrade: "<default-file>|<user-file>"
|
|
CONF_PAIRS="
|
|
${DEFAULT_DIR}/pve-mod.conf.default|${CONF_DIR}/pve-mod.conf
|
|
${DEFAULT_DIR}/conf.d/node_info.conf.default|${CONF_DIR}/conf.d/node_info.conf
|
|
${DEFAULT_DIR}/conf.d/nag_screen.conf.default|${CONF_DIR}/conf.d/nag_screen.conf
|
|
"
|
|
|
|
# Extracts "section.key" pairs from an INI file, one per line.
|
|
_extract_conf_keys() {
|
|
local file="$1" section="" line key
|
|
while IFS= read -r line; do
|
|
case "$line" in
|
|
'#'*|'') continue ;;
|
|
'['*']') section="${line#[}"; section="${section%]}"; continue ;;
|
|
*'='*) key="${line%%=*}"; echo "${section}.${key}" ;;
|
|
esac
|
|
done < "$file"
|
|
}
|
|
|
|
# Warns about keys present in a default config but missing from the user's copy.
|
|
_check_one_pair() {
|
|
local default_conf="$1" user_conf="$2"
|
|
[ -f "$default_conf" ] || return 0
|
|
[ -f "$user_conf" ] || return 0
|
|
|
|
local new_keys="" section="" key line
|
|
while IFS= read -r line; do
|
|
case "$line" in
|
|
'#'*|'') continue ;;
|
|
'['*']') section="${line#[}"; section="${section%]}"; continue ;;
|
|
*'='*)
|
|
key="${line%%=*}"
|
|
if ! _extract_conf_keys "$user_conf" | grep -qF "${section}.${key}"; then
|
|
new_keys="${new_keys} [${section}] ${line} (${user_conf})\n"
|
|
fi
|
|
;;
|
|
esac
|
|
done < "$default_conf"
|
|
|
|
if [ -n "$new_keys" ]; then
|
|
printf "%b" "$new_keys"
|
|
fi
|
|
}
|
|
|
|
# Warns about any new config keys across the main config and all per-mod configs.
|
|
_check_new_config_keys() {
|
|
local all_new="" pair default_conf user_conf
|
|
while IFS= read -r pair; do
|
|
[ -n "$pair" ] || continue
|
|
default_conf="${pair%%|*}"
|
|
user_conf="${pair#*|}"
|
|
all_new="${all_new}$(_check_one_pair "$default_conf" "$user_conf")"
|
|
done <<EOF
|
|
$CONF_PAIRS
|
|
EOF
|
|
|
|
if [ -n "$all_new" ]; then
|
|
echo ""
|
|
echo "pve-mod: New configuration options are available since your last install:"
|
|
printf "%b" "$all_new"
|
|
echo "pve-mod: Run 'pve-mod-configure' to configure them, or add them manually."
|
|
echo ""
|
|
fi
|
|
}
|
|
|
|
case "$1" in
|
|
configure)
|
|
# Apply patches for any enabled modules. Fails loudly on error.
|
|
/usr/lib/pve-mod/apply-patches.sh
|
|
|
|
if [ -z "$2" ]; then
|
|
echo ""
|
|
echo "pve-mod installed successfully."
|
|
echo "Run 'pve-mod-configure' to enable and configure modules."
|
|
echo ""
|
|
else
|
|
# Upgrading from a previous version — warn about any new config keys.
|
|
_check_new_config_keys
|
|
fi
|
|
;;
|
|
|
|
triggered)
|
|
# Fired by dpkg when pve-manager is upgraded. Only re-apply patches
|
|
# if the user has opted in via 'pve-mod-configure'.
|
|
TRIGGER_ENABLED=$(awk -F= '/^\[pve_trigger\]/{s=1} s && /^enabled=/{print $2; exit}' \
|
|
/etc/pve-mod/pve-mod.conf 2>/dev/null || echo 0)
|
|
if [ "${TRIGGER_ENABLED}" = "1" ]; then
|
|
echo "pve-mod: pve-manager upgrade detected — re-applying patches."
|
|
if ! /usr/lib/pve-mod/apply-patches.sh; then
|
|
echo "pve-mod: WARNING: Failed to re-apply patches. Run 'pve-mod-configure' to fix." >&2
|
|
fi
|
|
else
|
|
echo "pve-mod: WARNING: pve-manager was upgraded but auto re-patching is disabled." >&2
|
|
echo "pve-mod: The Proxmox UI modifications may no longer be active." >&2
|
|
echo "pve-mod: Run 'pve-mod-configure' to re-apply patches." >&2
|
|
fi
|
|
;;
|
|
|
|
abort-upgrade|abort-remove|abort-deconfigure)
|
|
;;
|
|
esac
|
|
|
|
#DEBHELPER#
|
|
exit 0
|