[pbs-devel] [PATCH proxmox-backup 20/22] debian/client: add postinst hook to rebuild file-restore initramfs

Stefan Reiter s.reiter at proxmox.com
Tue Feb 16 18:07:08 CET 2021


This will be triggered on updating proxmox-file-restore (via configure,
necessary since the daemon binary might change) and
proxmox-restore-vm-data (via 'activate-noawait', necessary since the
base image might change).

Signed-off-by: Stefan Reiter <s.reiter at proxmox.com>
---
 debian/proxmox-backup-client.triggers |  1 +
 debian/proxmox-file-restore.postinst  | 63 +++++++++++++++++++++++++++
 2 files changed, 64 insertions(+)
 create mode 100644 debian/proxmox-backup-client.triggers
 create mode 100755 debian/proxmox-file-restore.postinst

diff --git a/debian/proxmox-backup-client.triggers b/debian/proxmox-backup-client.triggers
new file mode 100644
index 00000000..998cda4b
--- /dev/null
+++ b/debian/proxmox-backup-client.triggers
@@ -0,0 +1 @@
+interest-noawait pbs-file-restore-initramfs
diff --git a/debian/proxmox-file-restore.postinst b/debian/proxmox-file-restore.postinst
new file mode 100755
index 00000000..7832c8a0
--- /dev/null
+++ b/debian/proxmox-file-restore.postinst
@@ -0,0 +1,63 @@
+#!/bin/sh
+
+set -e
+
+update_initramfs() {
+    # regenerate initramfs for single file restore VM
+    INST_PATH="/usr/lib/x86_64-linux-gnu/proxmox-backup/file-restore"
+    CACHE_PATH="/var/cache/proxmox-backup/file-restore-initramfs.img"
+
+    # cleanup first, in case proxmox-file-restore was uninstalled since we do
+    # not want an unuseable image lying around
+    rm -f "$CACHE_PATH"
+
+    # no base image exists, i.e. proxmox-file-restore is not installed.
+    # ignore, we will be called if the user decides to install it later
+    [ -f "$INST_PATH/initramfs.img" ] || exit 0
+
+    echo "Updating file-restore initramfs..."
+
+    # avoid leftover temp file
+    cleanup() {
+        rm -f "$CACHE_PATH.tmp"
+    }
+    trap cleanup EXIT
+
+    mkdir -p "/var/cache/proxmox-backup"
+    cp "$INST_PATH/initramfs.img" "$CACHE_PATH.tmp"
+
+    # cpio uses passed in path as offset inside the archive as well, so we need
+    # to be in the same dir as the daemon binary to ensure it's placed in /
+    ( cd "$INST_PATH"; \
+        printf "./proxmox-restore-daemon" \
+        | cpio -o --format=newc -A -F "$CACHE_PATH.tmp" )
+    mv -f "$CACHE_PATH.tmp" "$CACHE_PATH"
+
+    trap - EXIT
+}
+
+case "$1" in
+    configure)
+        # in case restore daemon was updated
+        update_initramfs
+    ;;
+
+    triggered)
+        if [ "$2" = "pbs-file-restore-initramfs" ]; then
+            # in case base-image was updated
+            update_initramfs
+        else
+            echo "postinst called with unknown trigger name: \`$2'" >&2
+        fi
+    ;;
+
+    abort-upgrade|abort-remove|abort-deconfigure)
+    ;;
+
+    *)
+        echo "postinst called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+exit 0
-- 
2.20.1






More information about the pbs-devel mailing list