【笔记】使用refind引导的Manjaro和Win10双启动的Secure Boot配置
个人操作笔记,转载请注明出处。
——by realasking
最近,不知什么原因,导致更新系统后grub-fedora
这个能支持中文的grub
引导器不能正常工作了,只要使用更新的内核,就提示UUID
错误,无论是休眠还是根的都找不到,无论用USB Live
启动重装grub
还是直接在系统中通过重装grub-fedora
这个包,都如此。而将其更换为标准的grub
则会在启动时提示找不到一个中文的组件,仔细检查也未能找到原因。为了节约时间,决定更换一个启动器。
refind的安装
bash
pacman -S refind-efi refind-drivers refind-theme-maia refind-install
配置文件
位置在:/boot/efi/EFI/refind/refind.conf
内容为:
bash timeout 20 resolution 1920 1080 use_graphics_for linux,windows #确保使用自定义的,才能保证内核参数的传递 scanfor manual,external #禁止扫描一些多余、重复的内容 dont_scan_dirs boot,EFI/Manjaro,EFI/Boot menuentry "Manjaro Linux" { #manjaro图片是从maia主题中拷贝过去的 icon EFI/refind/icons/os_manjaro.png #volume后面跟的是part guid volume 0b6e08ea-62b7-4ba1-9c41-4ba41a6ec29f loader /boot/vmlinuz-4.19-x86_64 initrd /boot/initramfs-4.19-x86_64.img #preload的initrd,如amd-ucode等,需要添加在options的最后,空格要用\转义 options "ro root=UUID=根分区的UUID rw quiet apparmor=1 security=apparmor resume=UUID=SWAP的UUID udev.log_priority=3 audit=0 acpi_osi=Windows\ 2015 reboot=kbd ivrs_ioapic[32]=00:14.0 amd_iommu=on idle=nomwait bootsplash.bootfile=bootsplash-themes/manjaro/bootsplash initrd=/boot/amd-ucode.img" } menuentry "Windows 10" { loader \EFI\Microsoft\Boot\bootmgfw.efi } include refind-theme-dark/theme.conf
更换主题
bash git clone https://github.com/samuelmeuli/refind-theme-dark.git sudo su cp refind-theme-dark /boot/efi/EFI/refind
然后编辑refind-theme-dark/theme.conf
文件,删去其中的所有themes/
再编辑/boot/efi/EFI/refind/refind.conf
文件,将最后一行改为:
makefile include refind-theme-dark/theme.conf
再将背景图片用gimp
修改为全黑,以保证windows
和linux
启动时的效果
BIOS设置
重启电脑,按F2
进入BIOS
设置,在Secure
中关闭安全启动、重置Key
、进入自定义设置模式,然后按F10
保存退出
自定义安全启动
各种安全文件的建立
参考如何在 Linux 系统启用 UEFI 的 Secure Boot
bash mkdir mok2 cd mok2 echo $(uuidgen) >guid cat guid echo 77fa9abd-0359-4d32-bd60-28f4e78f784b >ms-guid openssl req -new -x509 -newkey rsa:2048 -subj "/CN=Platform Key/" -keyout PK.key -out PK.crt -days 3650 -nodes -sha256 openssl req -new -x509 -newkey rsa:2048 -subj "/CN=Key Exchange Key/" -keyout KEK.key -out KEK.crt -days 3650 -nodes -sha256 openssl req -new -x509 -newkey rsa:2048 -subj "/CN=Database/" -keyout db.key -out db.crt -days 3650 -nodes -sha256 cert-to-efi-sig-list -g $(cat guid) PK.crt PK.esl cert-to-efi-sig-list -g $(cat guid) KEK.crt KEK.esl cert-to-efi-sig-list -g $(cat guid) db.crt db.esl curl -L http://go.microsoft.com/fwlink/?LinkID=321185 -o MSKEK.der curl -L http://go.microsoft.com/fwlink/?LinkID=321192 -o MSdbWPCA.der curl -L http://go.microsoft.com/fwlink/?LinkID=321194 -o MSdbUDSCA.der openssl x509 -in MSKEK.der -inform DER -out MSKEK.crt openssl x509 -in MSdbWPCA.der -inform DER -out MSdbWPCA.crt openssl x509 -in MSdbUDSCA.der -inform DER -out MSdbUDSCA.crt cert-to-efi-sig-list -g $(cat ms-guid) MSKEK.crt MSKEK.esl cert-to-efi-sig-list -g $(cat ms-guid) MSdbWPCA.crt MSdbWPCA.esl cert-to-efi-sig-list -g $(cat ms-guid) MSdbUDSCA.crt MSdbUDSCA.esl cat KEK.esl MSKEK.esl >realKEK.esl cat db.esl MSdbWPCA.esl MSdbUDSCA.esl >realDB.esl sign-efi-sig-list -k PK.key -c PK.crt PK PK.esl PK.esl.signed sign-efi-sig-list -k PK.key -c PK.crt KEK realKEK.esl realKEK.esl.signed sign-efi-sig-list -k KEK.key -c KEK.crt db realDB.esl realDB.esl.signed #manjaro默认挂载了efivarfs分区的 efi-updatevar -f PK.esl.signed PK efi-updatevar -f realKEK.esl.signed KEK efi-updatevar -f realDB.esl.signed db
签名过程
与前面参考过程的文章不同,使用refind
实现secure boot
时需要对多个文件签名,而不是使用grub
时那样仅对一个文件签名
bash
cp /boot/efi/EFI/refind/refind_x64.efi refind_x64.efi.origin sbsign --key db.key --cert db.crt --output refind_x64.efi.signed refind_x64.efi.origin cp refind_x64.efi.signed /boot/efi/EFI/refind/refind_x64.efi cp refind_x64.efi.signed /boot/efi/EFI/Boot/bootx64.efi cp /boot/efi/EFI/refind/drivers_x64/ext4_x64.efi ext4_x64.efi.origin sbsign --key db.key --cert db.crt --output ext4_x64.efi.signed ext4_x64.efi.origin cp ext4_x64.efi.signed /boot/efi/EFI/refind/drivers_x64/ext4_x64.efi cp /boot/vmlinuz-4.19-x86_64 vmlinuz-4.19-x86_64.origin sbsign --key db.key --cert db.crt --output vmlinuz-4.19-x86_64.signed vmlinuz-4.19-x86_64.origin cp vmlinuz-4.19-x86_64.signed /boot/vmlinuz-4.19-x86_64
后续
重启,进入BIOS
,打开Secure Boot
,然后就一切正常了。
这个方法也存在一个缺点,即每次更新内核后,都必须对内核再次签名,不如使用grub
时方便,不过refind
比grub
好看一点,而且我的机器上grub
出现问题时它能正常使用,暂且如此罢。