Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.debian.kernel > #56035 > unrolled thread

Bug#847325: Unable to copy symlinks with copy_file

Started byVincent Bernat <bernat@debian.org>
First post2016-12-07 12:00 +0100
Last post2016-12-08 07:40 +0100
Articles 3 — 2 participants

Back to article view | Back to linux.debian.kernel


Contents

  Bug#847325: Unable to copy symlinks with copy_file Vincent Bernat <bernat@debian.org> - 2016-12-07 12:00 +0100
    Bug#847325: Unable to copy symlinks with copy_file Ben Hutchings <ben@decadent.org.uk> - 2016-12-08 03:20 +0100
      Bug#847325: Unable to copy symlinks with copy_file Vincent Bernat <bernat@debian.org> - 2016-12-08 07:40 +0100

#56035 — Bug#847325: Unable to copy symlinks with copy_file

FromVincent Bernat <bernat@debian.org>
Date2016-12-07 12:00 +0100
SubjectBug#847325: Unable to copy symlinks with copy_file
Message-ID<sLI78-7uU-21@gated-at.bofh.it>
Package: initramfs-tools-core
Version: 0.125
Severity: normal
File: /usr/share/initramfs-tools/hook-functions

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Hey!

Today, new firmware-misc-nonfree package contains some symlinks:

lrwxrwxrwx 1 root root   26 déc.   3 22:20 /lib/firmware/nvidia/gm206/gr/fecs_bl.bin -> ../../gm200/gr/fecs_bl.bin
- -rw-r--r-- 1 root root 1968 déc.   3 22:20 /lib/firmware/nvidia/gm206/gr/fecs_data.bin
lrwxrwxrwx 1 root root   28 déc.   3 22:20 /lib/firmware/nvidia/gm206/gr/fecs_inst.bin -> ../../gm200/gr/fecs_inst.bin
- -rw-r--r-- 1 root root   76 déc.   3 22:20 /lib/firmware/nvidia/gm206/gr/fecs_sig.bin
lrwxrwxrwx 1 root root   27 déc.   3 22:20 /lib/firmware/nvidia/gm206/gr/gpccs_bl.bin -> ../../gm200/gr/gpccs_bl.bin
- -rw-r--r-- 1 root root 2056 déc.   3 22:20 /lib/firmware/nvidia/gm206/gr/gpccs_data.bin
lrwxrwxrwx 1 root root   29 déc.   3 22:20 /lib/firmware/nvidia/gm206/gr/gpccs_inst.bin -> ../../gm200/gr/gpccs_inst.bin
- -rw-r--r-- 1 root root   76 déc.   3 22:20 /lib/firmware/nvidia/gm206/gr/gpccs_sig.bin
lrwxrwxrwx 1 root root   33 déc.   3 22:20 /lib/firmware/nvidia/gm206/gr/sw_bundle_init.bin -> ../../gm200/gr/sw_bundle_init.bin
lrwxrwxrwx 1 root root   25 déc.   3 22:20 /lib/firmware/nvidia/gm206/gr/sw_ctx.bin -> ../../gm200/gr/sw_ctx.bin
lrwxrwxrwx 1 root root   33 déc.   3 22:20 /lib/firmware/nvidia/gm206/gr/sw_method_init.bin -> ../../gm200/gr/sw_method_init.bin
lrwxrwxrwx 1 root root   28 déc.   3 22:20 /lib/firmware/nvidia/gm206/gr/sw_nonctx.bin -> ../../gm200/gr/sw_nonctx.bin

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.

- -- System Information:
Debian Release: stretch/sid
  APT prefers unstable-debug
  APT policy: (500, 'unstable-debug'), (500, 'unstable'), (101, 'experimental-debug'), (101, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.8.0-2-amd64 (SMP w/4 CPU cores)
Locale: LANG=fr_FR.utf8, LC_CTYPE=fr_FR.utf8 (charmap=UTF-8)
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages initramfs-tools-core depends on:
ii  cpio         2.11+dfsg-6
ii  klibc-utils  2.0.4-9
ii  kmod         23-1
ii  udev         232-7

Versions of packages initramfs-tools-core recommends:
ii  busybox  1:1.22.0-19

Versions of packages initramfs-tools-core suggests:
ii  bash-completion  1:2.1-4.3

- -- no debconf information

-----BEGIN PGP SIGNATURE-----

iQJGBAEBCAAwFiEErvI0h2bzccaJpzYAlaQv6DU1JfkFAlhH6JcSHGJlcm5hdEBk
ZWJpYW4ub3JnAAoJEJWkL+g1NSX5r14P/ReRizb2CEv6yNYqJXgwpM8BdwgRkOPJ
6xVzf/gLYuZaxEtCnH2bi9Z6Y3f1ExBJE9G5bNmfSrF9Q8Zpaignifp392a1/HS7
ZE2Q4g6O6LkOB/N29711jd9lEoJfuNYh1g3X77fFO27htZohpkR3sN39k3fJdajd
fTvlm7qnUIyeBT7iC2nq8AZMDWJuY5xZ5ziSDoYB9oxNvCGSJIg+0Q+4XTKmunvA
EcQHrM+0AvaEMkikgoM/Bg7HIEBSp0xtlHPT2hQf1R127zd8urUdpIwzxriWattg
UVdIPGY0GbpIGO8eWNEbsCaEP1oX0cQqnT+e9gqdqCkeFPbxqVGthRKfNX4IEzBc
ZnOFB38t5pt+J9DScj5ZpK2WFJTgaY1Q/ckdK2zRcnNb9hJdOHxUjDRFCI8AOvFx
ouNMxU1hnNgEf1GFri8xwYfDDyS1PoXREY6odYRsvZkrR7a0NWQV2EXf8HSQzewb
vB79DOFw5+vpkaW/RI3YHCMM7hiNOPCiIGw1JLmGA5TXRnsK++k4dtN+mZP5Eptd
ud7zpaCu2RyFaENdVca0yXvw8AenuxOXLEneGAKmElyWIIlwShGrKp5Ru0L56J0J
fz3vNvgf111CC5cQwNRV+FvqRoy+9vzgU9ZTSyAS4oVk2zwtgBfHA1xw+AN0Ub/b
qRH2Li4kr/Zq
=dZqX
-----END PGP SIGNATURE-----

[toc] | [next] | [standalone]


#56052

FromBen Hutchings <ben@decadent.org.uk>
Date2016-12-08 03:20 +0100
Message-ID<sLWtr-8ph-1@gated-at.bofh.it>
In reply to#56035

[Multipart message — attachments visible in raw view] — view raw

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

[toc] | [prev] | [next] | [standalone]


#56057

FromVincent Bernat <bernat@debian.org>
Date2016-12-08 07:40 +0100
Message-ID<sM0x4-2Ck-13@gated-at.bofh.it>
In reply to#56052

[Multipart message — attachments visible in raw view] — view raw

 ❦  8 décembre 2016 02:08 GMT, Ben Hutchings <ben@decadent.org.uk> :

> (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.)

I should have said that I got the error through plymouth hook.
-- 
Civilization is the limitless multiplication of unnecessary necessities.
		-- Mark Twain

[toc] | [prev] | [standalone]


Back to top | Article view | linux.debian.kernel


csiph-web