Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 07 Aug 2014 19:13:25 +0200
From:      Matthias Andree <matthias.andree@gmx.de>
To:        Vsevolod Stakhov <vsevolod@FreeBSD.org>, Tijl Coosemans <tijl@FreeBSD.org>
Cc:        svn-ports-head@freebsd.org, svn-ports-all@freebsd.org, ports-committers@freebsd.org
Subject:   Re: svn commit: r364287 - head/ports-mgmt/pkg-devel
Message-ID:  <53E3B3B5.9000104@gmx.de>
In-Reply-To: <53E3AD09.2050000@FreeBSD.org>
References:  <53e39939.55bc.4ca5432c@svn.freebsd.org> <20140807172841.58633e63@kalimero.tijl.coosemans.org> <53E3A468.5050603@FreeBSD.org> <53E3AC0C.5020904@gmx.de> <53E3AD09.2050000@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Am 07.08.2014 um 18:44 schrieb Vsevolod Stakhov:

> On 07/08/14 17:40, Matthias Andree wrote:
>> Am 07.08.2014 um 18:08 schrieb Vsevolod Stakhov:
>>
>>> Due to mainly [2] there are a lot of broken deps, for example, libxml=
2
>>> provides libxml2.so.2.12, whilst all dependant ports requires
>>> libxml2.so.2. Consequently, some weird packages, such as wine-i386-de=
vel
>>> are installed, since it pretends to provide libxml2.so.2 and due to [=
3]
>>> and [1] wine is treated as a provide candidate.
>>
>> The library's SONAME should be the canonical name because that gets
>> recorded in another library's or executable's NEEDED tag, and pkg migh=
t
>> be able to check at package creation, and again before install, if a
>> file installing a library also installs a file that matches the SONAME=
.
>
> That is how it works for shared lib requires. But that is not how it
> works for shared lib provides. And this ambiguity is the source of [3].

(I hope I can still make myself clear after a crazy working day... if
not or anything is unclear/incomprehensible, please ask.)

There is no ambiguity, as Tijl's followup also points out.  No matter
how many symlinks you create, the ELF SONAME is invariant, and is a part
of the .so file's content and is the one text you are after for dealing
with provides and requires.

Try: readelf -d /path/to/some.so | grep SONAME

Perhaps I'm being na=EFve, but I think that libelf might be good to get a
hold of this tag, but I've never done that myself.

Dropping so library versions altogether is going in the wrong direction,
because it actually suppresses required reinstallations.

>>> shared libraries requires. Of course, that doesn't save us from false
>>> positives but fixing of [1] - [4] issues is hard and it would likely
>>> require full rebuild and re-installation of all packages.
>>
>> Aren't we doing that weekly anyways?
>
> Do all users reinstall all their packages weekly? No, they don't I
suppose.

<SARCASM>
They might have stopped doing that because

a) pkg 1.3.X unlearnt how to update the pkg repository automatically
(pkg upgrade doesn't do that any more), and

b) before that with pkg 1.2.X they only did if forced to because the
thrashing in the pkg repos caused a weekly full reinstall...
</SARCASM>

More seriously, I appreciate if people in the pkg maintainer community
finally start considering compatibility rather than burning each and
every bridge they have crossed, but from the admin and quality POV I
think a reinstallation of a known-working package (which might happen if
you handle .so correctly, by its identifying ELF SONAME) is better than
leaving non-working library users in place because pkg 1.4-alpha-foo
unlearnt to tell libmumble.so.4 apart from
libmumble.so.5.  Which is what will happen if you strip the versions
from the requires.  We can't add a SAT solver and then deliberately
deprive it of essential information...

Please reconsider/revert that change, and instead snatch the embedded
ELF SONAME from all libraries and use that for shared object (=3D dynamic
library) requires/provides.

Thank you.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?53E3B3B5.9000104>