summary refs log tree commit diff
path: root/os/etc/kernel/postinst.d/efi.sh.bak
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2023-09-25 11:56:34 +0200
committerRobert Günzler <r@gnzler.io>2023-09-25 11:56:34 +0200
commitf5c219983c0f60a07f1bd52b6f6071e86f35455e (patch)
treeb7520a02b9822481f29aea4ccb404744a73414b1 /os/etc/kernel/postinst.d/efi.sh.bak
parent91ba318df1ff9b04d08af373ae904f61a91bf489 (diff)
add os config
Signed-off-by: Robert Günzler <r@gnzler.io>
Diffstat (limited to 'os/etc/kernel/postinst.d/efi.sh.bak')
-rw-r--r--os/etc/kernel/postinst.d/efi.sh.bak49
1 files changed, 49 insertions, 0 deletions
diff --git a/os/etc/kernel/postinst.d/efi.sh.bak b/os/etc/kernel/postinst.d/efi.sh.bak
new file mode 100644
index 0000000..5d63729
--- /dev/null
+++ b/os/etc/kernel/postinst.d/efi.sh.bak
@@ -0,0 +1,49 @@
+#!/bin/sh
+set -eu
+
+VERSION=$1
+BOOTDIR=$(dirname "$2")
+
+label="Gentoo Linux"
+efiPart=/boot/efi
+efiDir="/EFI/Gentoo"
+
+mount "${efiPart}" || true
+mount -o remount,rw /sys/firmware/efi/efivars
+trap '{ umount ${efiPart}; mount -o remount,ro /sys/firmware/efi/efivars; }' EXIT
+
+efiKernel="vmlinuz-${VERSION}.efi"
+efiInitramfs="initramfs-${VERSION}.img"
+
+while read -r line; do
+	id="${line:4:4}"
+	path=$(egrep -o 'File\([^(]*\)' <<<"${line}")
+	path="${path:5:-1}"
+	path="${path//\\/\/}"
+	path=$(basename "${path}")
+	kernel=$path
+	initramfs=${path//boot/initramfs}
+	initramfs=${initramfs//efi/img}
+
+	# cleanup old boot entries
+	efibootmgr --delete-bootnum --bootnum "${id}"
+	rm -v "${efiPart}${efiDir}/${kernel}" || true
+	rm -v "${efiPart}${efiDir}/${initramfs}" || true
+
+done < <(efibootmgr -v | grep '^Boot0[^ ]*.*HD*' | grep "$label")
+
+cp -vf "${BOOTDIR}/vmlinuz-${VERSION}" "${efiPart}${efiDir}/${efiKernel}"
+cp -vf "${BOOTDIR}/initramfs-${VERSION}.img" "${efiPart}${efiDir}/${efiInitramfs}"
+
+cp -vf "${BOOTDIR}/vmlinuz-${VERSION}.old" "${efiPart}${efiDir}/${efiKernel}.old"
+cp -vf "${BOOTDIR}/initramfs-${VERSION}.img.old" "${efiPart}${efiDir}/${efiInitramfs}.old"
+
+efiDir="${efiDir,,}" # make lowercase
+efiDir="${efiDir//\//\\}" # map to backslash seperators
+
+# create in reverse order so new kernel ends up at the top
+efibootmgr --create --disk /dev/nvme0n1 --part 1 --label "$label (old)" --loader "${efiDir}\\${efiKernel}.old" -u "initrd=${efiDir}\\${efiInitramfs}.old"
+efibootmgr --create --disk /dev/nvme0n1 --part 1 --label "$label" --loader "${efiDir}\\${efiKernel}" -u "initrd=${efiDir}\\${efiInitramfs}"
+
+echo
+echo "done."