Qubes OS - 更新模板内核

Qubes OS - 更新模板内核

我正在尝试按照官方文档更新 Debian 模板中的内核Qubes OS,但似乎我遗漏了某些内容或做错了一些事情。

我在用着gcc 6.3.0



Qubes 文档:
在 Debian VM 中安装内核

在基于 Debian 的 VM 中,您需要安装 qubes-kernel-vm-support 软件包。该软件包包括启动 Qubes VM 所需的额外内核模块和 initramfs 添加(有关详细信息,请参阅模板实现)。此外,您还需要一些 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 <kernel-version> # replace this <kernel-version> with actual kernel version
sudo update-initramfs -u

安装内核后,需要创建 GRUB 配置。您可能需要调整 /etc/default/grub 中的一些设置,例如降低 GRUB_TIMEOUT 以加快 VM 启动速度。然后您需要生成实际配置:在 Fedora 中,可以使用 update-grub2 工具来完成:

sudo mkdir /boot/grub
sudo update-grub2

然后关闭虚拟机。从现在开始,您可以将 pvgrub2 设置为 VM 内核,它将启动 VM 中配置的内核。



Debian 文档:
不要害怕尝试编译内核。这既有趣又有利可图。

要以 Debian 方式编译内核,您需要一些软件包:fakeroot、kernel-package、linux-source-version。

此后,我们假设您可以自由控制您的计算机,并将您的内核源代码提取到您的主目录中的某个位置[22]。确保您位于要解压内核源代码的目录中,使用 tar xf /usr/src/linux-source-version.tar.xz 解压它们,然后更改为之前的 linux-source-version 目录创建的。

现在,您可以配置内核。如果 X11 已安装、配置并正在运行,请运行 make xconfig;否则运行 make menuconfig (您需要安装 libncurses5-dev)。花时间阅读在线帮助并仔细选择。如有疑问,通常最好包含您不确定的设备驱动程序(管理硬件外围设备的软件,例如以太网卡、SCSI 控制器等)。请注意:与特定硬件无关的其他选项如果您不理解,则应保留默认值。不要忘记在“Loadable module support”中选择“Kernel module loader”(默认情况下不选择)。如果不包括在内,您的 Debian 安装将会遇到问题。

清理源代码树并重置内核包参数:

make-kpkg clean

现在,编译内核:

fakeroot make-kpkg --initrd

编译完成后,您可以像安装任何软件包一样安装自定义内核。以 root 身份执行 dpkg -i ../linux-image-version-subarchitecture.deb。例如,System.map 将被正确安装,并且 /boot/config-3.16 将被安装,其中包含您当前的配置集。您的新内核包也足够聪明,可以自动更新您的引导加载程序以使用新内核。如果您创建了模块包,则还需要安装该包。



Debian 方式输出:

...
...
...
This is kernel package version 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: error: illegal package name 'linux-image-4.8.15-rt10-11.pvops.qubes.x86_64':
                 character '_' not allowed
debian/ruleset/targets/image.mk:230: recipe for target 'debian/stamp/binary/linux-image-4.8.15-rt10-11.pvops.qubes.x86_64' failed
make: *** [debian/stamp/binary/linux-image-4.8.15-rt10-11.pvops.qubes.x86_64] Error 255



手动编译:
我从 Debian 下载linux-source-4.8并将其解压为/usr/src.

然后:

make defconf
make menuconf   # custom settings
make

与上面相同的错误:

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



我认为这个问题很容易解决,但是如果我可以手动编译内核,那么我应该如何进行呢?
make installmake modules_install必需的还是我必须dkms autoinstall直接使用?这个没有具体规定...



更新:

直接安装 Debian 软件包linux-image-amd64会使控制台消失并且虚拟机无法正常工作,我尝试重新启动它,但只能通过连接到串行控制台来使用它。
我注意到dpkg安装过程中崩溃了,所以我运行dpkg --configure -a并完成了安装,但它显示了一条警告消息,告诉您initramfs机器将永远不会启动,事实上我更新GRUB并重新启动,但initramfs无法安装 root。

答案1

AFAIK Qubes-OS 不使用 VM 内部的内核来启动 VM。相反,它使用位于 Dom0 中的自己的内核。

相关内容