Debian을 설치하는 스크립트에 UEFI 문제가 있고 컴퓨터 전체에서 일관되지 않은 동작이 있습니다.

Debian을 설치하는 스크립트에 UEFI 문제가 있고 컴퓨터 전체에서 일관되지 않은 동작이 있습니다.

내 목적을 위해 나는 스크립트를 실행하는 모든 컴퓨터의 하드 드라이브에 사용자 정의 데비안 시스템을 자동으로 설치하는 스크립트를 작성하고 있습니다. 이 스크립트는 모든 라이브 Linux 배포판에서 사용되도록 설계되었습니다.

저는 데비안 프리팹에 대해 알고 있습니다. 불행하게도 이 경우 프리팹은 실행 가능한 솔루션이 아닙니다.

스크립트가 작동합니다. 그러나 일관되게 작동하지 않습니다. 일부 컴퓨터(예: 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공장 기본 구성으로 시스템에서 직접 부팅하려면 명시적으로 화이트리스트에 추가해야 합니다. 데비안은 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가 모듈을 로드하지 못하기 때문입니다. GRUB 모듈은 PE-COFF 바이너리가 아니라 ELF 바이너리이므로 보안 부팅 펌웨어에서 이를 확인할 수 없습니다). shimx64.efiMicrosoft 서명으로. 두 파일 모두 재현 가능한 바이너리로 빌드되므로 원하는 경우 빌드 프로세스를 직접 다시 실행하여 정확히 동일한 바이너리를 얻을 수 있으므로 해당 코드에 맬웨어가 없는지 확인할 수 있습니다.

-signed이러한 패키지가 설치 되면 grub-install자동으로 사용해야 하지만 확실하게 하려면 패키지에 옵션을 추가하여 --uefi-secure-boot명시적으로 사용하도록 지정할 수 있습니다.

이렇게 사용하면 보안 부팅을 확인하고 필요한 경우 데비안의 보안 부팅 인증서를 비지속적으로 화이트리스트에 추가한 다음 efi_file=자동 으로 로드합니다. 시스템에서 보안 부팅이 비활성화된 경우 보안 부팅만 로드 하고 실행합니다.\EFI\debian\shimx64.efigrubx64.efigrubx64.efi

관련 정보