Debian 安装脚本可以工作,但 BIOS 不会将我的 UEFI 条目添加到启动列表中

Debian 安装脚本可以工作,但 BIOS 不会将我的 UEFI 条目添加到启动列表中

我正在使用 Dell Latitude 7480。我编写了一个 bash 脚本,旨在从实时 Linux 发行版运行,其目的是擦除/dev/sda并安装基本 Debian 系统。

这是脚本:

#!/bin/bash

# Set up partitions
echo "Set up partitions..."
sgdisk --zap-all /dev/sda
parted /dev/sda mklabel gpt
parted /dev/sda mkpart primary ext4 512MB 100%
parted /dev/sda mkpart primary fat32 0% 512MB
yes | mkfs.ext4 /dev/sda1
mount /dev/sda1 /mnt

echo "Setting up base system..."
debootstrap --arch=amd64 buster /mnt http://ftp.us.debian.org/debian/ > /dev/null 2>&1

# Set up bindings
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys

# Set up EFI partition
yes | mkfs.fat -F32 /dev/sda2
mkdir /mnt/boot/efi
mount /dev/sda2 /mnt/boot/efi

# Chroot to set up grub
chroot /mnt /bin/bash << "EOT"
echo "deb http://deb.debian.org/debian/ stable main contrib non-free" >> /etc/apt/sources.list
echo "deb-src http://deb.debian.org/debian/ stable main contrib non-free" >> /etc/apt/sources.list
dpkg --add-architecture i386
apt update -y
apt upgrade -y
apt install -y linux-image-amd64 grub-efi-amd64
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian --recheck --no-floppy
update-grub
EOT

到目前为止,它似乎运行良好。但是,我的戴尔工作站迫使我进入 BIOS 并将grubx64.efi文件手动添加到启动列表中。我需要能够为其他人自动执行此安装,这意味着我需要能够避免此步骤。

我可以在上面的 bash 脚本中添加或更改什么,以便自动将新创建的.efi注册表注册为计算机 BIOS 下的配置文件?

答案1

为了将数据写入 UEFI,/sys/firmware/efi/efivars应将其挂载在 chroot 中。

所以假设埃菲瓦尔斯已经安装在主机中:

$ findmnt /sys/firmware/efi/efivars 
TARGET                    SOURCE   FSTYPE   OPTIONS
/sys/firmware/efi/efivars efivarfs efivarfs rw,nosuid,nodev,noexec,relatime

这:

mount --bind /sys /mnt/sys

应至少增加到:

mount --bind /sys /mnt/sys
mount --bind /sys/firmware/efi/efivars /mnt/sys/firmware/efi/efivars

所以grub-install(以及efibootmgr或任何类似的工具)可以在 chroot 中使用它来读取或写入 UEFI 启动项。

grub-install如果这还不够,那么除了 UEFI 启动项应该指向的文件之外,还可以在 EFI 文件系统中写入一个额外的 EFI 启动文件。

添加--force-extra-removable选项,如中所述Debian 维基。因此给出:

grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian --recheck --no-floppy --force-extra-removable

这将写入一个即使没有 UEFI 启动条目也应该使用的附加条目。

如果确实需要这样做,为了确保它在升级时保持这种状态,还应该发出(在 chroot 中):

echo 'grub-efi-amd64        grub2/force_efi_extra_removable boolean true' | debconf-set-selections

相关内容