With the recent stabilization of app-alternatives, I've started using libarchive as my implementation of cpio. (app-alternatives/cpio with USE="-gnu libarchive"). Genkernel uses cpio when building initramfs images. In doing so, it uses a GNU-spicific option that is not available in the libarchive implementation: --force-local Usage of this option is found in the latest version of Genkernel here: https://gitweb.gentoo.org/proj/genkernel.git/tree/gen_initramfs.sh#n5 Genkernel should succeed with all app-alternatives/cpio implementations or, if that is impossible, it should depend on a specific implementation that has the features it needs. Reproducible: Always Steps to Reproduce: `genkernel all` or `genkernel initramfs` Actual Results: # genkernel --luks --lvm --no-zfs initramfs * Gentoo Linux Genkernel; Version 4.2.6 * Using genkernel configuration from '/etc/genkernel.conf' ... * Running with options: --luks --lvm --no-zfs initramfs * Working with Linux kernel 6.1.12-gentoo-x86_64 for x86_64 * Using kernel config file '/etc/kernels/kernel-config-6.1.12-gentoo-x86_64' ... * initramfs: >> Initializing ... * >> Appending devices cpio data ... cpio: Option --force-local is not supported Brief Usage: List: cpio -it < archive Extract: cpio -i < archive Create: cpio -o < filenames > archive Help: cpio --help * ERROR: Failed to append devices to cpio! * Please consult '/var/log/genkernel.log' for more information and any * errors that were reported above. * * Report any genkernel bugs to bugs.gentoo.org and * assign your bug to genkernel@gentoo.org. Please include * as much information as you can in your bug report; attaching * '/var/log/genkernel.log' so that your issue can be dealt with effectively. * * Please do *not* report kernel compilation failures as genkernel bugs! * Expected Results: Successful generation of initramfs.
Another facet of this bug is that genkernel depends on app-arch/cpio, which provides `gcpio` but not `cpio`, but calls `cpio` instead of `gcpio` without depending on app-alternatives/cpio, which is what provides the `cpio` symlink to the chosen implementation. Ideally, genkernel would depend on app-alternatives/cpio instead of app-arch/cpio and use `cpio` in a portable way. Another less optimal solution (IMO), would be to continue depending on app-arch/cpio and calling `gcpio` instead of `cpio` so that at least the dependencies are correct.