{"id":15284104,"url":"https://github.com/ahgencer/podmod","last_synced_at":"2026-01-20T01:21:28.535Z","repository":{"id":61302040,"uuid":"543975949","full_name":"ahgencer/podmod","owner":"ahgencer","description":"Containerized build system for kernel modules on Fedora.","archived":false,"fork":false,"pushed_at":"2022-11-20T19:07:16.000Z","size":126,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"v1.x","last_synced_at":"2025-02-12T07:00:32.335Z","etag":null,"topics":["fedora","kernel-module","linux","podman","silverblue"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ahgencer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-10-01T09:57:37.000Z","updated_at":"2023-06-21T16:40:42.000Z","dependencies_parsed_at":"2023-01-22T06:03:00.101Z","dependency_job_id":null,"html_url":"https://github.com/ahgencer/podmod","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahgencer%2Fpodmod","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahgencer%2Fpodmod/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahgencer%2Fpodmod/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahgencer%2Fpodmod/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ahgencer","download_url":"https://codeload.github.com/ahgencer/podmod/tar.gz/refs/heads/v1.x","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247419871,"owners_count":20936013,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fedora","kernel-module","linux","podman","silverblue"],"created_at":"2024-09-30T14:49:13.843Z","updated_at":"2026-01-20T01:21:28.493Z","avatar_url":"https://github.com/ahgencer.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003ePodmod\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://copr.fedorainfracloud.org/coprs/ahgencer/podmod/\"\u003e\n        \u003cimg alt=\"Copr\" src=\"https://img.shields.io/badge/Copr-ahgencer%2Fpodmod-51a2da\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://crates.io/crates/podmod\"\u003e\n        \u003cimg alt=\"crates.io Downloads\" src=\"https://img.shields.io/crates/d/podmod?label=crates.io%20Downloads\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/ahgencer/podmod\"\u003e\n        \u003cimg alt=\"GitHub Stars\" src=\"https://img.shields.io/github/stars/ahgencer/podmod?label=GitHub%20Stars\"\u003e\n    \u003c/a\u003e\n    \u003cbr\u003e\n    \u003ca href=\"https://github.com/ahgencer/podmod/issues\"\u003e\n        \u003cimg alt=\"Issues\" src=\"https://img.shields.io/github/issues/ahgencer/podmod/open?label=Issues\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/ahgencer/podmod#license\"\u003e\n        \u003cimg alt=\"License\" src=\"https://img.shields.io/github/license/ahgencer/podmod?label=License\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/ahgencer/podmod#contributing\"\u003e\n        \u003cimg alt=\"Community Built\" src=\"https://img.shields.io/badge/Made%20with-%E2%9D%A4-red\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n*podmod provides a containerized method for building kernel modules on Fedora, mainly targeting immutable operating\nsystems such as Silverblue / Kinoite and CoreOS.*\n\n*podmod* builds kernel modules from source inside a [Podman](https://podman.io/) container and allows you to load it\nwithout modifying any part of the filesystem on the host. It provides a [Rust](https://rust-lang.org/) frontend that can\nsources the build steps of a module from a Containerfile, and then load and unload the module. The process is:\n\n- You call `podmod build` with the name of the kernel module.\n- *podmod* reads the configuration file (default: `/etc/podmod.conf`) for build and kernel arguments.\n- *podmod* searches `share/modules/` for the module and builds it as part of a new container image.\n- You can then load or unload the module with `podmod load` or `podmod unload`. *podmod* will\n  call [insmod(8)](https://manpages.org/insmod/8) or [rmmod(8)](https://manpages.org/rmmod/8) from **inside** the\n  container to load or unload the module on the host.\n\nInterested? [Here's how to get started.](#getting-started)\n\n## FAQ\n\n### Isn't this super hacky?\n\n**Not really.** Containers aren't virtual machines, where the guest operating system has its own kernel, gets assigned\nits own memory space to manage, and may be completely unaware that it's being virtualized. Instead, container engines\nsuch as Podman or [Docker](https://docker.com/) use [Linux namespaces](https://en.wikipedia.org/wiki/Linux_namespaces)\nto make a sort of [chroot(1)](https://manpages.org/chroot) with an isolated process and network space. Otherwise, its no\ndifferent from running the same command directly on the host. The kernel module is built the same way, and the kernel is\nthe same inside and outside the container.\n\nBuilding kernel modules this way is not a brand-new concept,\neither. [jdoss/atomic-wireguard](https://github.com/jdoss/atomic-wireguard) takes the same approach. There's even\nan [article](https://projectatomic.io/blog/2018/06/building-kernel-modules-with-podman/) on building kernel modules with\nPodman on the [Project Atomic](https://projectatomic.io/) website (which is now deprecated in favor of CoreOS). However,\nthe usual restrictions for kernel modules still apply. Mainly, the module needs to be built for a **specific** kernel\nversion, and must be rebuilt with every update.\n\n### Will this work on other editions of Fedora?\n\nThis has only been tested on Silverblue / Kinoite (36 to 37), but **will theoretically work** on other editions as well,\nincluding Workstation, Server, and CoreOS. Think of it as an alternative to [dkms(8)](https://manpages.org/dkms/8), for\ncases where the module in question is either not packages for Fedora yet, or when the root filesystem is not writable.\n\n### Wil this work on distributions other than Fedora?\n\n**No.** The modules are built against Fedora's kernel packages from [Koji](https://koji.fedoraproject.org/koji/) and are\nincompatible with other distributions. This restriction also excludes distributions that are downstream from Fedora,\nsuch as [CentOS](https://centos.org/) and [RHEL](https://redhat.com/en/technologies/linux-platforms/enterprise-linux).\n\nYou are, of course, welcome to adapt *podmod* to use different Containerfiles targeting other distributions. If you do,\nplease consider [upstreaming your changes](#contributing) so that everyone can benefit from them!\n\n## Getting started\n\n### Installation\n\nInstallation instructions, as well as instructions for building *podmod* from source, can be\nfound [here](docs/INSTALL.md).\n\nThe latest additions to *podmod* are outlined in the changelog found [here](docs/CHANGELOG.md).\n\n### Basic Usage\n\nTo get help on using *podmod*, run:\n\n    # podmod --help\n\nYou may also refer to the manpage [podmod(8)](docs/podmod.8).\n\nTo build a kernel module, run:\n\n    $ podmod build -m \u003cMODULE\u003e\n\nAfterwards, you can load it with:\n\n    $ podmod load -m \u003cMODULE\u003e\n\n*podmod* also ships with a [systemd](https://systemd.io/) service file to load and unload a module at boot time:\n\n    $ systemctl enable podmod@\u003cMODULE\u003e.service\n\n\u003e **Note:** The module must have already been built manually on the system using `podmod build`. Otherwise, the unit\n\u003e will fail.\n\n## Contributing\n\nFound a bug or a missing feature? You can report it at the [issue tracker](https://github.com/ahgencer/podmod/issues).\n\nPlease keep in mind that *podmod* is still in the early alpha stages, and large changes are often made without warning.\nIt is not meant for public use yet. The source code is made available mostly only as a preview.\n\n## License\n\nThis program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public\nLicense as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later\nversion.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied\nwarranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with this program. If not,\nsee \u003chttps://www.gnu.org/licenses/\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahgencer%2Fpodmod","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fahgencer%2Fpodmod","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahgencer%2Fpodmod/lists"}