我有一个内核模块,我想分发它(即打包它)。
我想分发它,以便用户不需要执行任何其他操作yum/dnf install kmod-mymodule
。
- SRPM:用户必须在其计算机上构建 RPM,然后安装 RPM。我无法将其放入 yum 存储库中
- RPM:我必须为 RHEL 的所有主要和次要版本构建 RPM。
- DKMS:可能是解决方案,但它希望用户知道如何使用 dkms,而不是那么透明。
有什么方法可以轻松分发内核模块,以便用户只需要做yum install kmod-mymodule
即可为特定机器编译模块?
如果有一个与分发无关的解决方案,我洗耳恭听!
答案1
争论最用户友好的方式
RPM:我必须为 RHEL 的所有主要和次要版本构建 RPM。
但从客户的角度来看,这可能是正确的方法。单包、干净、即时、无依赖、安装。
您可能需要覆盖 6 到 12 个版本 - 所有版本都具有相同的 SRPM。您可以将该 SRPM 上传到您自己的项目铜让 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/mock 中稍微调整模板以提供不同的 RHEL 次要版本)。
或者,您可以在自己的容器、虚拟机或现场可用的任何内容中进行设置,而不是使用模拟来设置隔离的构建环境。
自动构建目标 RPM。
你会想要使用阿克莫兹,以便每次更新内核(以及第一次安装)时,您的二进制内核模块 RPM 都会自动重建。
这样,您的用户无需执行任何操作,只需安装 akmod 包即可,该包将依赖于内核标头包,该包会与内核一起自动更新。它还取决于必要的构建工具(C 编译器等)。
rpmfusion 的将内核模块打包为 akmod更详细地介绍(仅一点点)。最后,akmod 只是自动构建 kmod RPM 的一种方法。
最好看一下实际的例子。该v4l2loopback-kmod
软件包包含一个第三方内核模块,该模块为 Linux 内核的 v4l2 摄像头基础设施添加了视频环回功能。您可以找到规范以及其余的打包文件,这里。