#!/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"
    CACHE_PATH_DBG="/var/cache/proxmox-backup/file-restore-initramfs-debug.img"

    # cleanup first, in case proxmox-file-restore was uninstalled since we do
    # not want an unuseable image lying around
    rm -f "$CACHE_PATH"

    if [ ! -f "$INST_PATH/initramfs.img" ]; then
        echo "proxmox-backup-restore-image is not installed correctly, skipping update" >&2
        exit 0
    fi

    echo "Updating file-restore initramfs..."

    # avoid leftover temp file
    cleanup() {
        rm -f "$CACHE_PATH.tmp" "$CACHE_PATH_DBG.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"

    if [ -f "$INST_PATH/initramfs-debug.img" ]; then
        echo "Updating file-restore debug initramfs..."
        cp "$INST_PATH/initramfs-debug.img" "$CACHE_PATH_DBG.tmp"
        ( cd "$INST_PATH"; \
            printf "./proxmox-restore-daemon" \
            | cpio -o --format=newc -A -F "$CACHE_PATH_DBG.tmp" )
        mv -f "$CACHE_PATH_DBG.tmp" "$CACHE_PATH_DBG"
    fi

    trap - EXIT
}

case "$1" in
    configure)
        # in case restore daemon was updated
        update_initramfs
    ;;

    triggered)
        if [ "$2" = "proxmox-backup-restore-image-update" ]; 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