This ensures that user customizations to frr jinja templates in /etc/proxmox-frr/templates/ are preserved across package updates through ucf's three-way merge, preventing silent overwrites of local changes. When a user has customized a template and updates this package which ships a new template version, ucf shows a three-way merge dialog (ncurses) allowing them to view the differences and choose between the maintainer's version, their version, or manually edit the merge result.
Signed-off-by: Gabriel Goller <[email protected]> --- debian/control | 1 + debian/libpve-network-perl.postinst | 34 ++++++++++++++++++++++++++++- debian/libpve-network-perl.postrm | 33 ++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 debian/libpve-network-perl.postrm diff --git a/debian/control b/debian/control index 6fe98822e64c..83ddfc053048 100644 --- a/debian/control +++ b/debian/control @@ -29,6 +29,7 @@ Depends: libpve-common-perl (>= 9.1.1), libnetaddr-ip-perl, libpve-rs-perl (>= 0.11.1), libuuid-perl, + ucf, ${misc:Depends}, ${perl:Depends}, Recommends: frr-pythontools (>= 10.3.1-1+pve2~), diff --git a/debian/libpve-network-perl.postinst b/debian/libpve-network-perl.postinst index 99faedf48f56..629c5bdc9e18 100644 --- a/debian/libpve-network-perl.postinst +++ b/debian/libpve-network-perl.postinst @@ -2,6 +2,36 @@ set -e +TEMPLATE_OVERRIDE_DIR="/etc/proxmox-frr/templates" + +update_override_frr_templates() { + for override_file in "$TEMPLATE_OVERRIDE_DIR"/*; do + # only consider files ending in .jinja. we often have .ucf-old files as + # well storing the previous ucf decision. + case "$override_file" in + *.jinja) + ;; + *) + continue + ;; + esac + + filename=$(basename "$override_file") + + temp_packaged_file=$(mktemp) + + # we want to embed the variable now, not when the trap is executed + # shellcheck disable=SC2064 + trap "rm -f -- '$temp_packaged_file'" EXIT + + if pvesdn template show "$filename" > "$temp_packaged_file"; then + ucf --three-way --debconf-ok "$temp_packaged_file" "$override_file" + fi + + ucfr libpve-network-perl "$override_file" + done +} + migrate_ipam_db() { LEGACY_IPAM_DB_FILE="/etc/pve/priv/ipam.db" IPAM_DB_FILE="/etc/pve/sdn/pve-ipam-state.json" @@ -29,7 +59,9 @@ case "$1" in migrate_ipam_db migrate_mac_cache fi - ;; + + update_override_frr_templates + ;; esac exit 0 diff --git a/debian/libpve-network-perl.postrm b/debian/libpve-network-perl.postrm new file mode 100644 index 000000000000..5a1c6834111b --- /dev/null +++ b/debian/libpve-network-perl.postrm @@ -0,0 +1,33 @@ +#!/bin/bash +set -e + +TEMPLATE_OVERRIDE_DIR="/etc/proxmox-frr/templates" + +case "$1" in + purge) + # Remove ucf registrations on purge + if [ -d "$TEMPLATE_OVERRIDE_DIR" ]; then + for package_file in "$TEMPLATE_OVERRIDE_DIR"/*; do + [ -e "$package_file" ] || continue + + filename=$(basename "$package_file") + target_file="$TEMPLATE_OVERRIDE_DIR/$filename" + + ucf --purge "$target_file" 2>/dev/null || true + ucfr --purge libpve-network-perl "$target_file" 2>/dev/null || true + done + fi + ;; + + remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 -- 2.47.3
