10 个版本

0.4.3 2022 年 11 月 15 日
0.4.2 2022 年 11 月 11 日
0.4.0 2022 年 10 月 28 日
0.3.6 2022 年 10 月 27 日

#10#fedora

每月 29 次下载

GPL-2.0-or-later

33KB
484

Podmod

crates.io Downloads GitHub Stars Issues License

podmod 为 Fedora 上的内核模块提供了一种容器化构建方法,主要针对 Silverblue / Kinoite 和 CoreOS 等不可变操作系统。

podmodPodman 容器内部从源代码构建内核模块,并允许您加载它而无需修改主机文件系统的任何部分。它提供了一个 Rust 前端,可以从 Containerfile 中获取模块的构建步骤,然后加载和卸载模块。过程是

  • 您使用内核模块的名称调用 podmod build
  • podmod 读取配置文件(默认:/etc/podmod.conf)以获取构建和内核参数。
  • podmodshare/modules/ 中搜索模块,并将其作为新容器镜像的一部分构建。
  • 然后,您可以使用 podmod loadpodmod unload 加载或卸载模块。 podmod 将从容器内部调用 insmod(8)rmmod(8) 在主机上加载或卸载模块。

感兴趣? 从这里开始。

常见问题解答

这难道不是太黑客了吗?

并不完全如此。 容器并非虚拟机,虚拟机中的客户操作系统拥有自己的内核,并分配有独立的内存空间进行管理,并且可能完全不知道自己在被虚拟化。相反,Podman 或 Docker 等容器引擎使用 Linux 命名空间 创建一种类似 chroot(1) 的环境,拥有隔离的进程和网络空间。否则,与直接在宿主机上运行相同的命令并无区别。内核模块的构建方式相同,容器内外使用的内核也是相同的。

以这种方式构建内核模块也并非全新的概念。《jdoss/atomic-wireguard》采用了相同的方法。在 Project Atomic 网站上甚至有一篇关于使用 Podman 构建内核模块的文章(该网站现已弃用,转而使用 CoreOS)。然而,内核模块的常规限制仍然适用。主要的是,模块需要为 特定 的内核版本构建,并且每次更新都必须重新构建。

这会在 Fedora 的其他版本上工作吗?

这仅在 Silverblue / Kinoite 36 上进行了测试,但 理论上 也适用于其他版本,包括 Workstation、Server 和 CoreOS。将其视为 dkms(8) 的替代方案,适用于所涉及的模块尚未为 Fedora 打包,或根文件系统不可写的情况。

这会在 Fedora 之外的分发版上工作吗?

不会。 这些模块是针对 Fedora 的内核软件包从 Koji 构建的,与其他分发版不兼容。此限制还排除了 Fedora 的下游分发版,如 CentOSRHEL

您可以将 podmod 修改为使用针对其他分发版的不同 Containerfiles。

入门指南

安装

安装说明以及从源代码构建 podmod 的说明可以在 这里 找到。

基本用法

要获取有关使用 podmod 的帮助,请运行

# podmod --help

您还可以参考 podmod(8) 手册页。

要构建内核模块,请运行

$ podmod build -m <MODULE>

之后,您可以使用以下命令加载它

$ podmod load -m <MODULE>

podmod 还附带一个 systemd 服务文件,用于在启动时加载和卸载模块

$ systemctl enable podmod@<MODULE>.service

注意: 模块必须已经使用 podmod build 在系统上手动构建。否则,单元将失败。

许可证

本程序是自由软件:您可以在自由软件基金会发布的 GNU 通用公共许可证的条款下重新分发和/或修改它,无论是许可证的第 2 版,还是(根据您的选择)任何后来的版本。

本程序根据希望它有用的原则分发,但没有任何保证;甚至没有关于其可销售性或适用于特定用途的隐含保证。有关详细信息,请参阅 GNU 通用公共许可证。

您应该已经收到了一份 GNU 通用公共许可证副本。如果没有,请参阅 https://www.gnu.org/licenses/

依赖项

~5MB
~101K SLoC