Ось спосіб із наполегливим створенням живого 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, хоча захищене завантаження все ще відключено на моїй машині.