Я могу безопасно произвести чистку подписанных ядер EFI? (альтернативно, я могу избавиться от неподписанных ядер?)

Я могу безопасно удалить и произвести чистку linux-signed* пакеты из моей Ubuntu 16.10 (yakkety) установка?

Причина я рассматриваю это, состоит в том, что моя BIOS UEFI не использует безопасную начальную загрузку, и мой раздел начальной загрузки составляет только 200 мебибайт (~210 МБ). У меня есть шифрование на остальной части разделов, и я действительно не хочу изменять размер их для расширения раздела начальной загрузки.

К сожалению, 200 мебибайт является едва-едва слишком маленьким для содержания 3 ядер. Текущие ядра достигают приблизительно 61 мебибайт каждый (это включает abi, конфигурацию, initrd, карту, плюс и неподписанные двоичные файлы ядра со знаком). Добавление в личинке, memtest, и таблице разделов продвигает его приблизительно к 198, который является, достаточно по-видимому, свободным пространством для способного для обновления ядра. Я обычно сохраняю только 2 ядра (текущий + в последний раз), но очевидно мне нужно пространство для одной трети во время процесса обновления. Если бы у меня не было ядер со знаком (7,2 мебибайт каждый), то я был бы в порядке.

На сегодняшний день у меня есть версии сборки 41, 45 и 46 из ядра 4.8.0 установленных.

Следующее повредит мою систему?

apt-get purge linux-signed*
grub-mkconfig -o /boot/grub/grub.cfg

(вторая строка, добавленная после комментария ubfan1, посмотрите ниже),

Я полагаю, что это должно удалить следующие пакеты ядра и препятствовать тому, чтобы были установлены новые ядра со знаком:

linux-signed-generic
linux-signed-image-4.8.0-41-generic
linux-signed-image-4.8.0-45-generic
linux-signed-image-4.8.0-46-generic
linux-signed-image-generic

У меня есть все регулярные (неподписанные) версии этих установленных пакетов.

Как вопрос о стороне, делает любой знает почему unicode.pf2 файл (2,3 мебибайт) появляется в обоих /boot/grub и /boot/grub/fonts? Я diffed файлы и они являются точно тем же. Я предполагаю, что это - шрифт, используемый в меню личинки, но почему это появляется дважды на том же разделе? Я чувствую себя глупым, пререкаясь приблизительно 2,3 мебибайт, но это могло также иметь огромное значение в моем особом случае.

Спасибо!

добавленная информация для комментария ubfan1

.efi.signed ядра появляются в каждой записи меню в /boot/grub/grub.cfg. Я знаю, что мое uefi встроенное микропрограммное обеспечение (предполагаю, что BIOS больше не является правильным словом), не использует безопасную начальную загрузку, но файлы конфигурации личинки, кажется, думают, что это делает. Очевидно, мои начальные загрузки системы ядра со знаком очень хорошо, поэтому возможно, я могу произвести чистку неподписанных ядер вместо этого?

Я вырыл в /etc/grub.d/10_linux для нахождения, куда эти строки прибывают из и нашли следующий код:

if test -d /sys/firmware/efi && test -e "${linux}.efi.signed"; then
    sed "s/^/$submenu_indentation/" << EOF
    linux   ${rel_dirname}/${basename}.efi.signed
      root=${linux_root_device_thisversion} ro ${args}
EOF
  else
    sed "s/^/$submenu_indentation/" << EOF
    linux   ${rel_dirname}/${basename}
      root=${linux_root_device_thisversion} ro ${args}
EOF
  fi

Я не эксперт по удару, но я думаю, что следую за этим в псевдо коде

if /sys/firmware/efi AND /boot/vmlinuz-x.x.x-xx.efi.signed exist
  echo linux vmlinuz-x.x-xx-generic.efi.signed to /boot/grub/grub.cfg
else
  echo linux vmlinuz-x.x.x-xx-generic to /boot/grub/grub.cfg

таким образом, если я произвожу чистку пакетов ядра со знаком, затем повторно выполняюсь grub-mkconfig, это должно поместить регулярные неподписанные ядра в grub.cfg, право?

4
задан 10 April 2017 в 10:36

3 ответа

Спасибо за всю справку и ссылки. Я провел несколько часов в эти выходные и проверил следующее

Короткие ответы

  1. Да, можно произвести чистку всего из linux-signed* пакеты, но необходимо установить linux-generic если Вы хотите, чтобы автоматические обновления ядра продолжили функционировать правильно. Вся личинка, ядро и initramfs реконфигурирование обрабатывается автоматически. Сценарии установки ядра действительно обрабатывают все без любых проблем.
    apt-get purge linux-signed* linux-generic+
  2. Да, можно избавиться от неподписанных ядер без любых вредных воздействий, но они будут продолжать возвращаться после обновлений ядра. Это не может быть решено руководящими пакетами, но легко зафиксировать с коротким сценарием.

    #!/bin/sh
    #
    # user script: 
    /etc/kernel/postinst.d/zzz-remove-unsigned-kernel
    #
    # after a new signed kernel image is installed, this script removes
    # the unsigned image
    #
    if [ -e "$2.efi.signed" ]; then
        echo "/etc/kernel/postinst.d/zzz-remove-unsigned-kernel: removing $2"
        rm "$2";
    fi
    

Более длинные ответы

В первом случае решение действительно просто. Это работает в значительной степени, как Вы предположили бы на первый взгляд. Тем не менее я изучил некоторые полезные вещи о структуре пакета человечности для ядер. Я хотел быть уверенным, что я понял побочные эффекты или последствия, но я также точно так же, как, чтобы видеть, как создаются вещи. Так же, как примечание стороны я использую универсальное ядро, но просто подкачиваю generic для lowlatency или virtual если это - Ваша вещь. Кроме того, все здесь основано 16.10 (yakkety). Вот иерархия пакета ядра: kernel package hierarchy

  • linux-signed-generic meta пакет, означая, что он не включает кода. Это просто имеет список зависимостей, который всегда содержит полную установку новейшего обновления ядра. "Завершенный" означает все заголовки ядрa, изображение ядра, (отдельную) подпись изображения и дополнительные модули ядра для примерно каждого устройства, которое может поддерживать человечность.

  • linux-generic другой meta пакет, содержащий все те же реальные пакеты за исключением подписи изображения. Фактическое изображение ядра только содержится в linux-image-x.x.x-yy пакет. linux-signed-image-x.x.x-yy пакет просто содержит отдельную подпись, и сценарий сборки присоединяет этот сигнал к /boot/vmlinuz-x.x.x.yy-generic и создает /boot/vmlinuz-x.x.x.yy-generic.efi.signed. Сценарий не очищает неподписанное изображение.

  • Пакеты ядра имеют специальные сценарии в /etc/kernel это изменяет Кв. по умолчанию, автоудаляют поведение. Обычно, удаление linux-signed-generic отметил бы все нисходящие пакеты для автоудаления, но этого не происходит для пакетов ядра, пока нет две более новых сборки той же версии.

Во втором случае (пытающийся сохранить только изображение ядра со знаком), там, кажись, не быть никакими последствиями для удаления /boot/vmlinuz-x.x.x.yy-generic после того, как установка полна. Два изображения ядра являются точно тем же за исключением подписи, и они совместно используют весь одинаковый модули и файлы конфигурации. Однако, как только обновленное ядро установлено, оно оставит позади неподписанное изображение. К счастью, были легкие рычаги для того, чтобы запустить скрипт каждый раз, когда новое ядро установлено. Любые сценарии в /etc/kernel/postinst.d выполняются run-parts с двумя аргументами $1 версия ядра и $2 полный путь изображения (т.е. /boot/vmlinuz-x.x.x-yy-generic)

Единственный незначительный протест состоит в том, что удаление неподписанного изображения должно быть сделано после того, как личинка закончена, обновив grub.cfg. Если /boot/vmlinuz-x.x.x-yy-generic.efi.signed существует, личинка добавляет то изображение к grub.cfg и игнорирует неподписанное изображение. Однако должен быть где-нибудь в процессе, который все еще ожидает неподписанное изображение, потому что личинке не удается настроить правильно без него. Сценарий, который инициирует конфигурацию личинки, /etc/kernel/postinst.d/zz-update-grub. Я назвал свой сценарий zzz-remove-unsigned-kernel так, чтобы run-parts выполняет его после того, как все остальное будет закончено.

Править: Я использовал этот сценарий теперь с несколькими обновлениями сборки ядра, и все, кажется, хорошо работает. Я использую опцию 2 выше (удаление неподписанных ядер). Я собираюсь отметить это как корректный ответ.

5
ответ дан 1 December 2019 в 09:13

AFAIK, эти .efi.signed ядра совпадают с регулярными ядрами, за исключением того, что они подписываются с ключом Защищенной загрузки EFI Canonical. По сути, если Вы не загружаетесь с активной Защищенной загрузкой, можно безопасно удалить эти .efi.signed ядра. Если я анализирую информацию о пакете правильно, необходимо смочь удалить linux-signed-image-generic и linux-signed-generic пакеты для предотвращения будущих обновлений ядер со знаком от того, чтобы быть установленным, также.

Тем не менее лучшее решение в долгосрочной перспективе состоит в том, чтобы увеличить размер Вашего /boot раздел. Это может быть болью, и даже опасный к Вашим данным, особенно при использовании LVM или программного обеспечения RAID; однако, детали зависят очень от Вашей текущей структуры диска и планов относительно изменения того расположения по другим причинам. Обратите внимание, что, в зависимости от Вашего расположения, могло бы быть предпочтительно уменьшить раздел данных от конца и создать большее /boot раздел после того теперь съежившегося раздела данных, чем попытаться уменьшить раздел данных от запуска для создания пространства для /boot раздел для превращения.

Наконец, если Вы являетесь достаточно отчаянными для освобождения нескольких мегабайтов, что Вы смотрите на дублированные файлы в /boot/grub дерево каталогов, Вы могли бы рассмотреть отодвигание от GRUB в целом. Большинство других загрузчиков не требует столько в способе файлов в /boot, сколько GRUB делает. Если Вы загружаетесь в режиме EFI, мои собственные повторно находят, что диспетчер начальной загрузки , вероятно, будет самым легким установить, и можно попробовать его на Карте памяти или CD-R для наблюдения то, на что он похож прежде, чем унавозить с жестким диском. Если Вы загружаетесь в режиме BIOS, LILO, SYSLINUX, и даже Наследие GRUB является всеми опциями, но у меня нет указателей на инструкции относительно того, как установить любого из них, бесцеремонно.

2
ответ дан 1 December 2019 в 09:13

.. ядра со знаком немного больше, поэтому если Вы не работаете с безопасной включенной начальной загрузкой и пытаетесь оставить свободное место, используйте неподписанное и произведите чистку со знаком. Я также думаю, что Ваш подход с восстановлением личинки будет работать. Если необходимо потерять питание, прежде чем grub.cfg восстановят, можно всегда редактировать старое меню личинки и удалять часть со знаком. Конечно, можно оставить одну подписанную версию (последнее) и избавиться от других, чтобы видеть, работают ли вещи как ожидалось, то делают это снова для последнего, никогда не оставляя Вас без известной загрузочной установки. Что касается unicode.pf2 файлов - они существуют в моей системе также. Вы могли попытаться заменить один ссылкой на другой (с загрузочным носителем, удобным в случае, если необходимо отложить файл, где ссылка).

0
ответ дан 1 December 2019 в 09:13

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

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