ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [devel] zlib addicts
@ 2005-10-08 10:08 Alexey Tourbin
  2005-10-08 17:41 ` [devel] " Konstantin A. Lepikhov
  0 siblings, 1 reply; 2+ messages in thread
From: Alexey Tourbin @ 2005-10-08 10:08 UTC (permalink / raw)
  To: ALT Devel discussion list

[-- Attachment #1: Type: text/plain, Size: 9320 bytes --]

On Fri, Oct 07, 2005 at 07:29:03PM +0400, Dmitry V. Levin wrote:
> On Mon, Sep 26, 2005 at 05:19:10AM +0400, Alexey Tourbin wrote:
> > Следующие пакеты (предположительно) таскают с собой zlib.
> 
> $ grep -w zlibVersion def |grep -wv ^zlib
> erlang	/usr/lib/erlang/erts-5.4/bin/beam.shared	T	zlibVersion
> erlang	/usr/lib/erlang/erts-5.4/bin/beam	T	zlibVersion
> firefox	/usr/lib/firefox-1.0.6/install/mozilla-installer-bin	T	zlibVersion
> firefox	/usr/lib/firefox-1.0.6/mozilla-installer-bin	T	zlibVersion
> j2se1.3-sun	/usr/lib/j2se1.3-sun/jre/lib/i386/libzip.so	T	zlibVersion
> openoffice.org	/usr/lib/OpenOffice.org1.1.5/program/libmozz.so	T	zlibVersion
> R-base	/usr/lib/R/bin/libR.so	T	zlibVersion
> R-base	/usr/lib/R/bin/R.bin	T	zlibVersion
> scorched3d	/usr/games/scorched3d	T	zlibVersion
> vnc-server	/usr/bin/Xvnc	T	zlibVersion
> xmule	/usr/bin/xmule	T	zlibVersion
> 
> Просьба развесить баги.

Много чести zlib'у будет.  Нужно искать все пакеты, которые таскают с
собой системные библиотеки.  В первом приближении можно сделать вот что.

1) Выделить подмножество списка def: символы, которые прдоставляют
системные библиотеки.

$ awk -F'\t' '$2~"^(/usr(/X11R6)?)?/lib(64)?/lib[^/]+[.]so"' def >libdef
$ du -hs libdef def
85M     libdef
211M    def
$

2) Сделать join (libdef x def) по символам.

$ join -t$'\t' -j 4 -o '1.1 1.2 1.3 2.1 2.2 2.3 0' libdef def |head
libgcj3.3       /usr/lib/libgcj.so.4.0.0        B       libgcj3.3       /usr/lib/libgcj.so.4.0.0   B        A
libgcj3.3       /usr/lib/libgcj.so.4.0.0        B       libgcj3.3-debug /usr/lib/debug/libgcj.so.4.0.0      B       A
libgcj3.3       /usr/lib/libgcj.so.4.0.0        B       libgcj3.4       /usr/lib/libgcj.so.5.0.0   B        A
libgcj3.3       /usr/lib/libgcj.so.4.0.0        B       libgcj3.4-debug /usr/lib/debug/libgcj.so.5.0.0      B       A
libgcj3.4       /usr/lib/libgcj.so.5.0.0        B       libgcj3.3       /usr/lib/libgcj.so.4.0.0   B        A
libgcj3.4       /usr/lib/libgcj.so.5.0.0        B       libgcj3.3-debug /usr/lib/debug/libgcj.so.4.0.0      B       A
libgcj3.4       /usr/lib/libgcj.so.5.0.0        B       libgcj3.4       /usr/lib/libgcj.so.5.0.0   B        A
libgcj3.4       /usr/lib/libgcj.so.5.0.0        B       libgcj3.4-debug /usr/lib/debug/libgcj.so.5.0.0      B       A
libfaac /usr/lib/libfaac.so.0.0.0       T       libfaac /usr/lib/libfaac.so.0.0.0       T       AACQuantize
libfaac /usr/lib/libfaac.so.0.0.0       T       libfaac /usr/lib/libfaac.so.0.0.0       T       AACQuantizeEnd
$

Это прямое произведение, его даже бесполезно пробовать сохранять на
диске.  Для серьезной работы с такими вещами нужны ленивые вычисления,
как минимум что-то вроде SQL views.

3) Из этого списка нужно убрать собственные совпадения, то есть
cовпадения (библиотека == библиотека).  Ищем только совпадения
(библиотека == бинарь).  Ищем также совпадения по типу сивола (здесь бы
нужно делать join по составному ключу тип+символ, но join(1) этого не
умеет).  Это уже можно будет попробовать сохранить на диске.

$ join -t$'\t' -j 4 -o '1.1 1.2 1.3 2.1 2.2 2.3 0' libdef def |
	awk -F'\t' '{OFS="\t"}$2!=$5&&$3==$6{print$1,$2,$4,$5,$6,$7}' >product
^C
$ du -hs product
915M    product
$

Не удается сохранить на диск.

$ head product
libgcj3.3	/usr/lib/libgcj.so.4.0.0	libgcj3.3-debug	/usr/lib/debug/libgcj.so.4.0.0	B	A
libgcj3.3	/usr/lib/libgcj.so.4.0.0	libgcj3.4	/usr/lib/libgcj.so.5.0.0	B	A
libgcj3.3	/usr/lib/libgcj.so.4.0.0	libgcj3.4-debug	/usr/lib/debug/libgcj.so.5.0.0	B	A
libgcj3.4	/usr/lib/libgcj.so.5.0.0	libgcj3.3	/usr/lib/libgcj.so.4.0.0	B	A
libgcj3.4	/usr/lib/libgcj.so.5.0.0	libgcj3.3-debug	/usr/lib/debug/libgcj.so.4.0.0	B	A
libgcj3.4	/usr/lib/libgcj.so.5.0.0	libgcj3.4-debug	/usr/lib/debug/libgcj.so.5.0.0	B	A
libinn	/usr/lib/libstorage.so.2.0.0	inn	/usr/bin/nnrpd	B	ACTIVE
libinn	/usr/lib/libstorage.so.2.0.0	inn	/usr/bin/tdx-util	B	ACTIVE
libfreewrl	/usr/lib/libFreeWRLFunc.so	freewrl	/usr/lib/perl5/vendor_perl/i386-linux/auto/VRML/VRMLFunc/VRMLFunc.so	D	AC_LastDuration
libfreewrl	/usr/lib/libFreeWRLFunc.so	freewrl	/usr/lib/perl5/vendor_perl/i386-linux/auto/VRML/VRMLFunc/libFreeWRLFunc.so	D	AC_LastDuration
$

Ну ясно, что получается.  Слева -- системная библиотека, справа --
бинарь (возможно, другая системная библиотека), которая предоставляет
такой же символ.

Нужно понять, что там "забилось".

$ cut -f5,6 product |uniq -c -f1 |sort -n |tail
    169 A       WX_2.6
    182 T       ODBCINSTGetProperties
    253 A       GLIBC_PRIVATE
    278 A       EXPORTED
    327 T       Mod_Init
    510 A       GLIBC_2.0
    756 T       MD5Final
    756 T       MD5Init
    756 T       MD5Update
9487118 A       _DYNAMIC
$

3a) Ясно, пробуем ещё раз, исключив символы типа [A].

$ join -t$'\t' -j 4 -o '1.1 1.2 1.3 2.1 2.2 2.3 0' libdef def |
	awk -F'\t' '{OFS="\t"}$2!=$5&&$3==$6&&$3!="A"{print$1,$2,$4,$5,$6,$7}' >product
^C
$ du -hs product
515M    product
$

Опять забилось.

$ cut -f5,6 product |uniq -c -f1 |sort -n
...
  24920 a       _DYNAMIC
  29465 W       _ZNK17QValueListPrivateI7QStringE2atEj
  56098 V       _ZTI9QMemArrayIcE
  56098 V       _ZTS9QMemArrayIcE
  56208 V       _ZTV9QMemArrayIcE
  56208 W       _ZN9QMemArrayIcE6detachEv
  56208 W       _ZN9QMemArrayIcED0Ev
  56208 W       _ZN9QMemArrayIcED1Ev
  57237 W       _Z4endlR11kndbgstream
  61386 W       _Z4endlR10kdbgstream
 105193 W       _ZN7QWidget11setGeometryERK5QRect
 107391 W       _ZN10QValueListI7QStringE14detachInternalEv
 107391 W       _ZN17QValueListPrivateI7QStringE6insertE18QValueListIteratorIS0_ERKS0_
 109473 W       _ZN17QValueListPrivateI7QStringEC1ERKS1_
 111298 W       _ZN17QValueListPrivateI7QStringEC1Ev
 124924 W       _ZN7QWidget9setWFlagsEj
 124924 W       _ZN7QWidget9setWStateEj
 139398 W       _ZN17QValueListPrivateI7QStringED1Ev
 331113 V       _ZTI6QGList
 331113 V       _ZTS6QGList
 337244 V       _ZTV6QGList
 337244 W       _ZNK6QGList5countEv
$

3б) Okay, что делать с [VW], я не знаю.  Проще всего перестроить список
libdef, оставив только символы [BDT] -- глобальные переменные и функции.

$ awk -F'\t' '$2~"^(/usr(/X11R6)?)?/lib(64)?/lib[^/]+[.]so"&&$3~/[BDT]/' def >libdef
$ du -hs libdef
56M     libdef
$ join -t$'\t' -j 4 -o '1.1 1.2 1.3 2.1 2.2 2.3 0' libdef def |
	awk -F'\t' '{OFS="\t"}$2!=$5&&$3==$6{print$1,$2,$4,$5,$6,$7}' >product
^C
$ du -hs product
352M    product
$

Опять забивается, из-за символов "T _fini" и "T _init".
Самые частые символы нужно удалить из libdef.

3в) Перестраиваем libdef без символов _fini и _init.

$ awk -F'\t' '$2~"^(/usr(/X11R6)?)?/lib(64)?/lib[^/]+[.]so"&&$3~/[BDT]/&&$4!="_fini"&&$4!="_init"' def >libdef
$ join -t$'\t' -j 4 -o '1.1 1.2 1.3 2.1 2.2 2.3 0' libdef def |
	awk -F'\t' '{OFS="\t"}$2!=$5&&$3==$6{print$1,$2,$4,$5,$6,$7}' >product
$ du -hs product
113M    product
$

Во!  Получилось.

$ tail product
libclamav	/usr/lib/libclamav.so.1.0.16	zziplib	/usr/lib/libzzip-0-64.so.13.0.38	T	zzip_seterror
zziplib	/usr/lib/libzzip-0-64.so.13.0.38	libclamav	/usr/lib/libclamav.so.1.0.16	T	zzip_seterror
libclamav	/usr/lib/libclamav.so.1.0.16	zziplib	/usr/lib/libzzip-0-64.so.13.0.38	T	zzip_strerror
zziplib	/usr/lib/libzzip-0-64.so.13.0.38	libclamav	/usr/lib/libclamav.so.1.0.16	T	zzip_strerror
libclamav	/usr/lib/libclamav.so.1.0.16	zziplib	/usr/lib/libzzip-0-64.so.13.0.38	T	zzip_strerror_of
zziplib	/usr/lib/libzzip-0-64.so.13.0.38	libclamav	/usr/lib/libclamav.so.1.0.16	T	zzip_strerror_of
libclamav	/usr/lib/libclamav.so.1.0.16	zziplib	/usr/lib/libzzip-0-64.so.13.0.38	T	zzip_tell
zziplib	/usr/lib/libzzip-0-64.so.13.0.38	libclamav	/usr/lib/libclamav.so.1.0.16	T	zzip_tell
libclamav	/usr/lib/libclamav.so.1.0.16	zziplib	/usr/lib/libzzip-0-64.so.13.0.38	T	zzip_telldir
zziplib	/usr/lib/libzzip-0-64.so.13.0.38	libclamav	/usr/lib/libclamav.so.1.0.16	T	zzip_telldir
$

Из этого видно, что библиотека libclamav, похоже, таскает с собой
библиотеку zziplib (или статически с ней слинкована).

Проверяем, где у нас zlibVersion.

$ grep -w zlibVersion product
zlib    /lib/libz.so.1.2.3      R-base  /usr/lib/R/bin/R.bin    T       zlibVersion
zlib    /lib/libz.so.1.2.3      R-base  /usr/lib/R/bin/libR.so  T       zlibVersion
zlib    /lib/libz.so.1.2.3      erlang  /usr/lib/erlang/erts-5.4/bin/beam       T       zlibVersion
zlib    /lib/libz.so.1.2.3      erlang  /usr/lib/erlang/erts-5.4/bin/beam.shared        T       zlibVersion
zlib    /lib/libz.so.1.2.3      firefox /usr/lib/firefox-1.0.6/install/mozilla-installer-bin    T  zlibVersion
zlib    /lib/libz.so.1.2.3      firefox /usr/lib/firefox-1.0.6/mozilla-installer-bin    T       zlibVersion
zlib    /lib/libz.so.1.2.3      j2se1.3-sun     /usr/lib/j2se1.3-sun/jre/lib/i386/libzip.so     T  zlibVersion
zlib    /lib/libz.so.1.2.3      openoffice.org  /usr/lib/OpenOffice.org1.1.4/program/libmozz.so T  zlibVersion
zlib    /lib/libz.so.1.2.3      scorched3d      /usr/games/scorched3d   T       zlibVersion
zlib    /lib/libz.so.1.2.3      vnc-server      /usr/bin/Xvnc   T       zlibVersion
zlib    /lib/libz.so.1.2.3      xmule   /usr/bin/xmule  T       zlibVersion
$

Нужно теперь подумать, что делать с этим списком.
Я бы его кому-нибудь продал.  Всего ничего, доллар за мегабайт. :)

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [devel] Re: zlib addicts
  2005-10-08 10:08 [devel] zlib addicts Alexey Tourbin
@ 2005-10-08 17:41 ` Konstantin A. Lepikhov
  0 siblings, 0 replies; 2+ messages in thread
From: Konstantin A. Lepikhov @ 2005-10-08 17:41 UTC (permalink / raw)
  To: ALT Devel discussion list

[-- Attachment #1: Type: text/plain, Size: 826 bytes --]

Hi Alexey!

Saturday 08, at 02:08:42 PM you wrote:

<skip>
> zlib    /lib/libz.so.1.2.3      firefox /usr/lib/firefox-1.0.6/install/mozilla-installer-bin    T  zlibVersion
> zlib    /lib/libz.so.1.2.3      firefox /usr/lib/firefox-1.0.6/mozilla-installer-bin    T       zlibVersion
> zlib    /lib/libz.so.1.2.3      j2se1.3-sun     /usr/lib/j2se1.3-sun/jre/lib/i386/libzip.so     T  zlibVersion
однако fx собирается с --enable-system-zlib. Лучше я прибью нафиг этот
mozilla-installer, все равно он не нужен.

PS описание поиска просто супер, занесу к себе в копилку :))

-- 
WBR, Konstantin	      chat with ==>ICQ: 109916175
     Lepikhov,	      speak  to ==>JID: lakostis@jabber.org
aka L.A. Kostis       write  to ==>mailto:lakostis@pisem.net.nospam

...The information is like the bank... 			  (c) EC8OR

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2005-10-08 17:41 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-10-08 10:08 [devel] zlib addicts Alexey Tourbin
2005-10-08 17:41 ` [devel] " Konstantin A. Lepikhov

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git