On 2023-02-25, at 20:17:34 +0200, Adrian Bunk wrote:
> Package: ebtables
> Version: 2.0.11-5
> Severity: serious
> 
> ...
> Setting up ebtables (2.0.11-5) ...
> update-alternatives: using /usr/sbin/ebtables-legacy to provide 
> /usr/sbin/ebtables (ebtables) in auto mode
> update-alternatives: error: cannot stat file '/usr/sbin/ebtables': Too many 
> levels of symbolic links
> dpkg: error processing package ebtables (--configure):
> ...
> 
> 
> This is due to (with merged /usr):
> lrwxrwxrwx 1 root root 18 Apr  6  2022 /sbin/ebtables -> /usr/sbin/ebtables
> lrwxrwxrwx 1 root root 26 Apr  6  2022 /sbin/ebtables-restore -> 
> /usr/sbin/ebtables-restore
> lrwxrwxrwx 1 root root 23 Apr  6  2022 /sbin/ebtables-save -> 
> /usr/sbin/ebtables-save
> 
> 
> Adding "set -x" in /var/lib/dpkg/info/ebtables.postinst shows:
> ...
> + LIST=ebtables ebtables-save ebtables-restore
> + [ -e /sbin/ebtables ]
> + [ -e /sbin/ebtables-save ]
> + [ -e /sbin/ebtables-restore ]
> + [ configure = configure ]
> ...
> 
> Using -h instead of -e works:
> ...
> + LIST=ebtables ebtables-save ebtables-restore
> + [ -h /sbin/ebtables ]
> + readlink /sbin/ebtables
> + [ /usr/sbin/ebtables = /usr/sbin/ebtables ]
> + rm /sbin/ebtables
> + [ -h /sbin/ebtables-save ]
> + readlink /sbin/ebtables-save
> + [ /usr/sbin/ebtables-save = /usr/sbin/ebtables-save ]
> + rm /sbin/ebtables-save
> + [ -h /sbin/ebtables-restore ]
> + readlink /sbin/ebtables-restore
> + [ /usr/sbin/ebtables-restore = /usr/sbin/ebtables-restore ]
> + rm /sbin/ebtables-restore
> + [ configure = configure ]
> ...

Thanks for the report.  I've no objection to changing the `-e` test to
`-h`, but I should like to understand what is going wrong, and I haven't
been able to reproduce it.  I believe that the postinst `-e` tests ought
only to fail if the sym-links are broken.  In conjunction with the fact
that update-alternatives was complaining about not being able to stat
/usr/sbin/ebtables, this suggests to me that the failing tests are
symptomatic of another underlying problem.

Given that the postinst script was trying and failing to remove existing
sym-links, I take it that you already had ebtables installed and were
upgrading to 2.0.11-5.

Here's what I see in after initially installing ebtables (2.0.11-4+b1)
in a Bullseye chroot without merged /usr:

  $ ls -l /etc/alternatives/ebtables* /sbin/ebtables* /usr/sbin/ebtables*
  lrwxrwxrwx 1 root root    25 Feb 26 09:14 /etc/alternatives/ebtables -> 
/usr/sbin/ebtables-legacy*
  lrwxrwxrwx 1 root root    33 Feb 26 09:14 /etc/alternatives/ebtables-restore 
-> /usr/sbin/ebtables-legacy-restore*
  lrwxrwxrwx 1 root root    30 Feb 26 09:14 /etc/alternatives/ebtables-save -> 
/usr/sbin/ebtables-legacy-save*
  lrwxrwxrwx 1 root root    18 Feb 26 09:14 /sbin/ebtables -> 
/usr/sbin/ebtables*
  lrwxrwxrwx 1 root root    26 Feb 26 09:14 /sbin/ebtables-restore -> 
/usr/sbin/ebtables-restore*
  lrwxrwxrwx 1 root root    23 Feb 26 09:14 /sbin/ebtables-save -> 
/usr/sbin/ebtables-save*
  lrwxrwxrwx 1 root root    26 Feb 26 09:14 /usr/sbin/ebtables -> 
/etc/alternatives/ebtables*
  -rwxr-xr-x 1 root root 14600 Jun  6  2020 /usr/sbin/ebtables-legacy*
  -rwxr-xr-x 1 root root 14784 Jun  6  2020 /usr/sbin/ebtables-legacy-restore*
  -rwxr-xr-x 1 root root  1677 Jun  6  2020 /usr/sbin/ebtables-legacy-save*
  lrwxrwxrwx 1 root root    34 Feb 26 09:14 /usr/sbin/ebtables-restore -> 
/etc/alternatives/ebtables-restore*
  lrwxrwxrwx 1 root root    31 Feb 26 09:14 /usr/sbin/ebtables-save -> 
/etc/alternatives/ebtables-save*
  -rwxr-xr-x 1 root root 14800 Jun  6  2020 /usr/sbin/ebtablesd*
  -rwxr-xr-x 1 root root 14672 Jun  6  2020 /usr/sbin/ebtablesu*

This includes the three sym-links from /sbin to /usr/sbin you list
above and they resolve correctly.  For example:

  * /sbin/ebtables             -> /usr/sbin/ebtables
  * /usr/sbin/ebtables         -> /etc/alternatives/ebtables
  * /etc/alternatives/ebtables -> /usr/sbin/ebtables-legacy

With merged /usr (whether by creating the chroot with `debootstrap
--merged-usr`, installing the usrmerge package before installing
ebtables, or installing usrmerge after ebtables), I see the following:

  $ ls -l /etc/alternatives/ebtables* /sbin /sbin/ebtables* /usr/sbin/ebtables*
  lrwxrwxrwx 1 root root    25 Feb 26 09:14 /etc/alternatives/ebtables -> 
/usr/sbin/ebtables-legacy*
  lrwxrwxrwx 1 root root    33 Feb 26 09:14 /etc/alternatives/ebtables-restore 
-> /usr/sbin/ebtables-legacy-restore*
  lrwxrwxrwx 1 root root    30 Feb 26 09:14 /etc/alternatives/ebtables-save -> 
/usr/sbin/ebtables-legacy-save*
  lrwxrwxrwx 1 root root     8 Feb 26 09:17 /sbin -> usr/sbin/
  lrwxrwxrwx 1 root root    26 Feb 26 09:14 /sbin/ebtables -> 
/etc/alternatives/ebtables*
  -rwxr-xr-x 1 root root 14600 Jun  6  2020 /sbin/ebtables-legacy*
  -rwxr-xr-x 1 root root 14784 Jun  6  2020 /sbin/ebtables-legacy-restore*
  -rwxr-xr-x 1 root root  1677 Jun  6  2020 /sbin/ebtables-legacy-save*
  lrwxrwxrwx 1 root root    34 Feb 26 09:14 /sbin/ebtables-restore -> 
/etc/alternatives/ebtables-restore*
  lrwxrwxrwx 1 root root    31 Feb 26 09:14 /sbin/ebtables-save -> 
/etc/alternatives/ebtables-save*
  -rwxr-xr-x 1 root root 14800 Jun  6  2020 /sbin/ebtablesd*
  -rwxr-xr-x 1 root root 14672 Jun  6  2020 /sbin/ebtablesu*
  lrwxrwxrwx 1 root root    26 Feb 26 09:14 /usr/sbin/ebtables -> 
/etc/alternatives/ebtables*
  -rwxr-xr-x 1 root root 14600 Jun  6  2020 /usr/sbin/ebtables-legacy*
  -rwxr-xr-x 1 root root 14784 Jun  6  2020 /usr/sbin/ebtables-legacy-restore*
  -rwxr-xr-x 1 root root  1677 Jun  6  2020 /usr/sbin/ebtables-legacy-save*
  lrwxrwxrwx 1 root root    34 Feb 26 09:14 /usr/sbin/ebtables-restore -> 
/etc/alternatives/ebtables-restore*
  lrwxrwxrwx 1 root root    31 Feb 26 09:14 /usr/sbin/ebtables-save -> 
/etc/alternatives/ebtables-save*
  -rwxr-xr-x 1 root root 14800 Jun  6  2020 /usr/sbin/ebtablesd*
  -rwxr-xr-x 1 root root 14672 Jun  6  2020 /usr/sbin/ebtablesu*

The three sym-links no longer exist, of course, because /sbin is itself
a symlink, so instead we have:

  * /sbin/ebtables             -> /etc/alternatives/ebtables
  * /etc/alternatives/ebtables -> /usr/sbin/ebtables-legacy

and:

  * /usr/sbin/ebtables         -> /etc/alternatives/ebtables
  * /etc/alternatives/ebtables -> /usr/sbin/ebtables-legacy

which again resolve correctly.

When I upgrade to Bookworm, everything is still correct:

  $ ls -l /etc/alternatives/ebtables* /sbin /sbin/ebtables* /usr/sbin/ebtables*
  lrwxrwxrwx 1 root root    25 Feb 26 09:52 /etc/alternatives/ebtables -> 
/usr/sbin/ebtables-legacy*
  lrwxrwxrwx 1 root root    33 Feb 26 09:52 /etc/alternatives/ebtables-restore 
-> /usr/sbin/ebtables-legacy-restore*
  lrwxrwxrwx 1 root root    30 Feb 26 09:52 /etc/alternatives/ebtables-save -> 
/usr/sbin/ebtables-legacy-save*
  lrwxrwxrwx 1 root root     8 Feb 26 09:54 /sbin -> usr/sbin/
  lrwxrwxrwx 1 root root    26 Feb 26 09:52 /sbin/ebtables -> 
/etc/alternatives/ebtables*
  -rwxr-xr-x 1 root root 14680 Apr  6  2022 /sbin/ebtables-legacy*
  -rwxr-xr-x 1 root root 14872 Apr  6  2022 /sbin/ebtables-legacy-restore*
  -rwxr-xr-x 1 root root  1677 Apr  6  2022 /sbin/ebtables-legacy-save*
  lrwxrwxrwx 1 root root    34 Feb 26 09:52 /sbin/ebtables-restore -> 
/etc/alternatives/ebtables-restore*
  lrwxrwxrwx 1 root root    31 Feb 26 09:52 /sbin/ebtables-save -> 
/etc/alternatives/ebtables-save*
  -rwxr-xr-x 1 root root 14880 Apr  6  2022 /sbin/ebtablesd*
  -rwxr-xr-x 1 root root 14752 Apr  6  2022 /sbin/ebtablesu*
  lrwxrwxrwx 1 root root    26 Feb 26 09:52 /usr/sbin/ebtables -> 
/etc/alternatives/ebtables*
  -rwxr-xr-x 1 root root 14680 Apr  6  2022 /usr/sbin/ebtables-legacy*
  -rwxr-xr-x 1 root root 14872 Apr  6  2022 /usr/sbin/ebtables-legacy-restore*
  -rwxr-xr-x 1 root root  1677 Apr  6  2022 /usr/sbin/ebtables-legacy-save*
  lrwxrwxrwx 1 root root    34 Feb 26 09:52 /usr/sbin/ebtables-restore -> 
/etc/alternatives/ebtables-restore*
  lrwxrwxrwx 1 root root    31 Feb 26 09:52 /usr/sbin/ebtables-save -> 
/etc/alternatives/ebtables-save*
  -rwxr-xr-x 1 root root 14880 Apr  6  2022 /usr/sbin/ebtablesd*
  -rwxr-xr-x 1 root root 14752 Apr  6  2022 /usr/sbin/ebtablesu*

I've also tried a number of other permutations (upgrading from Bullseye
to Bookworm without merged /usr, starting from Buster), and they all
worked too.

J.

Attachment: signature.asc
Description: PGP signature

Reply via email to