svenstaro/genact · warning

Possibly missing firmware for module

Error message

Possibly missing firmware for module: {driver}

What it means

During build(), when the 'block' hook runs in fallback mode, the tool emits a warning for each driver it detected, saying firmware may be missing. It is not a hard failure: mkinitcpio warns that the initramfs includes kernel modules whose userspace firmware blobs may not be installed, so the hardware may not work at boot. This mimics the classic mkinitcpio/udevadmq warning shown in the Arch Linux boot output.

Solutions

  1. Install the matching firmware package (e.g. `pacman -S linux-firmware`, or the specific package like linux-firmware-amdgpu)
  2. Blacklist/drop the unneeded module so its driver is not included in the image
  3. Ignore the warning if the hardware in question is not used (it is only a warning, not an error)
  4. In fallback mode specifically, verify which drivers land in the image and trim the MODULES= array in mkinitcpio.conf

Example fix

// before (warn for every driver in fallback mode)
if *hook == "block" && mode == "fallback" {
    for driver in drivers {
        warn(format!("Possibly missing firmware for module: {driver}").as_ref()).await;
    }
}
// after (only warn when firmware file is actually absent)
if *hook == "block" && mode == "fallback" {
    for driver in drivers {
        if !firmware_installed(driver) {
            warn(format!("Possibly missing firmware for module: {driver}").as_ref()).await;
        }
    }
}
Defensive patterns

Strategy: validation

Validate before calling

// Verify firmware availability before the build step
for driver in drivers {
    if !Path::new(&format!("/lib/firmware/{}
", driver)).exists()
        && command_output("modinfo", &["-F", "firmware", driver]).is_empty() {
        eprintln!("firmware missing for module: {driver}");
    }
}

Prevention

When it happens

Trigger: Calling run()/build() in fallback mode while the hook list contains 'block' and the detected driver list is non-empty — every detected driver gets one warn() line regardless of whether firmware is actually installed.

Common situations: Simulated/animated mkinitcpio boot screens (this looks like a fake boot renderer, e.g. archinstall/fastfetch-style demo); real-world equivalent is building an initramfs for hardware like radeon/amdgpu/nouveau or WiFi chips whose linux-firmware package is missing.

Understand the failure class

Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.


AI-assisted analysis of svenstaro/genact@858be63ad2 (2026-09-08). Data as JSON: /api/errors/0818f8be7557f92a. Report an issue: GitHub.

Appendix: source

Thrown at src/modules/mkinitcpio.rs:89

        "/boot/initramfs-{preset}{suffix}.img",
        preset = preset,
        suffix = if mode == "default" {
            "".to_string()
        } else {
            format!("-{mode}")
        }
    );

    msg2(format!("-k /boot/vmlinuz-{preset} -c /etc/mkinitcpio.conf -g {image}",).as_ref()).await;
    msg1(format!("Starting build: {os_release}").as_ref()).await;

    for hook in hooks {
        msg2(format!("Running build hook: [{hook}]").as_ref()).await;
        csleep(rng.random_range(50..1000)).await;

        if *hook == "block" && mode == "fallback" {
            for driver in drivers {
                warn(format!("Possibly missing firmware for module: {driver}").as_ref()).await;
            }
        }

        if appconfig.should_exit() {
            return;
        }
    }

    msg1("Generating module dependencies").await;
    csleep(rng.random_range(200..500)).await;

    msg1(format!("Creating {zip}-compressed initcpio image: {image}",).as_ref()).await;
    csleep(rng.random_range(500..2500)).await;

    msg1("Image generation successful").await;
}

pub struct Mkinitcpio;

View on GitHub (pinned to 858be63ad2)