blob: 5d63729e4a6198f609d24be2fe8608559d261e27 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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."
|