* [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