UEFI + BIOS завантажувальний живий Debian stretch amd64 з наполегливістю


20

Вся інформація, яку я зараз знаходжу з цього приводу, недостатня для мого смаку. Це або застаріле, введене в оману або навіть неправильне, здається надмірно складним або не охоплює цього конкретного питання.

Цілі:

  • завантажувальний USB-накопичувач (підтримуються як UEFI, так і застарілий BIOS)
  • (на основі) live Debian 9 (стретч)
  • стійкість (за замовчуванням і для UEFI, і для застарілих BIOS)
  • Німецька розкладка клавіатури за замовчуванням
  • підходить для усунення несправностей інших систем GNU / Linux

Причини:

  • необхідність налаштування розкладки клавіатури при кожному використанні - справжній головний біль
  • cryptsetup та efibootmgr відсутні у живих образах Debian за замовчуванням
  • gnome-terminal має цей дратівливий білий фон за замовчуванням

Немає рішення:

  • (пере) створення власного живого зображення на debian (це здається нудним, хоча я ще не пробував цього)
  • unetbootin (запитує невідомий пароль під час запуску на розтяжці debian, і я думаю, що він не підтримує UEFI у будь-якому випадку)
  • якийсь іноземний автоматизований процес, де я не бачу, що відбувається

Живі та встановлені зображення Debian є ізогібридними і їх можна зручно записати для блокування пристроїв за допомогою dd. І вони працюють на USB-накопичувачах так, що дуже приємно! Однак не буде жодної наполегливості і немає способу розпочати з не-англійської розкладки клавіатури за замовчуванням без редагування конфігурації grub та isolinux, яка входить до самої для читання файлової системи ISO9660 живого ISO-зображення. Тож навіть після запису прямого ISO на USB-накопичувач ці параметри все ще не можуть бути змінені.

Відповіді:


30

Ось спосіб із наполегливим створенням живого USB-накопичувача Debian. Це дозволить встановити відсутні пакети, які відтепер будуть доступні для кожного живого завантаження з використанням наполегливості. Оскільки ми заново створюємо вміст файлової системи ISO-образів у файловій системі, здатній до читання, ми можемо змінити конфігурації завантажувача, щоб увімкнути стійкість та встановити розкладку клавіатури на завантаженні.

Описані тут кроки були протестовані для роботи над Debian stretch та buster для створення живого зображення на розтяжці Debian.

Існує багато кроків, але, схоже, цей метод все ще досить ефективний.

Відмова від відповідальності: Ви втратите дані на цільовому накопичувачі USB, і якщо ви зіпсуєте команди нижче, після цього ви можете почувати себе дуже шкода. Я не несу відповідальності за ваші дії.

Почуття щастя

Якщо вам сьогодні пощастило особливо, ви можете спробувати сценарій bash, що автоматизує процес для вас. Дайте йому ваш шлях зображення ISO як перший параметр, а назву пристрою блоку USB-накопичувача - як другий. Зауважте, що цей скрипт є шалено небезпечним і що вам не слід його виконувати, не читаючи та розуміючи його спочатку.

TL; DR

Отримайте Debian в реальному часі ISO зображення, а потім зробіть наступне:

umount /dev/sdX*
parted /dev/sdX --script mktable gpt
parted /dev/sdX --script mkpart EFI fat16 1MiB 10MiB
parted /dev/sdX --script mkpart live fat16 10MiB 3GiB
parted /dev/sdX --script mkpart persistence ext4 3GiB 100%
parted /dev/sdX --script set 1 msftdata on
parted /dev/sdX --script set 2 legacy_boot on
parted /dev/sdX --script set 2 msftdata on

mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3

mkdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
mount /dev/sdX1 /tmp/usb-efi
mount /dev/sdX2 /tmp/usb-live
mount /dev/sdX3 /tmp/usb-persistence
mount -oro live.iso /tmp/live-iso

cp -ar /tmp/live-iso/* /tmp/usb-live

echo "/ union" > /tmp/usb-persistence/persistence.conf

grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX

dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2

mv /tmp/usb-live/isolinux /tmp/usb-live/syslinux
mv /tmp/usb-live/syslinux/isolinux.bin /tmp/usb-live/syslinux/syslinux.bin
mv /tmp/usb-live/syslinux/isolinux.cfg /tmp/usb-live/syslinux/syslinux.cfg

sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg

sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg

sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 keyboard-layouts=de locales=en_US.UTF-8,de_DE.UTF-8/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg

umount /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
rmdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso

Детально і з деяким поясненням

Вам потрібно буде виконати більшість наступних команд з підвищеними привілеями, тобто, використовуючи sudoв більшості систем GNU / Linux.

Завантажити

Завантажте живе зображення ISO Debian за допомогою обраного менеджера вікон:

https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/

Ми будемо називати завантажене зображення ISO просто "live.iso".

Визначте цільовий привід

Знайдіть пристрій, на якому використовується ваш накопичувач USB lsblk. Ми це зателефонуємо /dev/sdX.

Відключити

Демонтуйте наявні розділи на диску, використовуючи umount /dev/sdX*

Створіть розділи

Для завантаження з USB-накопичувача нам потрібен завантажувальний розділ EFI для ПК UEFI. Тоді нам потрібен досить великий розділ, щоб вмістити оригінальний вміст зображень файлової системи ISO. На цьому розділі повинен бути встановлений legacy_bootпрапор. Потім ми додаємо розділ стійкості, використовуючи весь залишок USB-накопичувача. Ви можете зробити це за допомогою будь-якого інструмента для розділення GPT (пам’ятайте legacy_bootпрапор). Ось приклад використання parted:

parted /dev/sdX --script mktable gpt
parted /dev/sdX --script mkpart EFI fat16 1MiB 10MiB
parted /dev/sdX --script mkpart live fat16 10MiB 3GiB
parted /dev/sdX --script mkpart persistence ext4 3GiB 100%
parted /dev/sdX --script set 1 msftdata on
parted /dev/sdX --script set 2 legacy_boot on
parted /dev/sdX --script set 2 msftdata on

Це створює таблицю розділів GPT та захисну таблицю розділів MBR.

Створення файлових систем

Ми хочемо FAT на EFI та в прямому розділі, і ми хочемо ext4в розділі збереження, і нам потрібна мітка, persistenceщоб функція стійкості працювала.

mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3

Монтаж ресурсів

Нам потрібно буде встановити вихідний ISO та цільові розділи у тимчасових точках монтування.

mkdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
mount /dev/sdX1 /tmp/usb-efi
mount /dev/sdX2 /tmp/usb-live
mount /dev/sdX3 /tmp/usb-persistence
mount -oro live.iso /tmp/live-iso

Встановіть живу систему

Скопіюйте живий вміст файлової системи ISO на розділ LIVE.

cp -ar /tmp/live-iso/* /tmp/usb-live

стійкість.конф

Підготуйте стійкість файлової системи з необхідним файлом конфігурації. Функція збереження не буде працювати без цього файлу.

echo "/ union" > /tmp/usb-persistence/persistence.conf

Груб за підтримку UEFI

Встановіть grub2 для підтримки завантаження UEFI (для цього потрібен grub-efi-amd64-binпакет Debian). Ми змушуємо , grub-installщоб НЕ використовувати систему UEFI безпечних завантажень, який , мабуть , не працює з --removableопцією.

grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX

Syslinux для застарілої підтримки BIOS

Встановіть gptmbr.binзавантажувач syslinux на диск (завантажте syslinux або встановіть пакет syslinux-common). Потім встановіть syslinux до живого розділу.

dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2

Виправлення Isolinux

Використовуйте конфігурацію isolinux оригінального живого ISO для роботи з syslinux.

mv /tmp/usb-live/isolinux /tmp/usb-live/syslinux
mv /tmp/usb-live/syslinux/isolinux.bin /tmp/usb-live/syslinux/syslinux.bin
mv /tmp/usb-live/syslinux/isolinux.cfg /tmp/usb-live/syslinux/syslinux.cfg

Параметри ядра

Тепер, коли ми скопіювали файли живих систем у фактичну файлову систему читання-запису, ми можемо маніпулювати конфігурацією grub та syslinux.

Додайте параметр ядра стійкості до menu.cfgта grub.cfg. В обох файлах додайте ключове слово persistenceв кінці відповідного першого рядка з boot=liveним.

sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg

Встановіть параметр ядра розкладки клавіатури. В обох файлах додайте ключові слова в кінці відповідного першого рядка з boot=liveним.

sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 keyboard-layouts=de locales=en_US.UTF-8,de_DE.UTF-8/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg

Груб сплеск

Зафіксуйте зображення сплеску grub (необов’язково; ми перемістили його в інший каталог).

sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg

Демонтування та очищення

umount /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
rmdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso

Чому це має працювати як для UEFI, так і для BIOS

Запускаючи в режимі UEFI, ПК сканує розділи FAT, визначені нами в таблиці розділів GPT. Перший розділ FAT містить завантажувач завантажувачів UEFI, який знайдено тому, що він розташований на шляху, визначеному UEFI для змінних накопичувачів ( --removableперехід на grub-installце робив). Для роботи не потрібен запис завантаження UEFI, нам потрібно лише змусити ПК намагатися завантажуватися з USB-накопичувача. Цей grub налаштований взяти його звідти (завантажити grub.cfg, показати меню тощо).

Під час запуску в режимі BIOS та вибору для завантаження з USB-накопичувача ПК виконає gptmbr.binкод завантажувача, який ми записали в захисний MBR USB-накопичувача. Цей завантажувач шукає розділ GPT, позначений legacy_bootпрапором і ланцюговим syslinux з цього розділу. Потім Syslinux бере на себе (завантажити menu.cfg, показати меню тощо).

Зашифрована стійкість

Замість використання простого ext4 на розділі персистенції можна спочатку зашифрувати розділ стійкості за допомогою LUKS (використовуючи cryptsetup), а потім відформатувати його з ext4 (використовуючи відповідну мітку). Однак, як йдеться в документації , жива система повинна містити cryptsetupпакет. В іншому випадку зашифрований розділ не може бути розшифрований живою системою. Це означає, що спочатку потрібно створити власну ISO-програму. Це, однак, виходить за межі цієї відповіді.

Історія

Раніше ця --no-uefi-secure-bootопція не була частиною дзвінка grub-install. Для мене палка добре працювала, але це зупинилося на Debian buster, хоча захищене завантаження все ще відключено на моїй машині.


1
Я щойно створив тут рахунок, щоб подякувати вам за це. Відмінна інструкція. Невелика пропозиція - непогано було б зашифрувати постійний розділ.
Петро Гавлічек

1
@PetrHavlicek Правда. Я думаю, що це зробити досить просто, але я витратив вільний час з часу створення цього питання на інші питання, тому мені ще доводиться переглянути цю ідею (і дякую за вашу оцінку :).
schlimmchen

Чудово працює! Хоча якесь додаткове пояснення було б непогано. (Впевнений , ви можете подивитися все це на людину сторінках, але , наприклад , mktable, а так же , як mklable, насправді не задокументовані як такої, і т.д.)
mikuszefski

Чи можливо мати на USB-накопичувачі, відформатованому FAT, лише файл, який містить стійкість гучності? Це повинно бути можливим, монтуючи файл за допомогою циклу. Але як сказати Debians initrd взяти файл замість розділу?
нарізання

Дивіться для цього debian-live.alioth.debian.org/live-manual/stable/manual/html/… . Коротше кажучи: Створіть файл зображення (розріджений) у корені будь-якої файлової системи, назвіть цей файл "стійкість" та відформатуйте його, наприклад, з ext4.
schlimmchen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.