我有一个内核模块,我想分发它(即打包它)。
我想分发它,以便用户除了yum/dnf install kmod-mymodule
.
- SRPM:用户必须在其机器上构建 RPM,然后安装 RPM。我不能把它放在 yum 存储库中
- RPM:我必须为 RHEL 的所有主要和次要版本构建 RPM。
- DKMS:可能是解决方案,但它希望用户知道如何使用 dkms,而不是那么透明。
有什么方法可以轻松分发内核模块,以便用户只需要yum install kmod-mymodule
为特定机器编译模块?
如果有与分发无关的解决方案,我洗耳恭听!
争论最用户友好的方式
但从客户的角度来看,这可能是正确的方法。单包,干净,即时,无依赖,安装。
您可能需要覆盖 6 到 12 个版本——所有版本都具有相同的 SRPM。您可以将该 SRPM 上传到您自己在Copr上的项目,并让 IBM 支付构建您的模块所需的电费,或者您可以在运行的 shell 脚本中有一个循环
for config in /etc/mock/rhel+epel-{7,8,9}-{x86_64,aarch64}.cfg ; do mock --rebuild ${your SRPM here} -r ${config} ; done
(您可能需要稍微调整 /etc/ 中的模板模拟给你不同的 RHEL 未成年人)。或者不使用 mock 来设置隔离的构建环境,而是在自己的容器、VM 或现场可用的任何环境中进行。
自动化目标 RPM 构建。
您需要使用akmods,这样您的二进制内核模块 RPM 会在每次内核更新(以及首次安装)时自动重建。
这样,您的用户无需执行任何操作,只需安装一个 akmod 包,该包将依赖于内核标头包,该包会与内核一起自动更新。它还将取决于必要的构建工具(C 编译器等)。
rpmfusion 的Packaging Kernel Modules as akmods进行了(仅一点点)详细介绍。最后,akmod 只是一种自动构建 kmod RPM 的方法。
最好看一个实际的例子。该
v4l2loopback-kmod
软件包包含一个第三方内核模块,该模块将视频环回功能添加到 Linux 内核的 v4l2 相机基础结构中。您可以在此处找到规范以及其余的打包文件。