전체 디스크(부팅도 가능) luks2 암호화 grub2, lvm UEFI로 데비안 12를 설치하는 방법은 무엇입니까?

전체 디스크(부팅도 가능) luks2 암호화 grub2, lvm UEFI로 데비안 12를 설치하는 방법은 무엇입니까?

SSD가 장착된 노트북입니다. 데비안 설치 프로그램은 기본적으로 luks2와 함께 작동합니다. 최신 grub 버전은 이를 지원하지 않으므로 이를 사용하면 설치의 grub 부분이 중단됩니다.아르곤 2id PBKDF. argon2id는 luks1 방식보다 훨씬 낫지만 후자는 기본적으로 작동해야 합니다. (데비안은 grub을 제외하고는 문제없이 설치됩니다.)

나는 몇 명을 팔로우했습니다.동영상라이브 USB에서 데비안을 설치하세요. (debian-live-12.1.0-amd64-lxqt.iso)

내 디스크 설정은 1GB EFI 파티션을 갖는 것입니다. (이것은 아마도 너무 클 것입니다...) LVM이 포함된 crypt라는 암호화된 파티션(실제로는 필요하지 않을 수 있음)과 LVM 내에 vg-1 볼륨 그룹과 vg1-debian이 있습니다. 내 데이터가 저장되는 ext4 루트 파티션과 vg1-store ext4 파티션.

NAME                MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
nvme0n1             259:0    0 238.5G  0 disk 
├─nvme0n1p1         259:1    0     1G  0 part  /boot/efi
└─nvme0n1p2         259:2    0   215G  0 part 
  └─nvme0n1p2_crypt 253:0    0   215G  0 crypt
    ├─vg1-debian    253:1    0  46.6G  0 lvm   /
    └─vg1-store     253:2    0 167.6G  0 lvm   /media/user/store

답변1

부인 성명

  • 데이터를 백업하세요!
  • 다른 컴퓨터를 사용하는 것이 도움이 됩니다!
  • 첫 번째 시도에서 모든 것이 잘 작동하더라도 시간이 좀 걸릴 것입니다!
  • 시작 시 암호화된 드라이브를 두 번 잠금 해제해야 합니다.
  • UEFI 모드 설치만 시도했습니다.

가이드

따라서 이 문제에 대한 해결책은 라이브 USB를 사용하고, 파티션을 생성하고, 데비안을 설치하고, grub을 건너뛰고, 라이브 USB를 사용하여 부팅하고, chroot새 설치를 입력하고 패치된 grub을 컴파일 및 설치하는 것입니다.
너무 지루해서 대본을 썼습니다.
내가 사용하는 이름은 gil_install.sh다음 과 같습니다

#! /usr/bin/env bash

script_rel_path="/home/tempuser"
script_full_path="$script_rel_path/"$(basename "$0")

# choose which part of the script should run based on cli argument
# no argument case
if [ -z "$1" ] ; then

    # assuming installed debian 12 system is mounted to /mnt
    mkdir "/mnt$script_rel_path"
    cp "$0" "/mnt$script_full_path"

    # mount essentials for chroot
    # https://wiki.debian.org/chroot
    mount --bind /dev /mnt/dev/
    mount --bind /dev/pts /mnt/dev/pts
    mount --bind /proc /mnt/proc
    mount --bind /sys  /mnt/sys
    mount --bind /run  /mnt/run

    # chroot and start the next part of this script from within the chroot
    # couldn't get this part to work right
    #chroot /mnt /bin/bash -i "$script_full_path 1"
    
    echo "After chroot, enter command: cd $script_rel_path; bash $script_full_path 1"
    chroot /mnt
fi

if [ "$1" == 1 ] ; then

    echo "Installing build packages"
    apt install -y gnulib libdevmapper-dev libfreetype-dev gettext autogen git bison help2man texinfo efibootmgr libisoburn1 libisoburn-dev mtools pkg-config m4 libtool automake autoconf flex fuse3 libfuse3-dev gawk

    # mawk gives make error, so using gawk
    mv /usr/bin/mawk /usr/bin/mawk_bu
    ln -s /usr/bin/gawk /usr/bin/mawk

    # git clone needed repos
    git clone https://git.savannah.gnu.org/git/grub.git
    cd grub
    git clone https://git.savannah.nongnu.org/git/grub-extras.git
    git clone https://aur.archlinux.org/grub-improved-luks2-git.git
    git clone https://git.savannah.gnu.org/git/gnulib.git

    cp "$0" "./"$(basename "$0")

    /bin/bash -i $(basename "$0") 2
fi

if [ "$1" == 2 ] ; then

    echo "Compiling grub"

    # This part is copied from grub-improved-luks2-git/PKGBUILD
    # It patches grub and compiles and installes it

    patch -Np1 -i ./grub-improved-luks2-git/add-GRUB_COLOR_variables.patch

    # Patch grub-mkconfig to detect Arch Linux initramfs images.
    patch -Np1 -i ./grub-improved-luks2-git/detect-archlinux-initramfs.patch

    # argon2
    patch -Np1 -i ./grub-improved-luks2-git/argon_1.patch
    patch -Np1 -i ./grub-improved-luks2-git/argon_2.patch
    patch -Np1 -i ./grub-improved-luks2-git/argon_3.patch
    patch -Np1 -i ./grub-improved-luks2-git/argon_4.patch
    patch -Np1 -i ./grub-improved-luks2-git/argon_5.patch

    # make grub-install work with luks2
    patch -Np1 -i ./grub-improved-luks2-git/grub-install_luks2.patch

    # Fix DejaVuSans.ttf location so that grub-mkfont can create *.pf2 files for starfield theme.
    sed 's|/usr/share/fonts/dejavu|/usr/share/fonts/dejavu /usr/share/fonts/TTF|g' -i "configure.ac"

    # Modify grub-mkconfig behaviour to silence warnings FS#36275
    sed 's| ro | rw |g' -i "util/grub.d/10_linux.in"

    # Modify grub-mkconfig behaviour so automatically generated entries read 'Arch Linux' FS#33393
    sed 's|GNU/Linux|Linux|' -i "util/grub.d/10_linux.in"

    # Pull in latest language files
    #[ ! -z "$GRUB_ENABLE_NLS" ] && ./linguas.sh

    # Remove lua module from grub-extras as it is incompatible with changes to grub_file_open
    # http://git.savannah.gnu.org/cgit/grub.git/commit/?id=ca0a4f689a02c2c5a5e385f874aaaa38e151564e
    rm -rf ./grub-extras/lua

    export GRUB_CONTRIB=./grub-extras
    export GNULIB_SRCDIR=./gnulib
    CFLAGS=${CFLAGS/-fno-plt}

    ./bootstrap
    mkdir ./build_x86_64-efi
    cd ./build_x86_64-efi
    ../configure --with-platform=efi --target=x86_64 --prefix="/usr" --sbindir="/usr/bin" --sysconfdir="/etc" --enable-boot-time --enable-cache-stats --enable-device-mapper --enable-grub-mkfont --enable-grub-mount --enable-mm-debug --disable-silent-rules --disable-werror  CPPFLAGS="$CPPFLAGS -O2"
    make

    cd ..
    # now we should be in /home/tempuser/grub (on the mounted filesystem)
    /bin/bash -i $(basename "$0") 3
fi

if [ "$1" == 3 ] ; then

    echo "Installing grub"
#    exit

    cd ./build_x86_64-efi
    make DESTDIR=/ bashcompletiondir=/usr/share/bash-completion/completions install
    install -D -m0644 ../grub-improved-luks2-git/grub.default /etc/default/grub

fi

라이브 USB를 실행한 후 암호화된 볼륨을 엽니다(변경하세요!)

sudo cryptsetup luksOpen /dev/nvme0n1p2 crypt

/mnt에 마운트하세요(파티션 이름 변경!)

sudo mount /dev/mapper/vg1-debian /mnt

efi 파티션을 /mnt/boot/efi에 마운트합니다(파티션 이름을 변경하세요!)

sudo mkdir /mnt/boot/efi
sudo mount /dev/nvme0n1p1 /mnt/boot/efi

옵션: Debian grub 구성을 백업합니다
(또는 이를 사용하여 내 스크립트에서 해당 행을 주석 처리합니다)
(패치에 있는 것은 Arch용이지만 작동할 것입니다.)
(기본 Debian 버전이 더 나을 수도 있지만 아직은 그렇지 않습니다. 그것을 시도했다.)

sudo cp /etc/default/grub /etc/default/grub_bu

내 스크립트를 다운로드하고 시작하십시오.

sudo bash gil_install.sh

을 입력한 후에는 chroot명령을 수동으로 복사하고 실행해야 합니다.
(스크립트에 있습니다. /터미널로 인쇄하세요.)
그 후 스크립트가 실행되어 패치된 grub을 만들고 설치해야 합니다.
CLI 매개변수를 사용하여 여러 지점에서 스크립트를 계속 실행할 수 있습니다.
(스크립트 내부를 참조하세요.)
스크립트는 여러 디렉터리에 자신을 복사하므로 편집하거나 실행할 디렉터리에 주의하세요.

바라보다:https://wiki.archlinux.org/title/GRUB#LUKS2
chroot 내부:
grub에서 cryptodisk를 활성화합니다
(GRUB_ENABLE_CRYPTODISK=y 행 주석 해제)
(Arch를 Debian으로 변경...)

nano /etc/default/grub

grub-mkconfig 도구를 사용하여 /boot/grub/grub.cfg를 생성합니다:

grub-mkconfig -o /boot/grub/grub.cfg

efi 파티션에 grub 설치

grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB

/boot/grub/grub-pre.cfg 생성

nano /boot/grub/grub-pre.cfg
set crypto_uuid=3b411d89-xxxx-xxxx-xxxx-xxxxxxxxxxxx  
cryptomount -u $crypto_uuid
set root=lvm/vg1-debian
set prefix=($root)/boot/grub
insmod normal
normal

EFI 이미지를 만듭니다.

grub-mkimage -p /boot/grub -O x86_64-efi -c /boot/grub/grub-pre.cfg -o /tmp/grubx64.efi luks2 part_gpt cryptodisk gcry_rijndael argon2 gcry_sha256 ext2 lvm

ESP에 복사:

install -v /tmp/grubx64.efi /boot/efi/EFI/GRUB/grubx64.efi

EFI 항목 추가:

sudo efibootmgr -c -d /dev/nvme0n1 -p 1 -L "debian" -l "\EFI\GRUB\grubx64.efi"

이 모든 것과 약간의 efibootmgr"마법"이 끝나면 새로 설치한 데비안 12를 부팅할 수 있습니다.
도움이 되었기를 바랍니다.
아마 저는 이것을 변호하기 위해 여기에 있지는 않을 것입니다. 죄송합니다.
(나는 이것 때문에 너무 많은 시간을 낭비했다.)

관련 정보