Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 2 Jul 2011 09:06:43 -1000
From:      Kevin Oberman <kob6558@gmail.com>
To:        bf1783@gmail.com
Cc:        freebsd-stable@freebsd.org
Subject:   Re: libarchive, lzma, and xz interaction
Message-ID:  <CAN6yY1tN7r2zzWqyOF1VcuVkBaFDDLSq6dL9g92e_fCCYyHHXw@mail.gmail.com>
In-Reply-To: <CAGFTUwNsL7mxy50R==nnk3kuqHQhVt0wPMXA5DaVNPZjeZqZyw@mail.gmail.com>
References:  <CAGFTUwNsL7mxy50R==nnk3kuqHQhVt0wPMXA5DaVNPZjeZqZyw@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Jul 1, 2011 at 11:32 PM, b. f. <bf1783@googlemail.com> wrote:
>> On Fri, Jul 1, 2011 at 7:19 PM, Kevin Oberman <kob6558 at gmail.com> wro=
te:
>> > I'm trying to understand the problems I am having on some systems
>> > regarding libarchive, lzma, and xz.
>> > I have an 8-Stable system updated yesterday. As far as I can tell,
>> > libarchive does include the lzma stuff
>> > from libzma. At least I see the references. But several ports seem to
>> > still pull in xz-5.0.1 and link to it.
>> > This has a wonderful potential to cause library symbol conflicts. I ge=
t:
>> > /usr/lib/libarchive.so: undefined reference to `lzma_stream_encoder at=
 XZ_5.0'
>> > /usr/lib/libarchive.so: undefined reference to `lzma_alone_decoder at =
XZ_5.0'
>> > /usr/lib/libarchive.so: undefined reference to `lzma_memusage at XZ_5.=
0'
>> > /usr/lib/libarchive.so: undefined reference to `lzma_stream_decoder at=
 XZ_5.0'
>> > /usr/lib/libarchive.so: undefined reference to `lzma_code at XZ_5.0'
>> > /usr/lib/libarchive.so: undefined reference to `lzma_end at XZ_5.0'
>> > /usr/lib/libarchive.so: undefined reference to `lzma_lzma_preset at XZ=
_5.0'
>> > /usr/lib/libarchive.so: undefined reference to `lzma_alone_encoder at =
XZ_5.0'
>> >
>> > ldd shows libarchive linked against liblzma.so.5 and an objdump of the
>> > dynamic symbols from liblzma.so.5
>> > shows the "undefined symbols" defined with the XZ_5.0 version, so I am
>> > mystified. It looks o me like it is
>> > there. Is confusion with xz-5.0.1 causing this? Should get rid of it?
>> > Even so, I don't understand why the
>> > loader is claiming that these symbols are undefined when they seem to
>> > be defined as far as I can tell.
>> > 0000000000007c60 g =C2=A0 =C2=A0DF .text =C2=A00000000000000084 =C2=A0=
XZ_5.0
>> > lzma_stream_encoder
>> >
>> > Any clues to what i happening would be greatly appreciated!
>
> Nothing mysterious here:
>
> src/lib/libarchive/archive_write_set_compression_xz.c uses some code
> from the base system /usr/lib/liblzma.so shared library, from
> src/lib/liblzma, which is derived from the base system xz 5.0.1, =A0in
> src/contrib/xz. =A0Hence the symbols are present, with the symbol
> versions that you noted, but undefined in libarchive, because it is
> obtaining them from liblzma at run-time. =A0It nudges rtld(1) to do this
> in the usual way, via it's DT_NEEDED tag for that library:
>
> objdump -x /usr/lib/libarchive.so | egrep 'NEEDED.*lzma'
>
>> Replying to myself, I re-built all programs that depended on xz and
>> then deleted the port. Now everything works fine. I still don't
>> completely understand what I was seeing, but it is working, now.
>
> Perhaps you recently updated your base system, but were using old
> ports or packages? =A0 With up-to-date ports and a recent version of
> 8-stable you should not have been able to build the archivers/xz port,
> even if other ports mistakenly tried to drag it in, because of the
> following lines in the ports/archivers/xz Makefile:
>
>
> .if ${OSVERSION} >=3D 900012 || (${OSVERSION} < 900000 && ${OSVERSION} >=
=3D 800505)
> IGNORE=3D is already in the base system
> .endif
>
> Of course, you could have overridden this, by setting NO_IGNORE.

Thanks! Now I understand what was happening much better. It does make sense=
.

And you were right about the sequence o events. Due to a bug in the
atkbd driver in 8.1 and 8.2 I installed 8.0-RELEASE and, after
installing a few critical ports (which must have pulled in xz), I
csuped RELENG_8, I applied the required patch (which has now been
MFCed), and built a stable system. Unfortunately, I now had xz and got
into the problems I reported.

I am a bit disturbed to note that there is no entry in either
/usr/src/UPDATING or /usr/ports/UPDATING about lzma moving into the
base system and the need to re-install ports that had depended on the
xz port and delete xz. While googling for the problem I found many
reports of the problem with no solutions. A note in UPDATING (in this
case, probably both of them, but at least /usr/src) could have made
them easily resolved.

Thanks for taking the time to educate me. I've been working with
FreeBSD for several years, but I still don't know a great many things
about it.
--=20
R. Kevin Oberman, Network Engineer - Retired
E-mail: kob6558@gmail.com



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