前情提要

上一篇 Archboot 实现 Secure Boot 自动配置的办法,觉得还是不够简单,而且我现在也不需要通过 Grub 引导 Windows 和其他系统,遂有本文。

正文

在现有系统上抛弃Grub,拥抱统一内核映像(UKI)并启用 Secure Boot

我所使用的内核为 linux-zen,下面的配置请注意修改

修改内核命令行参数

创建/etc/kernel/cmdline如下:

root=UUID=系统的分区UUID rw splash loglevel=3

注:Btrfs分区可能需要添加 rootflags=subvol=XXX 的挂载参数1,可以在grub生成的文件中寻找

修改 mkinitcpio 预设

编辑/etc/mkinitcpio.d/linux-zen.preset,取消 "PRESET_image=XXX" "PRESET_uki=XXX"的注释,并且修改存储位置,保存到 EFI 分区内

# mkinitcpio preset file for the 'linux-zen' package

ALL_config="/etc/mkinitcpio.conf"
ALL_kver="/boot/vmlinuz-linux-zen"

PRESETS=('default' 'fallback')

###我的EFI分区挂载在/boot下,故作此修改###
#default_config="/etc/mkinitcpio.conf"
default_image="/boot/initramfs-linux-zen.img"
default_uki="/boot/EFI/Linux/arch-linux-zen.efi"
#default_options="--splash /usr/share/systemd/bootctl/splash-arch.bmp"

#fallback_config="/etc/mkinitcpio.conf"
fallback_image="/boot/initramfs-linux-zen-fallback.img"
fallback_uki="/boot/EFI/Linux/arch-linux-zen-fallback.efi"
fallback_options="-S autodetect"

构建 UKI

确保 EFI 目录已挂载,运行:

mkdir -p EFI_MOUNT_POINT/EFI/Linux
mkinitcpio -p linux-zen

添加引导

遵循一切从简的理念,使用 efibootmgr 添加引导

efibootmgr --create \
    -d /dev/nvmeXXX -p 1 \
    --label "Arch Linux" \
    --loader "EFI/Linux/arch-linux-zen.efi"
#nvmeXXX EFI分区

签名 UKI

如果此时已经配置好 sbctl 和 Secure Boot,可直接通过 sbctl sign -s /EFI_MOUNT_POINT/EFI/Boot/bootx64.efi 结束本文

至此,您可以抛弃 Grub 了,享受快人一步的开机😏

通过以下命令删除不再使用的自动签名

sbctl remove-file /boot/grub/x86_64-efi/grub.efi

如果还没有安装 sbctl,请继续阅读

设置 Secure Boot

进入设备 BIOS,将 Secure Boot 进入设置模式 Setup Mode

进入Archlinux,安装 sbctl 包,运行

sbctl enroll-keys -m
sbctl sign -s /EFI_MOUNT_POINT/EFI/Boot/bootx64.efi

重启至 BIOS 开启 Secure Boot

至此,UKI + sbctl 最简单 Secure Boot 设置就大功告成了