Support linux new boot path ��� ���

Как загрузить и установить Linux на компьютер с UEFI и Secure Boot

Новые компьютеры с системой Windows поставляются с прошивкой UEFI и с включенной загрузкой Secure Boot. Режим Secure Boot предотвращает загрузку операционных систем, если они не подписаны ключом, загруженным в UEFI; сразу «из коробки» можно загрузить только программное обеспечение, подписанное фирмой Microsoft.

Фирма Microsoft требует, чтобы производители компьютеров позволяли пользователям отключить режим Secure Boot, поэтому вы можете отключить режим Secure Boot или добавить свой собственный ключ для того, чтобы обойти это ограничение. Режим Secure Boot нельзя отключить на устройствах ARM под управлением Windows RT.

Как работает режим Secure Boot

Компьютеры, которые поставляются с системами Windows 8 и Windows 8.1 имеют прошивку UEFI вместо традиционного BIOS. По умолчанию прошивка UEFI машины будет загружать только загрузчики, подписанные ключом, встроенным в прошивку UEFI. Эта особенность известна как «Secure Boot» (безопасная загрузка) или «Trusted Boot» (проверенная загрузка). На традиционных компьютерах без этой функции безопасности, руткит может установить себя и стать загрузчиком boot loader. После этого BIOS компьютера будет загружать руткит в процессе загрузки, во время которой происходит загрузка самого загрузчика и загрузка Windows, скрывая себя от операционной системы и внедряя себя глубоко в систему.

Режим Secure Boot блокирует это — компьютер будет загружать только проверенное программное обеспечение, поэтому вредоносные начальные загрузчики не смогут заразить систему.

На компьютерах Intel x86 (а не на компьютерах ARM) у вас есть возможность управлять режимом Secure Boot. Вы можете выбрать вариант отключения этого режима или даже добавить ключ со своей собственной подписью. Организации могут использовать свои собственные ключи для того, чтобы обеспечить, чтобы могли загружаться только одобренные операционные системы Linux, например

Варианты установки Linux

У вас есть несколько вариантов установки Linux на компьютер с режимом Secure Boot:

  • Выберите дистрибутив, в котором поддерживается режим Secure Boot: современные версии Ubuntu, начиная с Ubuntu 12.04.2 LTS и 12.10, будет загружаться и нормально устанавливаться на большинстве ПК с включенным режимом Secure Boot. Это объясняется тем, что загрузчик EFI первоначального этапа загрузки в Ubuntu подписан фирмой Microsoft. Впрочем, один из разработчиков Ubuntu отмечает , что загрузчик в Ubuntu не подписан ключом, который необходим согласно процессу сертификации Microsoft, а просто одним из ключей, о которых говорят, что он «рекомендован» фирмой Microsoft. Это означает, что Ubuntu не обязана загружаться на всех компьютерах с UEFI. Для того, чтобы использовать Ubuntu на некоторых компьютерах, пользователям, возможно, придется отключить режим Secure Boot.
  • Отключение режима Secure Boot: Режим Secure Boot можно отключить, что позволит позволить превратить преимущество безопасной загрузки в возможность иметь что-нибудь свое для загрузки компьютера точно также, как это делается на старых компьютерах с традиционным BIOS. Это также потребуется сделать, если вы хотите установить старую версию Windows, которая не разрабатывалась с врозможностью использовать режим Secure Boot, например, Windows 7.
  • Добавить в прошивку UEFI подписанный ключ: Некоторые дистрибутивы Linux позволяют подписывать свои загрузчики с помощью их собственного ключа, который вы можете добавить в свою прошивку UEFI. На данный момент, это, кажется, не является обычной практикой.

Вы должны проверить, какой из этих вариантов рекомендуется использовать для вашего дистрибутива Linux. Если вам нужно загрузить старый дистрибутив Linux, в котором нет никакой информации об этом, вы нужно будет просто отключить режим Secure Boot.

Читайте также:  Wdfilter sys windows 10 ошибка

На большинстве новых компьютеров у вас должна иметься возможность устанавливать без каких-либо проблем текущие версии Ubuntu — либо релиз LTS, либо последний релиз. Инструкции о том, как загружаться со сменного носителя, смотрите в последнем разделе.

Как отключить режим Secure Boot

Вы можете управлять режимом Secure Boot из вашего экрана настройки прошивки UEFI — UEFI Firmware Settings. Для доступа к этому экрану, вам нужно будет в Windows 8 получить доступ к меню параметров загрузки. Чтобы сделать это, откройте страницу Settings (Настройки) — чтобы попасть на эту страницу, нажмите клавишу Windows Key + I, затем нажмите кнопку питания, а затем нажмите и удерживайте клавишу Shift и одновременно щелкните мышкой по кнопке Restart (Перезагрузка).

Ваш компьютер будет перезагружен в экран расширенных параметров загрузки. Выберите вариант Troubleshoot (Диагностика), выберите вариант Advanced options (Дополнительные параметры), а затем выберите пункт UEFI Settings (Настройки UEFI). На некоторых компьютерах с системой Windows 8 вы можете не увидеть пункт UEFI Settings, даже если эти компьютеры поставляются с UEFI — в этом случае для того, чтобы получить информацию о том, как добраться до его экрана настроек UEFI, обратитесь к документации разработчика.

Вы попадете на экран настроек UEFI, где вы можете выбрать отключение режима Secure Boot или добавление своего собственного ключа.

Загрузка со сменного носителя

Вы можете загрузиться со сменного носителя при помощи точно такого же доступа к меню параметров загрузки — удерживайте нажатой клавишу Shift и щелкните мышкой по кнопке Restart (Перезагрузка). Подключите загрузочное устройство, выберите вариант Use a device (Использовать устройство), и выберите устройство, с которого необходимо загрузиться.

После загрузки со сменного носителя вы можете установить Linux точно также, как и обычно, или просто можете использовать живую среду сменного носителя (устройство live), не устанавливая его.

Имейте в виду, что режим Secure Boot является полезной функцией безопасности. Вы должны оставить эту возможность включенной в случае, если вам не требуется запускать операционные системы, которые не будут загружаться с включенным режимом Secure Boot.

Источник

Uefi-Boot

Содержание

English version of this wiki page is available on GitHub.

На GitHub’е есть английская версия этой вики-статьи (не дословный перевод, а вольное изложение идей).

Uefi-Boot — это простенький проект по организации загрузки Ubuntu на компьютерах с поддержкой UEFI без использования загрузчиков. Здесь описано полноценно работающее решение, но само собой для его реализации на другом компьютере могут потребоваться некоторые изменения. Поэтому я советую пользоваться предложенными командами и файлами вдумчиво, понимая и сверяя все действия в соответствии с вашей конфигурацией и настройками.

Как было указано в статье, UEFI поддерживает мультизагрузку (можно настроить несколько вариантов загрузки, которые выбираются из меню UEFI). Так же было отмечено, что все последние ядра в репозитории Ubuntu собираются с опцией UEFISTUB, которая позволяет загружать ядро непосредственно как EFI-приложение. В разделе Загрузка ядра из UEFI были поверхностно разобраны варианты реализации такой загрузки.

Эта статья посвящена последнему варианту (вариант монтирования ESP раздела как /boot). Здесь мы детально рассмотрим как реализовать этот вариант с автоматическим обновлением пунктов загрузки UEFI при установке новых и удалении старых ядер из системы.

Решение в деталях

Давайте разберём в деталях реализацию. Начинать мы будем из конфигурации, в которой система оказывается после установки в режиме UEFI. При этом во время установки /boot не был размещён на отдельном разделе. Если у вас /boot был вынесен в отдельный раздел, то действия будут чуточку отличаться,а после окончания настройки вы сможете удалить ваш boot-раздел — он больше не будет нужен.

Желательно, чтобы ESP-раздел был хотя бы 200–300 Мб (лучше 500), ведь в нём будут храниться наши ядра и их образы начальной инициализации (т. е. он и будет нашим /boot).

Читайте также:  Как увеличить запуск windows

Монтируем ESP как /boot

Тут всё тривиально просто:

После этих изменений у вас и после перезагрузки ESP раздел будет смонтирован в /boot и в нем будут находится ядра и образы рамдисков периода начальной инициализации.

Утилита для обновления меню загрузки UEFI

Я написал эту утилиту на BASH, который практически не знаю 1) , поэтому, наверняка, задачу можно было решить и более изящно, но я приведу тот код, который у меня заработал.

Конфигурационный файл

Вписывать фиксированные опции загрузки ядра и UUID корневого раздела и прямо в код утилиты, так же, как и полагаться только на автоматическое определение корневого раздела через информацию в /etc/fstab , — не слишком верное решение, довольно часто возникают ситуации, требующие не-дефолтовых настроек. И каждый раз корректировать скрипт принципиально неправильно. Поэтому настройки можно прописать руками в конфигурационном файле утилиты. Все настройки утилиты хранятся в /etc/uefiboot.conf (файл доступен на GitHub’е) 2) .

Вы можете его создать из любого текстового редактора, запущенного под рутом, или воспользоваться настроечным скриптом (ссылка на который есть в конце статьи). В этом файле вы можете задать ключи загрузки ядра (переменная OPTIONS ) и устройство корневого раздела (переменная ROOT ). Если этих параметров не задавать, то устройство корневого раздела будет взято из /etc/fstab (берется устройство с точкой монтирования ‘/’), а ключи загрузки ядра по умолчанию будут взяты ro quiet .

Если корневой раздел системы расположен на подразделе BTRFS (установщик Ubuntu размещает корень на подразделе @ btrfs, даже не спрашивая у вас), то в переменную ROTFLAGS нужно указать параметр rootflags=subvol=@ , чтобы ядро смогло найти корень. Если переменная не определена то имя подтома с корнем будет взято из /etc/fstab.

Дополнительно в конфигурационный файл добавлен параметр K_SUFFIX — это необходимо для работы с подписанными ядрами из пакета linux-signed-generic, в котором поставляются ядра с подписью ключом Canonical. Подпись необходима для организации загрузки в режиме Secure boot. Если пользоваться ядрами из пакета linux-signed-generic, то в список ключей db должен быть добавлен сертификат с ключом Canonical (сертификат с этим ключом можно найти на GitHub’е). А в опцию загрузки должно добавляться ядро с суффиксом .efi.signed . Если вы организовали подпись ядер своим ключом, и решили использовать иной суффикс, то в переменную K_SUFFIX нужно будет его прописать.

Утилита uefiboot-update

Собственно скрипт утилиты располагается в /usr/bin/uefiboot-update, его код на GitHub’е:

Код достаточно простой:

Сначала определяем необходимые настройки. После определения необходимых параметров по умолчанию код читает конфигурационный файл, а потом параметры командной строки. Таким образом все необходимые настройки берутся из трех мест с приоритетом от дефолтов (минимальный приоритет) через конфиг, до параметров командной строки (самый высокий приоритет).

Затем определяются версии существующих в /boot ядер и версии указанные в загрузочных записях UEFI. Сравнивая эти два списка сначала удаляются те загрузочные записи для которых не осталось ядер в /boot, а затем добавляются записи для тех ядер из /boot, для которых еще не было загрузочных записей UEFI. Порядок добавления организован так, что последним добавляется ядро с самой новой версией. Это автоматически делает эту запись первой в порядке загрузки, т.е. по умолчанию, после установки нового ядра загружаться будет именно оно. Однако если вы ставите более старое ядро руками, то оно будет добавлено последним и следующая загрузка будет именно в то ядро, которое вы установили последним.

Приоритет загрузки конечно можно поменять вручную через efibootmgr, если вас не устроил тот что, сделала утилита.

В скрипте предусмотрена автоматическая инициализация переменных настройки ROOT, OPTIONS, ROOTFLAGS др., которые обеспечивает работу утилиты без дополнительных настроек в большинстве стандартных ситуаций. Но, например, для настройки загрузки системы в режиме SecureBoot нужно будет обязательно указать значение переменной K_SUFFIX в файле /etc/uefiboot.conf или в параметре командной строки -s.

Читайте также:  Восстановление папки windows консоль восстановления

Инициализация синхронизации пунктов загрузки

Самый простой способ инициализировать синхронизацию — воспользоваться теми же средствами, которыми пользуется grub для обновление своей конфигурации.

Ядро — это довольно важный компонент системы и на его установку/удаление завязано немало процессов. Для того, чтобы упростить процесс взаимодействия с процессом изменения версий ядер были предусмотрены триггеры ядра — это полная аналогия скриптов DEB-пакета: пред/постинсталляция и пред/постудаление, но лежат они в соответствующих папках /etc/kernel ,а не в deb-пакете ядра. Таким образом, любое приложение, которому надо прореагировать на появление нового или удаление старого ядра могут сделать символьные ссылки на свои утилиты из соответствующих каталогов или просто разместить там свои скрипты (собственно именно так и поступает grub). Скрипты эти будут автоматически вызываться при наступлении событий связанных установкой или удалением ядер.

Нас будут интересовать каталоги /etc/kernel/postinst.d и /etc/kernel/postrm.d, именно в них мы создадим символьные ссылки на нашу утилиту.

Теперь пункты загрузки UEFI будут автоматически обновляться после установки нового ядра или после удаления одного из ранее установленных. А если изменений в версиях ядер и их количестве не было, то утилита ничего не будет менять.

Подчистим систему

Т. к. мы настроили все для загрузки без GRUB/Shim, то необходимо вычистить все, что связано с этими загрузчиками из системы (при обновлении GRUB будет создавать свою запись в пунктах меню UEFI):

Но оказывается, этого не всегда достаточно. Любое ядро в репозитории Ubuntu имеет grub в зависимостях (зависимость типа рекомендованные — recommends) и вот, в некоторых случаях, 3) grub пытается установится вместе с ядром (причем ставится почему-то grub-pc). Чтобы этого не происходило, нужно apt дать четкую и постоянную инструкцию не ставить рекомендованные.

Сделать это можно, записав значение APT::Install-Recommends «false»; в файл (новый) /etc/apt/apt.conf.d/zz-no-recommends :

Финальная настройка

Теперь осталось запустить утилиту обновления пунктов меню загрузки UEFI

И последний штрих — уменьшение или вовсе обнуление тайм-аута меню загрузки UEFI (обычно, значение по умолчанию для этого тайм-аута 5-10 секунд, столько нам совсем не нужно

Автоматизированная установка и настройка

На GitHub’е есть установочно-настроечный скрипт, который выполняет все необходимые подготовительные операции (перемонтирование ESP в /boot), копирует все файлы на нужные места, а также создает нужные ссылки и удаляет загрузчики. Однако я не советую исполнять его бездумно — стоит проверить, что команды соответствуют конфигурации вашей системы.

Плюсы полученного решения

Минусы такого решения

Описав подробно решение я не могу не упомянуть о некоторых сложностях с которыми можно столкнутся. Ниже перечислены «тяжелые» ситуации, с которыми вам, скорее всего, и не придется столкнуться, но не упомянуть о них — совершенно не допустимо.

Анализ ситуации показал, что и в этом случае виновата кривизна прошивки UEFI — она не смогла распознать кривую запись переменных в nvram. По стандарту, любая кривизна в NVRAM должна восприниматься как сигнал к обнулению NVRAM до factory default. Но моя прошивка не отловила глюки в записях и не обнулила NVRAM с нарушенной внутренней структурой. Справедливости ради надо заметить, что я умудрился отловить крайне маловероятную ситуацию сбоя именно в момент записи в NVRAM, которая, к тому же, наложилась на кривость в реализации UEFI.

Восстановление сброшенных или искаженных настроек пунктов загрузки UEFI

Если есть возможность загрузиться в UEFIShell

Все. Пункты меню UEFI восстановлены.

Если возможности загрузиться в UEFIShell нет

Потребуется LiveUSB/CD с образом Ubuntu который может загружаться EFI-режиме.

Версии ядер пропишите свои, как и укажите свой раздел корневой ФC вместо /dev/sda2. После перезагрузки идем в терминал и выполняем

Всё. Пункты меню UEFI восстановлены.

Копилефт

Предложенный набор файлов и решений распространяется под GPL . Берите, пользуйтесь, изменяйте под себя.

Источник

Оцените статью