私の目的のために、私はスクリプトを実行しているすべてのコンピュータのハードドライブにカスタム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.efi
Microsoft やシステムメーカーの署名がないからです。
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.efi
grubx64.efi
grubx64.efi