summary refs log tree commit diff
path: root/os/etc/kernel/postinst.d
diff options
context:
space:
mode:
Diffstat (limited to 'os/etc/kernel/postinst.d')
-rw-r--r--os/etc/kernel/postinst.d/.keep_sys-kernel_installkernel-gentoo-00
l---------os/etc/kernel/postinst.d/efi.sh1
-rw-r--r--os/etc/kernel/postinst.d/efi.sh.bak49
3 files changed, 50 insertions, 0 deletions
diff --git a/os/etc/kernel/postinst.d/.keep_sys-kernel_installkernel-gentoo-0 b/os/etc/kernel/postinst.d/.keep_sys-kernel_installkernel-gentoo-0
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/os/etc/kernel/postinst.d/.keep_sys-kernel_installkernel-gentoo-0
diff --git a/os/etc/kernel/postinst.d/efi.sh b/os/etc/kernel/postinst.d/efi.sh
new file mode 120000
index 0000000..1eb1c39
--- /dev/null
+++ b/os/etc/kernel/postinst.d/efi.sh
@@ -0,0 +1 @@
+../efi.sh
\ No newline at end of file
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."