]> git.ipfire.org Git - thirdparty/dracut.git/blobdiff - 51-dracut-rescue-postinst.sh
add support for creating secureboot signed UEFI images
[thirdparty/dracut.git] / 51-dracut-rescue-postinst.sh
index 21208a441d6c30c325805b387a360460d9c67f45..67f5b7174b790f51bc092d3f878cc5b50bbf0eaf 100755 (executable)
@@ -1,6 +1,4 @@
 #!/bin/bash
-# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
-# ex: ts=8 sw=4 sts=4 et filetype=sh
 
 export LANG=C
 
@@ -8,10 +6,20 @@ KERNEL_VERSION="$1"
 KERNEL_IMAGE="$2"
 
 [[ -f /etc/os-release ]] && . /etc/os-release
+
+if [[ ! -f /etc/machine-id ]] || [[ ! -s /etc/machine-id ]]; then
+    systemd-machine-id-setup
+fi
+
 [[ -f /etc/machine-id ]] && read MACHINE_ID < /etc/machine-id
 
-INITRDFILE="/boot/initramfs-${MACHINE_ID}-rescue.img"
-[[ -f $INITRDFILE ]] && exit 0
+[[ $MACHINE_ID ]] || exit 1
+[[ -f $KERNEL_IMAGE ]] || exit 1
+
+INITRDFILE="/boot/initramfs-0-rescue-${MACHINE_ID}.img"
+NEW_KERNEL_IMAGE="${KERNEL_IMAGE%/*}/vmlinuz-0-rescue-${MACHINE_ID}"
+
+[[ -f $INITRDFILE ]] && [[ -f $NEW_KERNEL_IMAGE ]] && exit 0
 
 dropindirs_sort()
 {
@@ -43,15 +51,17 @@ done
 
 [[ $dracut_rescue_image != "yes" ]] && exit 0
 
-dracut --no-hostonly  -a "rescue" "$INITRDFILE" "$KERNEL_VERSION"
-((ret+=$?))
-
-cp "$KERNEL_IMAGE" "${KERNEL_IMAGE%/*}/vmlinuz-${MACHINE_ID}-rescue"
-((ret+=$?))
+if [[ ! -f $INITRDFILE ]]; then
+    dracut --no-hostonly -a "rescue" "$INITRDFILE" "$KERNEL_VERSION"
+    ((ret+=$?))
+fi
 
-KERNEL_IMAGE="${KERNEL_IMAGE%/*}/vmlinuz-${MACHINE_ID}-rescue"
+if [[ ! -f $NEW_KERNEL_IMAGE ]]; then
+    cp --reflink=auto "$KERNEL_IMAGE" "$NEW_KERNEL_IMAGE"
+    ((ret+=$?))
+fi
 
-new-kernel-pkg --install "$KERNEL_VERSION" --kernel-image "$KERNEL_IMAGE" --initrdfile "$INITRDFILE" --banner "$PRETTY_NAME Rescue"
+new-kernel-pkg --install "$KERNEL_VERSION" --kernel-image "$NEW_KERNEL_IMAGE" --initrdfile "$INITRDFILE" --banner "$NAME $VERSION_ID Rescue $MACHINE_ID"
 
 ((ret+=$?))