Вопрос или проблема
Я пытаюсь обновить ядро в шаблоне 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
-
Установка необходимых пакетов:
Подготовьте шеблон Debian для обновления ядра, установив необходимые пакеты. Это можно сделать с помощью следующих команд:sudo apt-get update sudo apt-get install qubes-kernel-vm-support grub2-common
-
Установка ядра:
Вам необходимо установить желаемое ядро. Если вы используете стандартное ядро, например, пакетlinux-image-amd64
, то инициализация и управление initramfs будет выполнено автоматически. В противном случае, если вы создаете ядро самостоятельно, выполните следующие команды:sudo dkms autoinstall -k <kernel-version> # Убедитесь, что заменили <kernel-version> на актуальную версию ядра. sudo update-initramfs -u
-
Создание конфигурации GRUB:
После установки ядра необходимо создать конфигурацию GRUB. Для этого вы можете отредактировать файл/etc/default/grub
для настроек, таких как уменьшение времени ожидания GRUB. Затем выполните следующие команды:sudo mkdir /boot/grub sudo update-grub2
-
Завершение работы ВМ:
После завершения всех предыдущих шагов, перезагрузите виртуальную машину (ВМ). Теперь вы можете задать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 и активация сообществ разработчиков поможет вам находить решения проблем быстрее.