Зашифрованный мультибут USB / добавление cryptsetup в initrd

Вопрос или проблема

Я пытаюсь создать мультизагрузочный USB-накопитель для образов Debian, включая живую систему, netinst и DVD-1 iso.

Я дошел до создания разделов

  1. EFI fat32
  2. Boot luks2
  3. ISOs luks2

Затем я устанавливаю grub, нацеливаясь на EFI и загрузочные разделы, добавляю vmlinuz и initrd в загрузочный раздел вместе с пользовательским grub.cfg.

Grub успешно разблокирует загрузочный раздел, а затем запускает ядро. Однако на этом этапе я не могу заставить ядро разблокировать раздел ISOs, где находятся iso-образы.

Насколько я понимаю, файл initrd, загруженный с:

https://deb.debian.org/debian/dists/bookworm/main/installer-amd64/current/images/hd-media/

не включает поддержку cryptsetup, как и любой другой образ initrd, который я пробовал. Похоже, мне нужно редактировать или сделать свой собственный. Моя хост-система (тоже Debian) способна разблокировать раздел luks, так что это очевидно возможно, но я не знаю шагов, которые нужно предпринять, чтобы настроить это на USB-накопителе.

Мои grub.cfg menuentries выглядят примерно так:

# Обходная ошибка "недостаток памяти"
rmmod tpm

menuentry "Установка" {
   set isofile="/debian-${VERSION}-amd64-${installer}.iso"
   set options="cryptdevice=UUID=${cryptuuid}:luks root=/dev/mapper/luks quiet splash"
   linux /vmlinuz iso-scan/filename=$isofile $options
   initrd /initrd.img
}

menuentry "Живая" {
    loopback loop ($root)$isofile
    linux (loop)/live/vmlinuz boot=live findiso=$isofile
    initrd (loop)/live/initrd.img
}

На данный момент iso-scan не может найти iso-образ, и, похоже, что 3-й раздел никогда не разблокируется.

Я немного запутался с созданием пользовательского initrd и не знаю, с чего начать. Многие документы предполагают, что вы выполняете команды на локальной системе для локальной системы.

ИЗМЕНЕНИЕ:

Мне удалось добиться некоторого успеха, используя debootstrap, а затем chroot, установив несколько вещей, а затем используя mkinitramfs, однако он не загружается должным образом

Сдался, ожидая устройство корневой файловой системы. Общие проблемы:

ALERT! /dev/mapper/luks не существует. Переход к оболочке!

Ответ или решение

Создание многоцелевого USB-накопителя с шифрованием и поддержкой метода загрузки через GRUB, включая поддержку LUKS2 и cryptsetup, может быть сложной задачей. Поскольку вы уже создали структуру разделов и установили GRUB, давайте разобьем вашу задачу на несколько четких шагов для достижения успеха.

Шаг 1: Установка необходимых пакетов

Прежде всего, убедитесь, что на вашем Debian-системе установлены необходимые пакеты для работы с LUKS и создания initrd:

sudo apt update
sudo apt install cryptsetup initramfs-tools

Шаг 2: Создание пользовательского initrd

Поскольку стандартные initrd образы могут не включать поддержку cryptsetup, вы можете создать свой собственный initrd. Следуйте этим шагам:

  1. Настройка среды:
    Создайте временный каталог для монтирования системы с помощью debootstrap и перейдите в него:

    mkdir ~/custom_initrd
    cd ~/custom_initrd
    debootstrap --variant=minbase bookworm ./chroot http://deb.debian.org/debian/
  2. Пакеты для initramfs:
    Пройдите в chroot и установите необходимые пакеты для работы с шифрованием:

    sudo mount -o bind /dev ./chroot/dev
    sudo mount -o bind /proc ./chroot/proc
    sudo mount -o bind /sys ./chroot/sys
    sudo chroot ./chroot
    apt install cryptsetup
  3. Создание initramfs:
    Внутри chroot выполните команду для создания initramfs:

    update-initramfs -c -k all
    exit
  4. Копирование initrd:
    После выхода из chroot скопируйте созданный initrd в нужное место на USB-накопителе:

    cp ./chroot/boot/initrd.img-* /path/to/your/usb/boot/

Шаг 3: Обновление конфигурации GRUB

Теперь, когда у вас есть собственный initrd, обновите конфигурацию GRUB, добавив необходимые параметры:

menuentry "Install" {
   set isofile="/debian-${VERSION}-amd64-${installer}.iso"
   set options="cryptdevice=UUID=${cryptuuid}:luks root=/dev/mapper/luks quiet splash"
   linux /vmlinuz iso-scan/filename=$isofile $options
   initrd /boot/initrd.img
}

menuentry "Live" {
    set isofile="/debian-${VERSION}-amd64-${installer}.iso"
    loopback loop ($root)$isofile
    linux (loop)/live/vmlinuz boot=live findiso=$isofile
    initrd (loop)/live/initrd.img
}

Шаг 4: Проверка UUID и прав доступа

Убедитесь, что UUID для вашего зашифрованного раздела корректен. Вы можете проверить его с помощью команды:

blkid

Проверьте, что ваш USB-накопитель и другие необходимые устройства доступны и корректно монтируются. Если перед загрузкой GRUB, вы можете увидеть, что /dev/mapper/luks не существует, убедитесь, что полное имя устройства совпадает с тем, что вы указали в cryptdevice.

Шаг 5: Тестирование

Теперь вы можете протестировать загрузку с USB-накопителя. Убедитесь, что GRUB может разблокировать зашифрованные разделы, а затем что initrd корректно поддерживает cryptsetup и может осуществлять доступ к ISO-файлам.

Заключение

Создание зашифрованного многоцелевого USB-накопителя требует внимания к деталям и знания работы с загрузчиками и шифрованием. Пройдя предложенные шаги и убедившись в корректности настроек, вы сможете использовать ваш USB для установки Debian через GRUB и взаимодействия с различными зашифрованными образами.

Если у вас возникнут дальнейшие вопросы, не стесняйтесь задавать их!

Оцените материал
Добавить комментарий

Капча загружается...