Secure Boot для MiniOS Linux: почему это не так страшно, как кажется
Тем, кто не знаком с дистрибутивом, поясню: MiniOS - модульный дистрибутив для съёмных накопителей на базе Debian 12, обладающий достаточно гибкими возможностями, который можно достаточно легко кастомизировать под свои нужды. Если вы уже используете данный дистрибутив, то знаете, что он использует кастомное ядро ради обеспечения поддержки драйверов AUFS и NTFS3, из-за чего не поддерживается Secure Boot. Во многих live-дистрибутивах замена ядра является достаточно трудоёмкой задачей, требующей высокой квалификации и глубоких знаний. В этой статье я расскажу вам, как быстро установить и использовать в MiniOS подписанное ядро Debian, если поддержка горячего подключения модулей и быстрого NTFS вам менее важна, чем безопасная загрузка системы.
Безопасная загрузка (Secure Boot) — это стандарт безопасности, который помогает гарантировать, что устройство загружается с использованием только доверенного программного обеспечения, которое подписано цифровой подписью изготовителем оборудования (OEM) или разработчиком операционной системы. Безопасная загрузка защищает устройство от вредоносных программ, которые могут захватить систему во время загрузки или попытаться изменить процесс загрузки. Безопасная загрузка поддерживается большинством современных устройств с прошивкой UEFI. Однако не все операционные системы поддерживают безопасную загрузку, и некоторые из них могут конфликтовать с ней. Например, некоторые дистрибутивы Linux могут не загружаться, если включена безопасная загрузка, так как их загрузчики не имеют необходимой подписи.
Все опыты мы будем проводить в виртуальной машине, но те же самые операции возможно реализовать и на реальном железе. Для выполнения всех операций нам понадобится:
Дистрибутив MiniOS Standard, скачанный с сайта, либо с репозитория проекта на GitHub,
от 4 ГБ оперативной памяти (ОЗУ) для сборки в чистом режиме, либо от 1 ГБ ОЗУ в новой сессии и пара ГБ места на флешке,
10 минут времени,
бокал чего-нибудь вкусного, чтобы отметить положительный результат.
Чтобы ничего не запороть в уже установленной и настроенной MiniOS, при загрузке выбираем Fresh Start, чтобы система загрузилась без сохранения изменений. Если на вашем железе доступно 4 ГБ ОЗУ и больше, то лучше будет выбрать Copy to RAM. Если у вас меньше 4 ГБ, то стоит создать новую сессию, чтобы все операции производились не в оперативной памяти, после завершения сборки сессию можно будет удалить.

В загруженной системе открываем терминал и вводим:
sudo apt update && sudo apt install -y linux‑image‑amd64 git

Если у вас 32-битная версия, то заменяете linux‑image‑amd64
на linux‑image‑686
или на linux‑image‑686-pae
, если процессор поддерживает PAE. Помимо этого, вы можете попробовать установить более свежее ядро из бэкпортов, но это на ваш страх и риск.
После завершения установки ядра необходимо скачать скрипты сборки MiniOS:
git clone --depth=1 https://github.com/minios-linux/minios-live.git
Переходим в папку скриптов сборки initrd:
cd ./minios-live/linux-live/initramfs/livekit-mos
Далее нам необходимо узнать точное наименование устанавливаемого ядра, выполняем в терминале ls /usr/lib/modules

6.1.67-mos-amd64 - это текущее ядро системы, кастомные ядра MiniOS имеют суффикс mos в названии, нам же нужно родное ядро Debian - 6.1.0-17-amd64.
Собираем initrd. Обратите внимание, что команду необходимо выполнять через sudo, либо под пользователем root, иначе вы получите кучу ошибок и битый файл вместо рабочего initrd.
sudo ./initramfs_create 6.1.0-17-amd64

Итак, мы получили собранный initrd (после сборки его адрес появится в терминале), теперь необходимо всё собрать воедино. Для начала, упакуем модули ядра. Команды выполняем с sudo, чтобы владельцем файлов и папок был root.
cd ~
sudo mkdir build/usr/lib/modules
sudo cp -r /usr/lib/modules/6.1.0-17-amd64 build/usr/lib/modules/
sudo mksquashfs build 01-kernel-6.1.0-17-amd64-zstd.sb -comp zstd -b 1048576
Наименование образа с модулями ядра может быть произвольным, в данном примере я лишь придерживаюсь схемы наименований, принятой в MiniOS. Также, желательно, чтобы образ начинался с 01 в названии, это определяет очерёдность его подключения при загрузке системы.
После завершения сборки initrd и образа с модулями ядра, необходимо всё скопировать в нашу систему и настроить файлы конфигурации загрузки. Я буду копировать всё на ту же флешку, с которой запущена система, её данные находятся в /run/initramfs/memory/data
:
sudo cp 01-kernel-6.1.0–17-amd64-zstd.sb /run/initramfs/memory/data/minios/
sudo cp /tmp/minios-initramfs-26572.img /run/initramfs/memory/data/minios/boot/initrfs-6.1.0-17-amd64.img
sudo cp /boot/vlinuz-6.1.0-17-amd64 /run/initramfs/memory/data/minios/boot/

Теперь необходимо отредактировать файлы конфигурации загрузчиков, добавив туда пункт для загрузки нашего ядра.
sudo mousepad /run/initramfs/memory/data/minios/boot/syslinux.cfg
sudo mousepad /run/initramfs/memory/data/minios/boot/grub/grub.cfg
В обоих файлах я добавил соответствующие записи первым пунктом, заменив наименование пункта меню и прописав пути для созданных vmlinuz и initrd. Вы можете изменить или добавить необходимые пункты в меню, при необходимости, либо просто заменить оригинальные ядро и initrd на новые, оставив меню неизменным.

После завершения редактирования можно перезагрузиться и проверить работоспособность установленного ядра.


Текст получился достаточно объёмный, но все операции действительно можно уложить в 5-10 минут. Если у вас всё получилось так же легко и просто, как у меня, я вас поздравляю.
