Qubes OS – Обновление шаблонного ядра

Вопрос или проблема

Я пытаюсь обновить ядро в шаблоне Debian для Qubes OS, следуя официальной документации, но, похоже, я что-то упустил или делаю что-то не так.

Я использую gcc 6.3.0.


Документация Qubes:

Установка ядра в Debian VM

В Debian-основанной VM вам нужно установить пакет qubes-kernel-vm-support. Этот пакет включает необходимые дополнительные модули ядра и дополнения к initramfs, необходимые для запуска Qubes VM (подробности см. в реализации шаблона). Кроме того, вам понадобятся некоторые инструменты GRUB для создания его конфигурации. Примечание: вам не нужен фактический загрузчик grub, так как его предоставляет dom0. Но наличие одного также не повредит.

sudo apt-get update
sudo apt-get install qubes-kernel-vm-support grub2-common

Затем установите любое ядро, которое вам нужно. Если вы используете пакет ядра дистрибутива (пакет linux-image-amd64), initramfs и модуль ядра должны обрабатываться автоматически. Если нет, или если вы собираете ядро вручную, сделайте это с помощью dkms и initramfs-tools:

sudo dkms autoinstall -k <версия-ядра> # замените <версия-ядра> на фактическую версию ядра
sudo update-initramfs -u

Когда ядро установлено, вам нужно создать конфигурацию GRUB. Вам может потребоваться отрегулировать некоторые настройки в /etc/default/grub, например, уменьшить GRUB_TIMEOUT, чтобы ускорить запуск VM. Затем вам нужно сгенерировать фактическую конфигурацию: в Fedora это можно сделать с помощью инструмента update-grub2:

sudo mkdir /boot/grub
sudo update-grub2

Затем выключите VM. С этого момента вы можете установить pvgrub2 в качестве ядра VM, и оно запустит конфигурированное в VM ядро.


Документация Debian:

Не бойтесь попробовать скомпилировать ядро. Это весело и прибыльно.

Чтобы скомпилировать ядро по методу Debian, вам понадобятся некоторые пакеты: fakeroot, kernel-package, linux-source-version.

Ниже мы будем считать, что вы имеете полную свободу действий на вашем компьютере и будете извлекать исходники ядра куда-нибудь в вашей домашней директории[22]. Убедитесь, что вы находитесь в директории, куда хотите разархивировать исходники ядра, извлеките их с помощью tar xf /usr/src/linux-source-version.tar.xz и перейдите в директорию linux-source-version, которая будет создана.

Теперь вы можете настроить ваше ядро. Запустите make xconfig, если установлен X11, настроен и запущен; иначе запустите make menuconfig (вам понадобится установленный libncurses5-dev). Не торопитесь прочитать онлайн справку и выбирайте осторожно. В случае сомнений обычно лучше включить драйвер устройства (программное обеспечение, управляющее аппаратными периферийными устройствами, такими как сетевые карты, SCSI контроллеры и так далее), по которому у вас нет уверенности. Будьте осторожны: другие параметры, не относящиеся к конкретному оборудованию, должны оставаться на значении по умолчанию, если вы не понимаете их. Не забудьте выбрать “Загрузчик модулей ядра” в “Поддержка загружаемых модулей” (по умолчанию он не выбран). Если он не включен, ваша установка Debian столкнется с проблемами.

Очистите дерево исходников и сбросьте параметры ядра-пакета:

make-kpkg clean

Теперь скомпилируйте ядро:

fakeroot make-kpkg --initrd

После завершения компиляции вы можете установить ваше пользовательское ядро как любой пакет. Как root, выполните dpkg -i ../linux-image-version-subarchitecture.deb. Например, файл System.map будет правильно установлен, а /boot/config-3.16 будет установлен, содержащий вашу текущую конфигурацию. Ваш новый пакет ядра также достаточно умен, чтобы автоматически обновить ваш загрузчик для использования нового ядра. Если вы создали пакет модулей, вам нужно будет установить и этот пакет.


Вывод способом Debian:

...
...
...
Это версия пакета ядра 13.014+nmu1.
install -p -d -o root -g root  -m  755 /usr/src/linux-source-4.8/debian/linux-image-4.8.15-rt10-11.pvops.qubes.x86_64/DEBIAN
sed -e 's/=V/4.8.15-rt10-11.pvops.qubes.x86_64/g'    -e 's/=IB//g' \
    -e 's/=ST/linux/g'  -e 's/=R//g' \
        -e 's/=KPV/13.014+nmu1/g'                       \
    -e 's/=K/vmlinuz/g'          \
    -e 's/=I/YES/g'     -e 's,=D,/boot,g'        \
    -e 's@=A@amd64@g'   \
    -e 's@=B@x86_64@g'     \
...
dpkg-gencontrol: ошибка: недопустимое имя пакета 'linux-image-4.8.15-rt10-11.pvops.qubes.x86_64':
                 символ '_' не разрешен
debian/ruleset/targets/image.mk:230: рецепт для цели 'debian/stamp/binary/linux-image-4.8.15-rt10-11.pvops.qubes.x86_64' потерпел неудачу
make: *** [debian/stamp/binary/linux-image-4.8.15-rt10-11.pvops.qubes.x86_64] Ошибка 255


Ручная компиляция:

Я загрузил linux-source-4.8 из Debian и извлек его в /usr/src.

Затем:

make defconf
make menuconf   # пользовательские настройки
make

Та же ошибка, что и выше:

dpkg-gencontrol: ошибка: недопустимое имя пакета 'linux-image-4.8.15-rt10-11.pvops.qubes.x86_64':
                 символ '_' не разрешен


Я думаю, что это можно легко решить, но если я могу скомпилировать ядро вручную, то как мне действовать?

Необходимы make install и make modules_install, или я должен использовать dkms autoinstall напрямую? Это не указано…

ОБНОВЛЕНИЕ:

Прямой установкой пакета Debian linux-image-amd64 приводит к исчезновению консоли, и VM работает неправильно, я пытался перезагрузить его, но мог использовать его только через подключение к серийному консоли.

Я заметил, что dpkg выдал ошибку во время установки, поэтому я запустил dpkg --configure -a и завершил установку, но он выдал предупреждение о том, что с этим initramfs машина никогда не загрузится, на самом деле я обновил GRUB и перезагрузил, но initramfs не смог смонтировать корневую файловую систему.

Насколько я понимаю, Qubes-OS не использует ядро, находящееся внутри VM, для загрузки VM. Вместо этого оно использует собственные ядра, расположенные в Dom0.

Ответ или решение

Обновление ядра шаблона в Qubes OS на основе Debian

Обновление ядра в шаблоне Debian в Qubes OS может быть несколько сложным процессом, особенно если вы впервые имеете дело с этой задачей. В данной статье мы проанализируем необходимые шаги, чтобы успешно обновить ядро в Debian Template, и разобрать ошибки, с которыми вы можете столкнуться в процессе.

Шаги по обновлению ядра в шаблоне Debian

  1. Установка необходимых пакетов:
    Подготовьте шеблон Debian для обновления ядра, установив необходимые пакеты. Это можно сделать с помощью следующих команд:

    sudo apt-get update
    sudo apt-get install qubes-kernel-vm-support grub2-common
  2. Установка ядра:
    Вам необходимо установить желаемое ядро. Если вы используете стандартное ядро, например, пакет linux-image-amd64, то инициализация и управление initramfs будет выполнено автоматически. В противном случае, если вы создаете ядро самостоятельно, выполните следующие команды:

    sudo dkms autoinstall -k <kernel-version>  # Убедитесь, что заменили <kernel-version> на актуальную версию ядра.
    sudo update-initramfs -u
  3. Создание конфигурации GRUB:
    После установки ядра необходимо создать конфигурацию GRUB. Для этого вы можете отредактировать файл /etc/default/grub для настроек, таких как уменьшение времени ожидания GRUB. Затем выполните следующие команды:

    sudo mkdir /boot/grub
    sudo update-grub2
  4. Завершение работы ВМ:
    После завершения всех предыдущих шагов, перезагрузите виртуальную машину (ВМ). Теперь вы можете задать pvgrub2 как ядро ВМ, и оно будет запускать ядро, сконфигурированное внутри ВМ.

Возможные ошибки и решения

Ошибка при создании пакета

Ошибка, с которой вы столкнулись:

dpkg-gencontrol: error: illegal package name 'linux-image-4.8.15-rt10-11.pvops.qubes.x86_64': character '_' not allowed

указывает на то, что имя пакета содержит недопустимый символ (_). Чтобы устранить эту ошибку, убедитесь, что вы используете корректный формат наименования пакета. Избегайте использования подчеркивания в имени пакета. Например, создавайте пакеты в формате linux-image-4.8.15-rt10-11.pvops.qubes.x86_64 без символов, запрещенных в названиях пакетов. В этом случае, попробуйте изменить имя ядра или отредактировать спек-файл, чтобы исключить символ _.

Проблемы с initramfs

Если после установки ядра с использованием apt Ваша консоль исчезает или ВМ работает некорректно, убедитесь, что все зависимости пакетов установлены корректно. Если dpkg завершился с ошибками, вам следует выполнить следующую команду, чтобы исправить любые проблемы с конфигурацией пакетов:

sudo dpkg --configure -a

Это действие попытаться завершить установку пакетов, которые могли быть прерваны или не полностью установлены. Однако учтите, что установка некорректных версий пакетов, особенно встроенных устройств, может привести к сбоям в загрузке.

Заключение

В итоге, обновление ядра в шаблоне Debian в Qubes OS требует серьезного внимания к деталям, а также аккуратного подхода к редактированию конфигураций и установке необходимых пакетов. Если у вас возникают сложности, возможно, стоит пересмотреть процесс установки и убедиться, что все зависит от версии и статуса пакетов в вашей системе. Если все шаги выполнены правильно, вы должны получить функционирующее ядро в вашем Debian Template.

Рекомендации

Чтобы избежать затруднений в будущем, старайтесь следовать официальной документации шаг за шагом и постоянно обновлять ваши знания о системных требованиях и рекомендациях. Исследование форума Qubes OS и активация сообществ разработчиков поможет вам находить решения проблем быстрее.

Оцените материал
Добавить комментарий

Капча загружается...