Как загрузить загрузку ядра с помощью загрузчика EFI stub (efistub) с безопасной загрузкой?

Я следил за процедурами загрузки загрузки ядра с помощью загрузчика EFI stub (efistub).

В моей ситуации включена безопасная загрузка. Поэтому я немного изменил zz-update-efistub.sh с помощью

cp /$(readlink /vmlinuz).eif.signed /boot/efi/EFI/ubuntu/vmlinuz

. Но все же моя машина отказывается загружаться с этого изображения.

0
задан 23 August 2017 в 01:58

2 ответа

Проблема, с которой вы сталкиваетесь, является результатом того, что ядра Ubuntu (те, у которых имена файлов, которые заканчиваются на .efi.signed), подписаны ключом безопасности Canonical. Этот ключ не включен в прошивку большинства компьютеров и поэтому будет отклонен большинством подсистем компьютеров Secure Boot. (Есть несколько исключений из этого правила. Например, у меня есть материнская плата ASUS P8-H77I, которая поставляется с открытым ключом Canonical, встроенным в стандартную комплектацию. Если у вас была такая настройка, у вас не было бы этой проблемы.) [ ! d0]

В общем, у вас есть три варианта:

Полностью контролировать безопасную загрузку. Вы можете полностью контролировать безопасную загрузку и устанавливать любые нужные ключи безопасности. Если вы добавите ключ Canonical, вы сможете напрямую запускать подписанные ядра Ubuntu. Однако этот процесс утомительный. Подробнее о том, как это сделать, см. На моей веб-странице по этому вопросу. Вкратце, вам нужно будет сгенерировать свои собственные ключи, удалить текущий набор ключей вашего компьютера, добавить свои собственные ключи, добавить ключ Canonical и, возможно, добавить любые другие ключи, которые вы можете использовать (например, ключи от Microsoft). Существует несколько способов сделать это, некоторые из которых основаны на собственном пользовательском интерфейсе встроенного программного обеспечения и поэтому не могут быть описаны с 100% -ной точностью общим способом. Использование Shim - вы можете использовать программу shimx64.efi, которая поставляется с Ubuntu для запуска вашего ядра. Для этого вы поместите shimx64.efi в тот же каталог, что и (переименованное) ядро, и добавьте shimx64.efi в список загрузки (через efibootmgr), а не в ядро. Один дополнительный трюк заключается в том, что вам необходимо передать имя файла и параметры ядра в shimx64.efi с помощью соответствующих опций efibootmgr. Это было бы похоже на команду efibootmgr -c... на шаге №3 ответа, на который вы ссылались, но файл программы будет shimx64.efi, а имя файла ядра станет опцией, переданной через -u. Обратите внимание, что не все версии shimx64.efi поддерживают параметры передачи таким образом. Я не помню точно, когда эта функция была добавлена, но вы должны быть в порядке с последней версией. Обратите внимание, что я никогда не пытался сделать это сам, поэтому я не могу предоставить вам пошаговые инструкции; вам, вероятно, придется поэкспериментировать, чтобы выяснить детали самостоятельно. Это также означает, что есть шанс, что он не сработает, хотя теоретически он должен работать. Используйте более обычную настройку - IMHO, запуск ядра напрямую, как вы пытаетесь, не является хорошим подходом, даже без безопасной загрузки на картинке. Хотя использование GRUB, rEFind или какого-либо другого загрузчика или диспетчера загрузки является технически усложнением процесса загрузки, эти загрузочные программы предоставляют инструменты для управления процессом загрузки, которые упрощают фактическую настройку. Таким образом, лучше использовать один из этих инструментов, ИМХО. Если у вас есть конкретная проблема с GRUB, вы можете поделиться ею; возможно, что другая программа загрузки будет решать вашу проблему. Если вы просто делаете это как учебное упражнение, тем не менее, запуск ядра напрямую имеет свои достоинства. Вы, конечно же, узнаете что-то об учебном процессе EFI и, в вашем случае, о безопасной загрузке, получив ее работу.

Если вы хотите простое решение, то использовать обычный загрузчик или менеджер загрузки. Если вы хотите узнать больше всего, вы можете захотеть взглянуть на полный контроль над безопасной загрузкой - но имейте в виду, что на этом пути есть много подводных камней, поэтому, вероятно, потребуется некоторое время, даже с помощью как тот, который я написал и ссылался ранее. Использование Shim - это своего рода средний уровень - его легче настроить, чем подход с полным контролем, но вы научитесь меньше делать это таким образом.

1
ответ дан 18 July 2018 в 08:05

Проблема, с которой вы сталкиваетесь, является результатом того, что ядра Ubuntu (те, у которых имена файлов, которые заканчиваются на .efi.signed), подписаны ключом безопасности Canonical. Этот ключ не включен в прошивку большинства компьютеров и поэтому будет отклонен большинством подсистем компьютеров Secure Boot. (Есть несколько исключений из этого правила. Например, у меня есть материнская плата ASUS P8-H77I, которая поставляется с открытым ключом Canonical, встроенным в стандартную комплектацию. Если у вас была такая настройка, у вас не было бы этой проблемы.) [ ! d0]

В общем, у вас есть три варианта:

Полностью контролировать безопасную загрузку. Вы можете полностью контролировать безопасную загрузку и устанавливать любые нужные ключи безопасности. Если вы добавите ключ Canonical, вы сможете напрямую запускать подписанные ядра Ubuntu. Однако этот процесс утомительный. Подробнее о том, как это сделать, см. На моей веб-странице по этому вопросу. Вкратце, вам нужно будет сгенерировать свои собственные ключи, удалить текущий набор ключей вашего компьютера, добавить свои собственные ключи, добавить ключ Canonical и, возможно, добавить любые другие ключи, которые вы можете использовать (например, ключи от Microsoft). Существует несколько способов сделать это, некоторые из которых основаны на собственном пользовательском интерфейсе встроенного программного обеспечения и поэтому не могут быть описаны с 100% -ной точностью общим способом. Использование Shim - вы можете использовать программу shimx64.efi, которая поставляется с Ubuntu для запуска вашего ядра. Для этого вы поместите shimx64.efi в тот же каталог, что и (переименованное) ядро, и добавьте shimx64.efi в список загрузки (через efibootmgr), а не в ядро. Один дополнительный трюк заключается в том, что вам необходимо передать имя файла и параметры ядра в shimx64.efi с помощью соответствующих опций efibootmgr. Это было бы похоже на команду efibootmgr -c... на шаге №3 ответа, на который вы ссылались, но файл программы будет shimx64.efi, а имя файла ядра станет опцией, переданной через -u. Обратите внимание, что не все версии shimx64.efi поддерживают параметры передачи таким образом. Я не помню точно, когда эта функция была добавлена, но вы должны быть в порядке с последней версией. Обратите внимание, что я никогда не пытался сделать это сам, поэтому я не могу предоставить вам пошаговые инструкции; вам, вероятно, придется поэкспериментировать, чтобы выяснить детали самостоятельно. Это также означает, что есть шанс, что он не сработает, хотя теоретически он должен работать. Используйте более обычную настройку - IMHO, запуск ядра напрямую, как вы пытаетесь, не является хорошим подходом, даже без безопасной загрузки на картинке. Хотя использование GRUB, rEFind или какого-либо другого загрузчика или диспетчера загрузки является технически усложнением процесса загрузки, эти загрузочные программы предоставляют инструменты для управления процессом загрузки, которые упрощают фактическую настройку. Таким образом, лучше использовать один из этих инструментов, ИМХО. Если у вас есть конкретная проблема с GRUB, вы можете поделиться ею; возможно, что другая программа загрузки будет решать вашу проблему. Если вы просто делаете это как учебное упражнение, тем не менее, запуск ядра напрямую имеет свои достоинства. Вы, конечно же, узнаете что-то об учебном процессе EFI и, в вашем случае, о безопасной загрузке, получив ее работу.

Если вы хотите простое решение, то использовать обычный загрузчик или менеджер загрузки. Если вы хотите узнать больше всего, вы можете захотеть взглянуть на полный контроль над безопасной загрузкой - но имейте в виду, что на этом пути есть много подводных камней, поэтому, вероятно, потребуется некоторое время, даже с помощью как тот, который я написал и ссылался ранее. Использование Shim - это своего рода средний уровень - его легче настроить, чем подход с полным контролем, но вы научитесь меньше делать это таким образом.

1
ответ дан 24 July 2018 в 18:59
  • 1
    Спасибо за Ваш ответ. Я также пытался использовать свою MOM для подписи ядра, но также не удалось. Тогда я попытаюсь добавить Database Key. – march1993 24 August 2017 в 13:45

Другие вопросы по тегам:

Похожие вопросы: