那个问题:编译 kernel.org 内核并将其安装到磁盘上的自定义卷部分回答了我的问题,但不完全!
我有一个30GB容量的磁盘。它有 2 个分区
- 2GB 分区 (
/dev/sda1
) 包含 Debian - 28GB 分区 (
/dev/sda2
) 完全为空(已格式化,文件系统为ext4
)
我想编译并安装 kernel.org 内核(https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.10.78.tar.xz)/dev/sda2
并在我的 Debian 和新内核之间设置双启动
迄今为止:
我将第二个分区安装到/mnt
(即)并在其中mount /dev/sda2 /mnt
创建了一个目录(即我有目录)/src
/mnt/src
当在/mnt/src
,
我下载了内核并解压了它
wget --no-check-certificate https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.10.78.tar.xz
unxz -v linux-5.10.78.tar.xz
tar xvf linux-5.10.78.tar
我还安装了必要的工具来编译和安装内核
apt-get update
apt-get install build-essential libncurses-dev bison flex libssl-dev libelf-dev
当在/mnt/src/linux-5.10.78
我将现有的 Debian 内核配置复制到当前目录(即cp -v /boot/config-$(uname -r) .config
),然后运行make olddefconfig
(想法是使用我现有的配置并为其他所有内容提供默认值)。我也取消选中该Avoid speculative indirect branches in kernel
选项,因为我You are building kernel with non-retpoline compiler, please update your compiler.. Stop.
在 期间点击了make
。
然后我make -j 4
又跑了起来,等待它结束。
之后,我INSTALL_MOD_PATH=/mnt INSTALL_PATH=/mnt/boot make modules_install
按照上面链接的问题的建议运行安装必要的模块。
我的问题是,现在当我运行时update-initramfs
它会失败,因为它找不到/lib/modules/5.10.78
文件夹。显然,情况就是如此/mnt/lib/modules/5.10.78
。我尝试提供不同的根路径(使用-b
选项),但这不起作用。我也尝试过,但是,我实际上chroot
没有必要的设置/可执行文件。/mnt
chroot
经过上述“修复”后,我希望运行update-grub
能够发现内核映像、用于启动它的根文件系统和配置文件,并设置好一切,以便在重启后我可以同时获得两个启动选项(Debian 和新内核)。
任何有关这两者以及之后实际 grub 配置的帮助update-initramfs
将不胜感激!我到处都找到了链接,但它们总是对该过程的高度概述。
答案1
安装最小 Debian 系统的最简单方法之一是,debootstrap bullseye /mnt
bullseye 是您寻求的版本以及/mnt
您希望安装它的路径。
它需要一个内核,并且您的过程似乎是正确的。仅复杂的引导顺序需要 Initramfs 或 initrd:通常是 RAID 阵列中的根目录。我的服务器上没有任何东西并且工作正常。 (请注意,您的根文件系统类型不得编译为模块,而是嵌入到内核中)。
您还应该在您的/boot/grub/grub.cfg
.通常 :
menuentry "Alternate Debian , kernel 5.10.78" {
insmod part_msdos
insmod ext2
set root='hd0,msdos2'
linux /boot/vmlinuz-5.10.78 root=/dev/sda2 ro
}
insmod part_msdos
如果您有旧的分区方案,则需要。在UEFI系统上,应该是insmod part_gpt
,但是我不太了解。insmod ext2
允许 grub 读取 ext2(或 ext4)文件系统。
set root=
指示 grub 应在哪个分区上搜索 /boot/vmlinuz-5.10.78 (检查实际名称:它可能会有所不同),linux
指示它应引导后面的内核,root=/dev/sda2
指示您未来的根目录。
如果你真的想要一个更小的替代系统,也许 Gentoo 是更好的方法,但我只知道它的名字。你应该从 开始debootstrap
。