Skip to content

Commit

Permalink
Include linked firmware files
Browse files Browse the repository at this point in the history
Some modules reference a firmware file that is just a link to a "real"
file. Make sure those files are also included when needed by resolving
those referenced symlinks and including their target files in the set of
required firmware files.
  • Loading branch information
hundeboll committed Jan 6, 2025
1 parent 9096639 commit 84abdc9
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 2 deletions.
10 changes: 10 additions & 0 deletions mkosi/kmod.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

from mkosi.log import complete_step, log_step
from mkosi.run import chroot_cmd, run
from mkosi.sandbox import chase
from mkosi.util import chdir, parents_below


Expand Down Expand Up @@ -180,6 +181,15 @@ def gen_required_kernel_modules(
mods = set(modulesd.rglob("*.ko*"))
firmware = set()

# Some firmware dependencies are symbolic links, so the targets for those must be included in the list
# of required firmware files too. Intermediate symlinks are not included, and so links pointing to links
# results in dangling symlinks in the final image.
for fw in firmware.copy():
if (root / fw).is_symlink():
target = Path(chase(os.fspath(root), os.fspath(fw)))
if target.exists():
firmware.add(target.relative_to(root))

yield from sorted(
itertools.chain(
{
Expand Down
4 changes: 2 additions & 2 deletions tests/test_initrd.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,9 +225,9 @@ def test_initrd_size(config: ImageConfig) -> None:
maxsize = 1024**2 * {
Distribution.fedora: 63,
Distribution.debian: 61,
Distribution.ubuntu: 56,
Distribution.ubuntu: 57,
Distribution.arch: 83,
Distribution.opensuse: 64,
}.get(config.distribution, 57)
}.get(config.distribution, 58)

assert (Path(image.output_dir) / "image.initrd").stat().st_size <= maxsize

0 comments on commit 84abdc9

Please sign in to comment.