Re: libmd.so.6 and pkgbase

From: Mark Millard <marklmi_at_yahoo.com>
Date: Mon, 07 Oct 2024 19:07:24 UTC
On Oct 7, 2024, at 11:34, Renato Botelho <garga@FreeBSD.org> wrote:

> On 07/10/24 14:49, Mark Millard wrote:
>> Renato Botelho <garga_at_FreeBSD.org> wrote on
>> Date: Mon, 07 Oct 2024 14:20:00 UTC :
>>> On 07/10/24 03:53, Baptiste Daroussin wrote:
>>>> Hello everyone,
>>>> 
>>>> Just a reminder when using pkgbase, make sure you do activate
>>>> BACKUP_LIBRARIES=true in pkg.conf
>>>> 
>>>> This way pkg will save a copy of libmd.so.6 during the upgrade in
>>>> /usr/local/lib/pkg/libmd.so.6 (and create a package named compat-libraries to
>>>> track it).
>>>> 
>>>> This will prevent you from having a couple of days without a new version of pkg
>>>> built against libmd.so.7 available (or some of the packages which also requires
>>>> libmd.so.7.
>>> 
>>> I have BACKUP_LIBRARIES=true on my pkg.conf and upgraded a system
>>> running CURRENT this morning using pkgbase. After that I got pkg linked
>>> with both libmd.so.6 and libmd.so.7:
>>> 
>>> root@x230:~ # ldd /usr/local/sbin/pkg
>>> /usr/local/sbin/pkg:
>>> libelf.so.2 => /lib/libelf.so.2 (0x28b8027a6000)
>>> libjail.so.1 => /lib/libjail.so.1 (0x28b80340b000)
>>> libssl.so.30 => /usr/lib/libssl.so.30 (0x28b80436a000)
>>> libcrypto.so.30 => /lib/libcrypto.so.30 (0x28b804e18000)
>>> libarchive.so.7 => /usr/lib/libarchive.so.7 (0x28b805e0a000)
>>> libbz2.so.4 => /usr/lib/libbz2.so.4 (0x28b80710e000)
>>> libz.so.6 => /lib/libz.so.6 (0x28b807ccc000)
>>> liblzma.so.5 => /usr/lib/liblzma.so.5 (0x28b808368000)
>>> libprivatezstd.so.5 => /usr/lib/libprivatezstd.so.5
>>> (0x28b806205000)
>>> libm.so.5 => /lib/libm.so.5 (0x28b808952000)
>>> libutil.so.9 => /lib/libutil.so.9 (0x28b808ad1000)
>>> libmd.so.6 => not found (0)
>>> libthr.so.3 => /lib/libthr.so.3 (0x28b809f4c000)
>>> libc.so.7 => /lib/libc.so.7 (0x28b80ae53000)
>>> libbsdxml.so.4 => /lib/libbsdxml.so.4 (0x28b80c034000)
>>> libmd.so.7 => /lib/libmd.so.7 (0x28b80cdf7000)
>>> libsys.so.7 => /lib/libsys.so.7 (0x28b80ddb1000)
>>> [vdso] (0x28b801eee000)
>> . . .
>> It would help for tracking down were the dependencies are
>> to use "ldd -a ". It shows what each involved *.so.*
>> in turn references of itself. The example below is for
>> a context that does not have the problem you report
>> (not a pkgbase context) but it illustrates the type of
>> extra information that is output:
>> # ldd -a /usr/local/sbin/pkg
>> /usr/local/sbin/pkg:
>> libelf.so.2 => /lib/libelf.so.2 (0xc4840f00000)
>> libjail.so.1 => /lib/libjail.so.1 (0xc48410d3000)
>> libssl.so.30 => /usr/lib/libssl.so.30 (0xc4841fae000)
>> libcrypto.so.30 => /lib/libcrypto.so.30 (0xc4842853000)
>> libarchive.so.7 => /usr/lib/libarchive.so.7 (0xc4843af6000)
>> libbz2.so.4 => /usr/lib/libbz2.so.4 (0xc48403f6000)
>> libz.so.6 => /lib/libz.so.6 (0xc4845351000)
>> liblzma.so.5 => /usr/lib/liblzma.so.5 (0xc48455b0000)
>> libprivatezstd.so.5 => /usr/lib/libprivatezstd.so.5 (0xc484480f000)
>> libm.so.5 => /lib/libm.so.5 (0xc48463e4000)
>> libutil.so.9 => /lib/libutil.so.9 (0xc4846b3d000)
>> libmd.so.7 => /lib/libmd.so.7 (0xc48477f3000)
>> libthr.so.3 => /lib/libthr.so.3 (0xc4848518000)
>> libc.so.7 => /lib/libc.so.7 (0xc484889d000)
>> /lib/libelf.so.2:
>> libc.so.7 => /lib/libc.so.7 (0xc484889d000)
>> /lib/libjail.so.1:
>> libc.so.7 => /lib/libc.so.7 (0xc484889d000)
>> /usr/lib/libssl.so.30:
>> libcrypto.so.30 => /lib/libcrypto.so.30 (0xc4842853000)
>> libc.so.7 => /lib/libc.so.7 (0xc484889d000)
>> /lib/libcrypto.so.30:
>> libthr.so.3 => /lib/libthr.so.3 (0xc4848518000)
>> libc.so.7 => /lib/libc.so.7 (0xc484889d000)
>> /usr/lib/libarchive.so.7:
>> libz.so.6 => /lib/libz.so.6 (0xc4845351000)
>> libbz2.so.4 => /usr/lib/libbz2.so.4 (0xc48403f6000)
>> liblzma.so.5 => /usr/lib/liblzma.so.5 (0xc48455b0000)
>> libbsdxml.so.4 => /lib/libbsdxml.so.4 (0xc4849553000)
>> libprivatezstd.so.5 => /usr/lib/libprivatezstd.so.5 (0xc484480f000)
>> libcrypto.so.30 => /lib/libcrypto.so.30 (0xc4842853000)
>> libc.so.7 => /lib/libc.so.7 (0xc484889d000)
>> /usr/lib/libbz2.so.4:
>> libc.so.7 => /lib/libc.so.7 (0xc484889d000)
>> /lib/libz.so.6:
>> libc.so.7 => /lib/libc.so.7 (0xc484889d000)
>> /usr/lib/liblzma.so.5:
>> libmd.so.7 => /lib/libmd.so.7 (0xc48477f3000)
>> libthr.so.3 => /lib/libthr.so.3 (0xc4848518000)
>> libc.so.7 => /lib/libc.so.7 (0xc484889d000)
>> /usr/lib/libprivatezstd.so.5:
>> libthr.so.3 => /lib/libthr.so.3 (0xc4848518000)
>> libc.so.7 => /lib/libc.so.7 (0xc484889d000)
>> /lib/libm.so.5:
>> libc.so.7 => /lib/libc.so.7 (0xc484889d000)
>> /lib/libutil.so.9:
>> libc.so.7 => /lib/libc.so.7 (0xc484889d000)
>> /lib/libmd.so.7:
>> libc.so.7 => /lib/libc.so.7 (0xc484889d000)
>> /lib/libthr.so.3:
>> libc.so.7 => /lib/libc.so.7 (0xc484889d000)
>> libsys.so.7 => /lib/libsys.so.7 (0xc484af47000)
>> /lib/libc.so.7:
>> libsys.so.7 => /lib/libsys.so.7 (0xc484af47000)
>> /lib/libbsdxml.so.4:
>> libc.so.7 => /lib/libc.so.7 (0xc484889d000)
>> [preloaded]
>> [vdso] (0xc483f927000)
>> I expect that /usr/local/sbin/pkg has the only reference
>> to libmd.so.6 in your context and that /usr/lib/liblzma.so.5
>> is what is referencing libmd.so.7 .
>> If so, I'll note that you can avoid the problem by using
>> pkg-static instead of pkg as your command:
>> # ldd -a /usr/local/sbin/pkg-static
>> ldd: /usr/local/sbin/pkg-static: not a dynamic ELF executable
>> So there is no use of *.so.* files for pkg-static .
>> (I make no claims about other programs that might be involved
>> overall.)
> 
> I've fixed it by building pkg on local ports tree.  But anyway I've forced a bootstrap to have the one provided by official repository installed again and ran ldd -a to collect data
> 
> root@x230:~ # ldd -a /usr/local/sbin/pkg
> /usr/local/sbin/pkg:
> 	libelf.so.2 => /lib/libelf.so.2 (0x1a55a0de2000)
> 	libjail.so.1 => /lib/libjail.so.1 (0x1a55a1fae000)
> 	libssl.so.30 => /usr/lib/libssl.so.30 (0x1a55a1fc2000)
> 	libcrypto.so.30 => /lib/libcrypto.so.30 (0x1a55a2e3a000)
> 	libarchive.so.7 => /usr/lib/libarchive.so.7 (0x1a55a3e98000)
> 	libbz2.so.4 => /usr/lib/libbz2.so.4 (0x1a55a4a17000)
> 	libz.so.6 => /lib/libz.so.6 (0x1a55a4d85000)
> 	liblzma.so.5 => /usr/lib/liblzma.so.5 (0x1a55a57ed000)
> 	libprivatezstd.so.5 => /usr/lib/libprivatezstd.so.5 (0x1a55a640f000)
> 	libm.so.5 => /lib/libm.so.5 (0x1a55a696c000)
> 	libutil.so.9 => /lib/libutil.so.9 (0x1a55a6e12000)
> 	libmd.so.6 => not found (0)
> 	libthr.so.3 => /lib/libthr.so.3 (0x1a55a7a49000)
> 	libc.so.7 => /lib/libc.so.7 (0x1a55a7aa9000)
> /lib/libelf.so.2:
> 	libc.so.7 => /lib/libc.so.7 (0x1a55a7aa9000)
> /lib/libjail.so.1:
> 	libc.so.7 => /lib/libc.so.7 (0x1a55a7aa9000)
> /usr/lib/libssl.so.30:
> 	libcrypto.so.30 => /lib/libcrypto.so.30 (0x1a55a2e3a000)
> 	libc.so.7 => /lib/libc.so.7 (0x1a55a7aa9000)
> /lib/libcrypto.so.30:
> 	libthr.so.3 => /lib/libthr.so.3 (0x1a55a7a49000)
> 	libc.so.7 => /lib/libc.so.7 (0x1a55a7aa9000)
> /usr/lib/libarchive.so.7:
> 	libz.so.6 => /lib/libz.so.6 (0x1a55a4d85000)
> 	libbz2.so.4 => /usr/lib/libbz2.so.4 (0x1a55a4a17000)
> 	liblzma.so.5 => /usr/lib/liblzma.so.5 (0x1a55a57ed000)
> 	libbsdxml.so.4 => /lib/libbsdxml.so.4 (0x1a55a834a000)
> 	libprivatezstd.so.5 => /usr/lib/libprivatezstd.so.5 (0x1a55a640f000)
> 	libcrypto.so.30 => /lib/libcrypto.so.30 (0x1a55a2e3a000)
> 	libc.so.7 => /lib/libc.so.7 (0x1a55a7aa9000)
> /usr/lib/libbz2.so.4:
> 	libc.so.7 => /lib/libc.so.7 (0x1a55a7aa9000)
> /lib/libz.so.6:
> 	libc.so.7 => /lib/libc.so.7 (0x1a55a7aa9000)
> /usr/lib/liblzma.so.5:
> 	libmd.so.7 => /lib/libmd.so.7 (0x1a55a853a000)
> 	libthr.so.3 => /lib/libthr.so.3 (0x1a55a7a49000)
> 	libc.so.7 => /lib/libc.so.7 (0x1a55a7aa9000)
> /usr/lib/libprivatezstd.so.5:
> 	libthr.so.3 => /lib/libthr.so.3 (0x1a55a7a49000)
> 	libc.so.7 => /lib/libc.so.7 (0x1a55a7aa9000)
> /lib/libm.so.5:
> 	libc.so.7 => /lib/libc.so.7 (0x1a55a7aa9000)
> /lib/libutil.so.9:
> 	libc.so.7 => /lib/libc.so.7 (0x1a55a7aa9000)
> /lib/libthr.so.3:
> 	libc.so.7 => /lib/libc.so.7 (0x1a55a7aa9000)
> 	libsys.so.7 => /lib/libsys.so.7 (0x1a55a8908000)
> /lib/libc.so.7:
> 	libsys.so.7 => /lib/libsys.so.7 (0x1a55a8908000)
> /lib/libbsdxml.so.4:
> 	libc.so.7 => /lib/libc.so.7 (0x1a55a7aa9000)
> /lib/libmd.so.7:
> 	libc.so.7 => /lib/libc.so.7 (0x1a55a7aa9000)
> [preloaded]
> 	[vdso] (0x1a559fe96000)
> 
> It seems pkg is still linked with libmd.so.6 and lzma is linked with libmd.so.7.

So, as I expected. Good to know.

> Anyway we have a problem, keeping libmd.so.6 seems not to be enough to have pkg working

Typing/using pkg-static instead of pkg should not fail
for libmd.so.6 or libmd.so.7 reasons for its down
execution, even when using just pkg would fail for
such. An example usage is:

# pkg-static  info -l pkg | grep /sbin/
/usr/local/sbin/pkg
/usr/local/sbin/pkg-static

The above should work even in a context with the
libmd.so.6 problem for using just pkg . (The
/usr/bin/grep part should work too.)

For reference (the context does not have the
libmd.so.6 problem):

# pkg  info -l pkg | grep /sbin/
/usr/local/sbin/pkg
/usr/local/sbin/pkg-static

Personally, my scripts that use pkg actually run
pkg-static so that the script is less dependent
on the environment for reasonable operation.

===
Mark Millard
marklmi at yahoo.com