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 次下载
33KB
484 行
Podmod
- GitHub: https://github.com/ahgencer/podmod
- Copr: https://copr.fedorainfracloud.org/coprs/ahgencer/podmod/
- crates.io: https://crates.io/crates/podmod
- 问题: https://github.com/ahgencer/podmod/issues
podmod 为 Fedora 上的内核模块提供了一种容器化构建方法,主要针对 Silverblue / Kinoite 和 CoreOS 等不可变操作系统。
podmod 在 Podman 容器内部从源代码构建内核模块,并允许您加载它而无需修改主机文件系统的任何部分。它提供了一个 Rust 前端,可以从 Containerfile 中获取模块的构建步骤,然后加载和卸载模块。过程是
- 您使用内核模块的名称调用
podmod build
。 - podmod 读取配置文件(默认:
/etc/podmod.conf
)以获取构建和内核参数。 - podmod 在
share/modules/
中搜索模块,并将其作为新容器镜像的一部分构建。 - 然后,您可以使用
podmod load
或podmod 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 的下游分发版,如 CentOS 和 RHEL。
您可以将 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