Hi Joachim,

This is more than a cruft-checker issue: the missing symlink breaks
services on a fresh install.

Because libpicohttpparser1 ships only libpicohttpparser.so.1.2, the
libpicohttpparser.so.1 symlink does not exist until the libc-bin ldconfig trigger runs at the end of the dpkg run. Until then, nothing linked against it can be loaded. libmosquitto1 links against it, so a package that uses libmosquitto1 and starts a service from its postinst fails. I hit this with shairport-sync in Salsa CI:

Setting up libpicohttpparser1:amd64 (1.2+ds-2) ...
Setting up shairport-sync (5.6.2-2+salsaci+20261108+3) ...
Processing triggers for libc-bin (2.43-7) ...

shairport-sync[4032]: /usr/bin/shairport-sync: error while loading shared libraries: libpicohttpparser.so.1: cannot open shared object file: No such file or directory systemd[1]: shairport-sync.service: Main process exited, code=exited, status=127/n/a

Full log: https://salsa.debian.org/debian/shairport-sync/-/jobs/10615314

shairport-sync recovers because its unit restarts on failure. A service without a restart policy would stay failed, and the mosquitto broker may be affected in the same way.

This is the situation Debian Policy 8.1 describes:

  The run-time library package should include the symbolic link for the
  SONAME that ldconfig would create for the shared libraries. [...] This
  is needed so that the dynamic linker (for example ld.so or
  ld-linux.so.*) can find the library between the time that dpkg
  installs it and the time that ldconfig is run in the postinst script.

See: https://www.debian.org/doc/debian-policy/ch-sharedlibs.html#run-time-shared-libraries

The ldconfig trigger is still needed to refresh the cache, but it does not replace shipping the symlink. Alexandre's patch from 4 November, which creates the symlink so the existing install glob picks it up, would fix this. Please also drop the lacks-versioned-link-to-shared-library lintian override.

Cheers,
Chris

--
Chris Boot
[email protected]

Reply via email to