我在 Nimbix 工作,可以访问一些非常强大的多核系统,我打算做一个内核编译服务。
make -j32
该系统最多可以有 128 个内核,在我使用 32 个内核进行的初始测试中,我可以非常快地编译 - 这是Linux 4.8.12 的时间:
real 2m16.366s
user 29m18.732s
sys 2m28.616s
在我的 Dell Precision 6500 笔记本电脑上,大约 25 分钟后它仍然没有编译。
我的第一个测试是尝试为我自己的系统(Arch Linux)构建内核。
我将 bzImage 目录/lib/modules
从远程系统复制到我的系统。
现在,当我尝试执行 a 时,mkinitcpio
出现错误:
==> ERROR: '/lib/modules/4.8.14-2-ck-nehalem' is not a valid kernel module directory
(我从 /proc/config.gz 获取了基本内核 .config 文件 - 我有 ck-nehalem 内核版本)
我该如何让它发挥作用?将模块从另一个系统传输到构建 initramfs 映像的系统的一般方法是什么? initramfs 也可以远程构建吗?
稍微切题一下,这样的内核编译服务对内核开发人员和修补者有用吗?使用计算集群的成本约为每小时 3 美元,因此一次编译最终几乎不需要任何成本。
答案1
所以我正在回答我自己的问题,以防对其他人有用。
只要你运行,你绝对可以远程构建一个initramfs
make modules_install
在远程系统上 - 然而,我永远无法让图像包含我需要的模块 - 特别是 md raido 的东西。 ,我无法创建可以启动我的系统的 initramfs。但我认为如果你在 mkinitcpio.conf 中明确提及所有模块就可以完成
一些模块(例如 nvidia)还需要运行 dkms 来构建所需的模块。
如果将 /lib/modules/ 中的模块复制到本地系统,则必须重新创建链接build
并source
指向包含 Linux 内核源代码的目录 - 在远程端创建的链接将无效。
答案2
关于 initramfs 中缺少的 md raid 模块 - 还有一种方法可以打开 initramfs 文件并添加您需要的任何模块,然后根据原始文件重新创建一个新的 initramfs,但这次包括您添加的模块。我在 Fedora 中做过几次,我相信在 Arch linux 中也可以做到。或者,也许可以通过配置 mkinitcpio.conf 文件或通过 mkinitcpio 的参数来完成。
拉米·罗森
答案3
您应该在本地编译内核并将编译后的内核构建为 .deb/.rpm 包并在远程安装。就像从存储库安装二进制内核一样。