DebianをインストールするスクリプトにUEFIの問題があり、コンピュータ全体で一貫性のない動作があります。

DebianをインストールするスクリプトにUEFIの問題があり、コンピュータ全体で一貫性のない動作があります。

私の目的のために、私はスクリプトを実行しているすべてのコンピュータのハードドライブにカスタムDebianシステムを自動的にインストールするスクリプトを書いています。このスクリプトは、すべてのライブLinuxディストリビューションで使用するように設計されています。

私はDebianのプレハブについて知っています。残念ながら、この場合、プレハブは実行可能なソリューションではありません。

スクリプトが機能します。しかし、一貫して動作しません。一部のコンピュータ(2011 Macbook Airなど)では、新しいEFI設定が問題なく更新されます。ただし、一部のコンピュータ(特に最新のDellノートブック)では、BIOSに移動して手動で\EFI\debian\grubx64.efiファイルを追加する必要があります。

ほとんどの最新のUEFIシステムで動作するように、次のスクリプトをどのように変更しますか?

efibootmgr以下のコマンドを変更する必要があるかもしれません。

#!/bin/bash

# Preliminary commands
set -e

echo "Available disks:"

current_disk=$(df / | awk 'NR==2 {print $1}')
for disk in $(lsblk -dnro NAME,TYPE | awk '$2=="disk" {print $1}'); do
if [ "$disk" != "${current_disk#/dev/}" ]; then
    size=$(lsblk -dnro SIZE "/dev/$disk")
    echo "/dev/$disk: $size"
fi
done

read -p "Enter the disk you want to install Debian on (e.g. /dev/sda): " disk

mkdir -p /mnt
sgdisk --zap-all "$disk" > /dev/null
parted "$disk" mklabel gpt
parted "$disk" mkpart ESP fat32 0% 512MB
parted "$disk" mkpart primary ext4 512MB 100%

# Set up main partition
yes | mkfs.ext4 "${disk}2"
mount "${disk}2" /mnt

# Set up EFI partition
yes | mkfs.fat -F32 "${disk}1"
mkdir -p /mnt/efi
mount "${disk}1" /mnt/efi

debootstrap --arch=amd64 buster /mnt http://ftp.us.debian.org/debian/

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

# Chroot to set up grub
chroot /mnt /bin/bash << "EOT"
apt update -y
apt install -y linux-image-amd64 grub-efi-amd64
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=debian --recheck --no-floppy
update-grub
EOT

# Set the path to your .EFI file
efi_file="\EFI\debian\grubx64.efi"
bootnum=$(efibootmgr -v | grep "Boot" | awk '{print $1}' | sed 's/Boot//g' | sort -n | tail -1 | awk '{print $1+1}')
efibootmgr -c -d "$disk" -p 1 -L "Debian" -l "${efi_file}" -b "${bootnum}"
efibootmgr -o "${bootnum}"

# Unmount bindings
umount -l /mnt/sys
umount -l /mnt/proc
umount -l /mnt/dev

# Unmount filesystems
umount -l /mnt/efi
umount -l /mnt

reboot

答え1

最新のシステムはデフォルトでセキュアブートが有効になっている傾向があり、grubx64.efi工場出荷時の設定でシステムから直接起動するには、明示的にホワイトリストに追加する必要があります。 Debian はgrubx64.efiMicrosoft やシステムメーカーの署名がないからです。

BIOS設定に行き、手動でgrubx64.efi起動を設定すると、ソフトウェアによって(簡単に)中断できない直接ユーザー対話で使用されるように明示的に指定されたため、ファームウェアは自動的にホワイトリストに追加できます。

おそらく行を変更する必要があると思います。

apt install -y linux-image-amd64 grub-efi-amd64

到着

apt install -y linux-image-amd64 grub-efi-amd64 grub-efi-amd64-signed shim-signed 

これにより、関連するすべてのGRUBモジュールが組み込まれているバージョンがインストールされますgrubx64.efi(セキュアブートはGRUBがモジュールをロードできないためです。shimx64.efiマイクロソフト署名で。どちらのファイルも再現可能なバイナリでビルドされるので、必要に応じてビルドプロセスを直接再実行して、まったく同じバイナリを得ることができ、そのコードにマルウェアがないことを確認できます。

-signedこれらのパッケージがインストールされたらgrub-install自動的に使用する必要がありますが、確実にするには、パッケージにオプションを追加して明示的--uefi-secure-bootに使用するように指定できます。

これにより、セキュアブートを確認し、必要に応じてDebianのセキュアブート証明書を非継続的にホワイトリストに追加してからefi_file=自動的にロードします。システムでセキュアブートが無効になっている場合は、セキュアブートのみをロードして実行します。\EFI\debian\shimx64.efigrubx64.efigrubx64.efi

関連情報