On Mon, 2026-01-19 at 13:01 +0100, Santiago Vila wrote:
> During a rebuild of all packages in unstable, package src:linux-signed-amd64
> failed to build with this error message:
>
> /usr/bin/dracut: line 2772: cpio: command not found
>
> So it seems as if dracut had a missing dependency on cpio. Or maybe it fails
> to detect that 3cpio is installed instead and keeps using cpio anyway. Or
> maybe
> 3cpio should provide cpio and use the alternatives mechanism so that
> /usr/bin/cpio
> exists and may be used. This is why I've put "?" in the subject. Please use
> reassign if appropriate.
>
> The error does not always happen, which is strange, but it happens often
> enough
> to consider the issue as RC. I've put a bunch of failed build logs
> here (for linux-signed-amd64) for reference:
>
> https://people.debian.org/~sanvila/build-logs/202601/
>
> As always, if you cannot reproduce the bug please contact me privately, as I
> am willing to provide ssh access to a virtual machine where this randomness
> is reproducible.
I saw this failure in a log as well but was not able to reproduce it.
Help in debugging will be appreciated. Here is the current debugging
status:
dracut either needs 3cpio or cpio to read/write cpio files. It will
prefer 3cpio if available. dracut uses this check to see if 3cpio is
available (line 1489):
```
CPIO=cpio
if 3cpio --help 2> /dev/null | grep -q -- --create; then
CPIO=3cpio
fi
```
Later on (line 2732) it will take different code paths based on CPIO:
```
if [[ -n $enhanced_cpio ]]; then
[...]
elif [[ $CPIO == 3cpio ]]; then
[...]
else
[...]
fi
```
That's where dracut takes else branch and fails (only 3cpio is available
and not cpio).
We have line 1103 that ensures that $PATH has the common path included:
```
# Ensure that the standard search paths are searched.
for path in /usr/sbin /usr/bin /sbin /bin; do
if ! [[ ":${PATH}:" =~ .*:${path}:.* ]]; then
PATH="${PATH:+${PATH}:}$path"
fi
done
```
Is the 3cpio --help call failing? If so, why?
--
Benjamin Drung
Debian & Ubuntu Developer