On Wed, 2016-12-07 at 11:46 +0100, Vincent Bernat wrote: [...] > I have this error on update-initramfs -u -vv: > > Adding firmware /lib/firmware/nvidia/gm206/gr/gpccs_data.bin > Adding firmware-link /lib/firmware/nvidia/gm206/gr/gpccs_inst.bin > Adding firmware /usr/lib/firmware/nvidia/gm200/gr/gpccs_inst.bin > Adding firmware-link /lib/firmware/nvidia/gm206/gr/gpccs_bl.bin > E: /usr/share/initramfs-tools/hooks/plymouth failed with return 1. > Removing /boot/initrd.img-4.8.0-2-amd64.dpkg-bak > update-initramfs: failed for /boot/initrd.img-4.8.0-2-amd64 with 1. > > I have traced to this: > > + copy_file firmware /lib/firmware/nvidia/gm206/gr/gpccs_bl.bin > + local type src target link_target > + type=firmware > + src=/lib/firmware/nvidia/gm206/gr/gpccs_bl.bin > + target=/lib/firmware/nvidia/gm206/gr/gpccs_bl.bin > + [ -f /lib/firmware/nvidia/gm206/gr/gpccs_bl.bin ] > + [ -d /var/tmp/mkinitramfs_S838WR//lib/firmware/nvidia/gm206/gr/gpccs_bl.bin ] > + [ -e /var/tmp/mkinitramfs_S838WR//lib/firmware/nvidia/gm206/gr/gpccs_bl.bin ] > + mkdir -p /var/tmp/mkinitramfs_S838WR//lib/firmware/nvidia/gm206/gr > + [ -h /lib/firmware/nvidia/gm206/gr/gpccs_bl.bin ] > + readlink -f /lib/firmware/nvidia/gm206/gr/gpccs_bl.bin > + link_target=/usr/lib/firmware/nvidia/gm200/gr/gpccs_bl.bin > + [ /usr/lib/firmware/nvidia/gm200/gr/gpccs_bl.bin != /lib/firmware/nvidia/gm206/gr/gpccs_bl.bin ] > + [ y = y ] > + echo Adding firmware-link /lib/firmware/nvidia/gm206/gr/gpccs_bl.bin > Adding firmware-link /lib/firmware/nvidia/gm206/gr/gpccs_bl.bin > + ln -rs /var/tmp/mkinitramfs_S838WR//usr/lib/firmware/nvidia/gm200/gr/gpccs_bl.bin /var/tmp/mkinitramfs_S838WR//lib/firmware/nvidia/gm206/gr/gpccs_bl.bin > + src=/usr/lib/firmware/nvidia/gm200/gr/gpccs_bl.bin > + target=/usr/lib/firmware/nvidia/gm200/gr/gpccs_bl.bin > + [ -e /var/tmp/mkinitramfs_S838WR//usr/lib/firmware/nvidia/gm200/gr/gpccs_bl.bin ] > + return 1 > > Maybe the check should also use cmp. It should not. copy_file is documented to return 1 in case the target already exists, and some of its callers rely on that to skip looking at the file's dependencies. If copy_file copies a symlink, it then moves on to copying the link- target. It also returns 1 if that already exists in the initramfs, but this is not obvious from the documentation. It seems to make more sense to return 0 in this case and reserve 1 for the case that nothing at all was copied. (Annoyingly, I couldn't reproduce this at first because I tried just adding nouveau to /etc/initramfs-tools/modules. Since mkinitramfs does *not* use 'set -e' (unlike most hooks), the 'failure' of copy_file was not fatal.) Ben. -- Ben Hutchings When in doubt, use brute force. - Ken Thompson
Attachment:
signature.asc
Description: This is a digitally signed message part