On Mon, 19 Nov 2018 at 14:33:42 +0100, Bill Allombert wrote:
> On Mon, Nov 19, 2018 at 08:46:49AM +0000, Simon McVittie wrote:
> > * /usr/lib/*/pari/pari.cfg and /usr/include/*/pari/paricfg.h contain
> >   absolute paths /usr/bin/gzip, /usr/bin/zcat
> > * If pari invokes those commands (I assume it does, but I haven't actually
> >   checked) then it will not work on non-merged-/usr systems, where
> >   /bin/gzip and /bin/zcat exist, but /usr/bin/gzip and /usr/bin/zcat do not
> 
> Is not merged system supposed to have a /usr -> / symlink ?

Yes, although the symlinks are the other way round (/bin is a symlink
to /usr/bin and so on). The point of recent merged-/usr efforts[1] is
to group together all the static, read-only directories that need the
same handling (/usr, /bin, /sbin, /lib*) into one directory, possibly a
separate filesystem mounted from the initramfs or bind-mounted read-only
into a container. Compiling on unmerged /usr and using on merged /usr
works OK, because of the symlinks you mentioned, but that's the opposite
of the situation in this bug report.

The problem case is when you compile on merged-/usr and use on
unmerged-/usr:

- compile time, on merged /usr: which(1) etc. can't guess whether /bin/foo
  or /usr/bin/foo is meant to be canonical, because both exist and are
  equivalent

- runtime, on unmerged /usr: only the canonical paths will work
  (/bin/gzip good, /usr/bin/gzip bad; /usr/bin/dpkg good, /bin/dpkg bad)
  so if the build system guessed wrong, the program doesn't work
  (and it can't guess right without a long list of exceptions, because
  some standard utilities are canonically in /usr/bin and some in /bin)

> > Patching Configure, config/locate
> > and/or config/paricfg.h.SH is probably easiest.
> 
> I think the better fix would be to replace the absolute path by a
> relative path (i.e.just ZCAT="gzip -dc").

That seems a valid patch for this bug, yes (assuming nothing is relying
on ZCAT starting with an absolute path).

    smcv

[1] The hurd-i386 port tried to do the opposite, making /usr a symlink to
    /, but that has all the same pain points as merged /usr without its
    advantages (because static/read-only files are still spread between
    /bin, /sbin, /lib* and /share, and are hard to separate from /etc
    which also needs to be on the root filesystem).

Reply via email to