OpenWrt на x86-системах з UEFI
Вступ
Зараз завантаження через UEFI стало стандартом, а плати з тільки UEFI BIOS — звичним явищем. Ще у 2017 році компанія Intel оголосила, що з 2020 року підтримка застарілого BIOS (Legacy BIOS) буде припинена.
- https://www.anandtech.com/show/12068/intel-to-remove-bios-support-from-uefi-by-2020 - http://www.uefi.org/sites/default/files/resources/Brian_Richardson_Intel_Final.pdf
У зв’язку з цим, у системі збірки OpenWrt з’явилася можливість створення UEFI-завантажуваних образів.
Стан підтримки
Починаючи з коміту
a6b7c3e672764858fd294998406ae791f5964b4a
OpenWrt підтримує створення UEFI-сумісних образів для x86-64. Завантажити їх можна зі сторінки:
downloads.openwrt.org → snapshots → x86/64.
Збірка UEFI-завантажуваного образу OpenWrt
Щоб створити UEFI-сумісний образ:
- Запустіть `make menuconfig`
- Перейдіть у розділ Target Images
- Увімкніть опцію: Build GRUB EFI images (Linux x86 or x86_64 host only)
За потреби оберіть додаткові пакети. Збережіть зміни і вийдіть з `menuconfig`.
Запустіть збірку як звичайно:
make
Після завершення збірки, результати з’являться в каталозі: `./bin/targets/x86/64/`
Увага: створений файл — це disk image, а не partition image!
Його потрібно записувати на пристрій цілком, наприклад `/dev/sdX`, а не на розділ `/dev/sdX1`.
UEFI Secure Boot
Щоб створити UEFI-образ із підтримкою Secure Boot, використовуйте спеціальний форк OpenWrt із відповідним feeds-репозиторієм у гілці `feature-uefi-secure-boot`.
Цей форк базується на гілці Jow-staging та підтримує:
- генерацію підписаних EFI-бінарників (sbsigntool)
- роботу з EFI-ключами та змінними (efivar, efibootmgr, efitools)
##### Покрокова інструкція
# Додайте форк репозиторію git remote add devrepo https://github.com/alive4ever/openwrt git fetch devrepo git checkout feature-uefi-secure-boot # Налаштуйте feeds echo 'src-git packages https://github.com/alive4ever/packages;feature-uefi-secure-boot' > ./feeds.conf ./scripts/feeds clean ./scripts/feeds update packages ./scripts/feeds update -i ./scripts/feeds install -a # Запустіть конфігурацію make menuconfig # Оберіть Target: x86, Subtarget: x86_64 # Увімкніть: 'Sign EFI executable binaries' у Target Images # У розділі Utilities оберіть: efitools, efibootmgr, efivar, sbsigntool
##### Генерація сертифіката
# Створіть ключ і сертифікат для підпису OLD_UMASK=$(umask) umask 077 openssl req -new -x509 -sha256 \ -days 90 -out ./db.crt \ -subj '/CN=secure boot signing certificate' \ -newkey rsa:2048 -nodes \ -keyout ./db.key umask $OLD_UMASK
##### Збірка образу
make
Завантаження з Secure Boot
Щоб мати змогу завантажити цей образ на реальному UEFI-пристрої:
- Імпортуйте сертифікат `db.crt` у змінну UEFI `db`
- За потреби конвертуйте його в формат DER
- Можна скористатися інструментами: `efitools`, `mokutil`, `KeyTool.efi` (у режимі Setup Mode)
Після імпорту — система зможе надійно та безпечно завантажитися з цього образу.