[devel] lost soname dependencies

Alexey Tourbin at на altlinux.ru
Чт Мар 24 20:52:24 UTC 2011


После исправления зависимостей у *-devel пакетов некоторые пакеты стали
собираться в урезнной конфигурации.  Большая часть таких пакетов может
быть идентифицирована по результатам тестовой пересборки, после которой
выполняется сравнение свежепересобранных пакетов с пакетами в репозитории.
К письму приложен скрипт, который по логу сборки показывает "убывшие"
имена библиотек - т.е. зависимости, которые присутствуют в репозитории,
но отсутствуют после тестовой пересборки.  Это не очень совершенный метод
идентификации потерянных зависимостей, и это лучшее, что у нас сейчас есть.
Тем не менее, большую часть урезанных пакетов таким образом определить удаётся.

Скрипт работает так: он, очевидно, ищет в логе минус-строчки из диффа вида
-Requires: lib*.so.*
При этом если в логе есть плюс-строчки или контекст-строчки вида
+Requires: lib*.so.*
 Requires: lib*.so.*
то они отменяют соответствующие минус-строчки.

Далее, если зависимость в пакете действительно "убыла", то это может
случиться по двум причинам:
1) Зависимость соптимизировалась из-за того, что такая зависимость уже
существует в базовом подпакете (оптимизация зависимостей между подпакетами
была реализована не так давно), а у базового пакета зависимости не
изменились.  Но rpmbuild выводит в лог сборки зависимости собранных
пакетов - эти строчки начинаются с Requires или PreReq.  Тогда если
в зависимостях имя библиотеки есть, значит просто сработала оптимизация
между подпакетами.  А иначе
2) Зависимость на имя библиотеки действительно исчезла.

Скрипт заточен под x86_64.
Вот полный вывод скрипта (179 пакетов).

[apiary на ssh success]$ pwd
/home/apiary/logs/Sisyphus-x86_64/archive/2011/0320/success
[apiary на ssh success]$ for f in *; do ~/bin/lost-sonames $f; done
0ad-0.r08832-alt2	libboost_filesystem.so.1.45.0
0ad-0.r08832-alt2	libboost_signals.so.1.45.0
0ad-0.r08832-alt2	libboost_system.so.1.45.0
TiMidity++-2.13.2-alt12	libpng12.so.0
WMmp-0.10.0-alt1.1	libnsl.so.1
Xaw95-1.1-alt2.qa1	libXext.so.6
afepack-complex-1.8-alt3	libboost_program_options.so.1.46.0
afepack-real-1.8-alt3	libboost_program_options.so.1.46.0
akonadi-1.5.1-alt1	libboost_program_options.so.1.46.0
allegro4.4-4.4.1.1-alt1	libXxf86vm.so.1
amide-0.9.2-alt1	libgcc_s.so.1
amide-0.9.2-alt1	libmdc.so.2
amide-0.9.2-alt1	libstdc++.so.6
amide-0.9.2-alt1	libz.so.1
antico-deluxe-0.1.96-alt1	libao.so.2
apg-2.2.3-alt3	libnsl.so.1
aria2-1.10.8-alt1	libz.so.1
asc-2.4.0.0-alt1.1	libboost_regex.so.1.45.0
avogadro-1.0.1-alt2	libboost_python.so.1.46.0
awn-extras-0.4.0-alt2	libXfixes.so.3
bombono-dvd-1.0.1-alt1.1	libboost_filesystem.so.1.46.0
bombono-dvd-1.0.1-alt1.1	libboost_regex.so.1.46.0
bombono-dvd-1.0.1-alt1.1	libboost_system.so.1.46.0
bs2b-3.1.0-alt1.2	libstdc++.so.6
bzflag-2.0.16-alt1	libz.so.1
calibre-0.7.9-alt2	libpoppler.so.7
cdrdao-1.2.3-alt2	libao.so.2
cherokee-1.2.1-alt1	libcrypto.so.10
cherokee-1.2.1-alt1	libssl.so.10
claws-mail-3.7.8-alt1	libgcrypt.so.11
claws-mail-3.7.8-alt1	libgnutls.so.26
clisp-1:2.48-alt1	libsigsegv.so.0
collectd-4.10.2-alt5	libgobject-2.0.so.0
compiz-fusion-plugins-extra-0.8.6-alt2	libgobject-2.0.so.0
cups-1.4.6-alt2	libslp.so.1
dealii-complex-7.1-alt1.pre.svn20110121.1	libboost_thread.so.1.46.0
dealii-real-7.1-alt1.pre.svn20110121.1	libboost_thread.so.1.46.0
devil-1.7.8-alt1	liballeg.so.4.2
dia-0.97.1-alt2	libpng12.so.0
dolfin-complex-0.9.9-alt1.bzr20101201.1	libboost_filesystem.so.1.46.0
dolfin-complex-0.9.9-alt1.bzr20101201.1	libboost_program_options.so.1.46.0
dolfin-complex-0.9.9-alt1.bzr20101201.1	libboost_system.so.1.46.0
dolfin-complex-0.9.9-alt1.bzr20101201.1	libboost_thread.so.1.46.0
dolfin-real-0.9.9-alt1.bzr20101201.1	libboost_filesystem.so.1.46.0
dolfin-real-0.9.9-alt1.bzr20101201.1	libboost_program_options.so.1.46.0
dolfin-real-0.9.9-alt1.bzr20101201.1	libboost_system.so.1.46.0
dolfin-real-0.9.9-alt1.bzr20101201.1	libboost_thread.so.1.46.0
dumb-0.9.3-alt1.qa1	liballeg.so.4.2
easytag-2.1.6-alt7	libgcc_s.so.1
emu51-0.0.3-alt1	liballeg.so.4.2
epsoneplijs-0.4.0-alt1	libusb-0.1.so.4
fbv-1.0b-alt2	libungif.so.4
festival-2.0.95-alt1	libasound.so.2
flac123-0.0.11-alt1	libao.so.2
flphoto-1.3.1-alt4	libfltk.so.1.1
flphoto-1.3.1-alt4	libfltk_images.so.1.1
flpsed-0.5.2-alt1	libfltk.so.1.1
freeorion-0.3.15-alt1.svn3727.1	libboost_filesystem.so.1.46.0
freeorion-0.3.15-alt1.svn3727.1	libboost_python.so.1.46.0
freeorion-0.3.15-alt1.svn3727.1	libboost_serialization.so.1.46.0
freeorion-0.3.15-alt1.svn3727.1	libboost_signals.so.1.46.0
freeorion-0.3.15-alt1.svn3727.1	libboost_system.so.1.46.0
freeorion-0.3.15-alt1.svn3727.1	libboost_thread.so.1.46.0
frei0r-plugins-1.2.1-alt1	libopencv_core.so.2.1
frei0r-plugins-1.2.1-alt1	libopencv_imgproc.so.2.1
frei0r-plugins-1.2.1-alt1	libopencv_objdetect.so.2.1
frei0r-plugins-1.2.1-alt1	libopencv_video.so.2.1
frogatto-1.0.3-alt1.1	libboost_regex.so.1.45.0
frogatto-1.0.3-alt1.1	libboost_system.so.1.45.0
fuse-encfs-1.7.2-alt1.1	libboost_serialization.so.1.45.0
fuse-encfs-1.7.2-alt1.1	libboost_system.so.1.45.0
getstream-20100816-alt1	libevent-1.4.so.2
ghostscript-9.01-alt1	libpng12.so.0
gigi-0.7.0-alt4.svn813.1	libboost_filesystem.so.1.46.0
gigi-0.7.0-alt4.svn813.1	libboost_signals.so.1.46.0
gigi-0.7.0-alt4.svn813.1	libboost_system.so.1.46.0
gigi-0.7.0-alt4.svn813.1	libboost_thread.so.1.46.0
gimp-2.6.11-alt3	libXfixes.so.3
gimp-plugin-dcamnoise2-0.64-alt1	libstdc++.so.6
gimp-plugin-voronoi-2.2-alt1	libdl.so.2
gimp-plugin-voronoi-2.2-alt1	libz.so.1
givertcap-1.0-alt4.1.1	libstdc++.so.6
glob2-0.9.4.4-alt1.qa1.1	libboost_thread.so.1.45.0
gnome-applets-file-browser-0.6.1-alt1	libgnome-2.so.0
gnome-applets-file-browser-0.6.1-alt1	libgnomeui-2.so.0
gnustep-make-libFoundation-1.11.0-alt0.1	libc.so.6
grip-20090606:3.1.3-alt12	libstdc++.so.6
gsasl-1.4.4-alt1	libgcrypt.so.11
gst-plugins-bad-0.10.21-alt1	libpng12.so.0
gst-plugins-good-0.10.27-alt1	libpng12.so.0
gst-plugins-good-0.10.27-alt1	libz.so.1
gtkwave-3.3.0-alt4	libz.so.1
herrie-2.2-alt3	libmodplug.so.0
html2text-1.3.2a-alt2	libm.so.6
hugin-2010.4.0-alt1.1	libboost_regex.so.1.45.0
hugin-2010.4.0-alt1.1	libboost_signals.so.1.45.0
hugin-2010.4.0-alt1.1	libboost_system.so.1.45.0
hugin-2010.4.0-alt1.1	libboost_thread.so.1.45.0
hugs98-20060921-alt5	libalut.so.0
hugs98-20060921-alt5	libopenal.so.0
icecast-2.3.2-alt3.1	libssl.so.10
inkscape-0.48.0-alt2	libpoppler.so.12
jack_mixer-9-alt1	libpthread.so.0
jikes-1.22-alt1.1	libm.so.6
kannel-1.5.0-alt1.cvs20091101.1	libcrypto.so.10
kannel-1.5.0-alt1.cvs20091101.1	libssl.so.10
kde4edu-4.6.1-alt1	libboost_python.so.1.46.0
koffice-4:2.3.3-alt1	libpoppler.so.12
konversation-1.3.1-alt1	libkutils.so.4
krb5user-0.1.2-alt2.1.1	libboost_python.so.1.45.0
ladspa-blop-plugins-0.2.8-alt2	libm.so.6
lemmings-pp-20100311-alt1	liballeg.so.4.2
libcaca-0.99-alt11.beta16	libz.so.1
libfprint-0.2.0-alt2	libMagickCore.so.4
libgegl-0.1.6-alt1	libpng12.so.0
libggz-0.0.14.1-alt2	libgcrypt.so.11
libguichan-0.8.2-alt2	liballeg.so.4.2
libprojectM-2.0.1-alt1	libftgl.so.0
libpt-2.6.7-alt1.qa1	libsasl2.so.2
libv-1.90-alt7	libGLw.so.1
lp_server-1.1.6-alt1	libnet.so.2
lp_server-1.1.6-alt1	libnsl.so.1
manedit-1.2.1-alt1.qa1	libX11.so.6
manedit-1.2.1-alt1.qa1	libstdc++.so.6
matanza-0.13-alt2	libnsl.so.1
memcacheq-0.1.1-alt2	libevent.so.1
moc-2.5.0-alt0.7	libmodplug.so.0
mod_auth_pam-1.1.1-alt1	libdl.so.2
monica-3.7-alt2	libfltk.so.1.1
mpg321-0.2.11-alt1	libao.so.2
mpgtx-1.3.1-alt1	libm.so.6
mures-0.5-alt5.qa1	libpthread.so.0
mysql-connector-odbc-5.1.5-alt2	libpthread.so.0
mysql-proxy-0.7.2-alt1	libevent-1.4.so.2
netatalk-2.0.5-alt1.1	libgcrypt.so.11
nfs-server-userland-2.2beta51-alt1	libcrypt.so.1
ntop-3.3.10-alt2.1	libevent-1.4.so.2
ogre-1.7.2-alt1.1	libboost_thread.so.1.46.0
openbabel-2.2.3-alt2	libz.so.1
openoffice.org-1:3.2.1.6-alt3.2	libpoppler.so.7
pachi-1.0-alt3.qa1	libstdc++.so.6
patchage-0.4.2-alt2	libjack.so.0
patchage-0.4.2-alt2	libm.so.6
pcf2bdf-1.04-alt1.1	libgcc_s.so.1
pcf2bdf-1.04-alt1.1	libm.so.6
pdf2djvu-0.7.4-alt1	libpoppler.so.7
pdfcube-0.0.3-alt1.1.1	libboost_program_options.so.1.45.0
pdfcube-0.0.3-alt1.1.1	libpoppler-glib.so.5
pdftk-1.41-alt1_18jpp5	libgcj.so.10
perl-Event-Lib-1.03-alt2.1	libevent.so.1
pgbouncer-1.3.4-alt1	libevent.so.1
pingus-0.7.2-alt3.1	libboost_signals.so.1.45.0
pmidi-1.6.0-alt1	libdl.so.2
pmidi-1.6.0-alt1	libm.so.6
poppler7-0.14.5-alt3	libpng12.so.0
pswarm-1.5-alt4	libR-2.11.so
python-module-IceSSL-0.0.5-alt3.1.1	libboost_python.so.1.45.0
python-module-boostmpi-1.39-alt1.git20091015	libboost_mpi.so.1.45.0
python-module-boostmpi-1.39-alt1.git20091015	libboost_mpi_python.so.1.45.0
python-module-boostmpi-1.39-alt1.git20091015	libboost_python.so.1.45.0
python-module-gevent-0.13.0-alt1.hg20100802	libevent-1.4.so.2
python-module-kadmin5-0.0.5-alt4.1.1	libboost_python.so.1.45.0
python-module-pyexiv2-0.3.0-alt1	libboost_python.so.1.46.0
python-module-pygtkimageview-1.1.0-alt1.1	libpthread.so.0
python-module-rpy-1.0.3-alt1.svn20101101	libR-2.11.so
python-module-rpy2-2.1.0-alt2	libR-2.11.so
qtsmbstatus-2.1-alt2	libpthread.so.0
quake3-1.34-alt8.svn1114.qa1	libopenal.so.0
qutecom-2.2-alt13	libboost_program_options.so.1.45.0
qutecom-2.2-alt13	libboost_serialization.so.1.45.0
qutecom-2.2-alt13	libboost_signals.so.1.45.0
qutecom-2.2-alt13	libboost_thread.so.1.45.0
remmina-plugins-0.9.2-alt1	libgnutls.so.26
remmina-plugins-0.9.2-alt1	libjpeg.so.62
remmina-plugins-0.9.2-alt1	libz.so.1
rhythmbox-0.13.3-alt1	libpng12.so.0
rspamd-0.3.2-alt1.1	libevent-1.4.so.2
salsa-complex-2.01-alt1.svn20100714.2	libtmglib.so.4
scanssh-1:2.1-alt2	libevent.so.1
simpleproxy-3.4-alt1	libnsl.so.1
skype-call-recorder-0.8-alt2	libpthread.so.0
sleuthkit-3.0.0-alt2.qa1	libstdc++.so.6
slocate-1:0.2.16-alt1	libcap.so.1
slurm-2.0.9-alt1.3	libcrypto.so.10
smalltalk-3.2.2-alt1.git.7.g39420d7	libz.so.1
soundtracker-0.6.8-alt5.qa1	libasound.so.2
spamassassin-3.3.1-alt2	libz.so.1
spectrum-fuse-0.8.0.1-alt1.qa1	libpng12.so.0
sphinx-0.9.9-alt3.1	libz.so.1
springrts-0.81.2.1-alt1.1	libboost_program_options.so.1.45.0
springrts-0.81.2.1-alt1.1	libboost_regex.so.1.45.0
springrts-0.81.2.1-alt1.1	libboost_signals.so.1.45.0
springrts-0.81.2.1-alt1.1	libboost_system.so.1.45.0
springrts-0.81.2.1-alt1.1	libboost_thread.so.1.45.0
sword-1.6.0-alt3.qa1.1	libz.so.1
tcl-trf-2.1-alt7	libcrypt.so.1
tcptraceroute-1.5-alt5	libcap.so.1
tircproxy-0.4.5-alt3	libnsl.so.1
tk-8.5.9-alt2	libXss.so.1
tmux-1.3-alt1	libevent-1.4.so.2
toilet-0.1-alt1	libcucul.so.0
tor-0.2.1.27-alt2	libevent.so.1
torsmo-0.18-alt3.qa1	libXext.so.6
transmission-2.22-alt1	libdbus-glib-1.so.2
tremulous-1.1.0-alt4	libopenal.so.0
ufraw-0.18-alt1	libpng12.so.0
ufraw-0.18-alt1	libz.so.1
ulogd-1.24-alt15	libcrypt.so.1
ulogd-1.24-alt15	libm.so.6
ulogd-1.24-alt15	libnsl.so.1
utftpd-0.2.4-alt2	libnsl.so.1
v4l2ucp-2.0-alt1	libpthread.so.0
vegastrike-0.5.0-alt1_21	libboost_python.so.1.45.0
vice-2.1-alt5	libX11.so.6
vice-2.1-alt5	libXxf86vm.so.1
vice-2.1-alt5	libasound.so.2
vice-2.1-alt5	libpng12.so.0
vice-2.1-alt5	libz.so.1
virtuoso-opensource-6.1.2-alt2	libz.so.1
w3m-0.5.2-alt2.1.1	libz.so.1
weechat-0.3.4-alt1	libgcrypt.so.11
wmmenu-1.2-alt1	libXext.so.6
wmmenu-1.2-alt1	libXpm.so.4
wmmenu-1.2-alt1	libm.so.6
wmpager-1.2-alt5	libm.so.6
wxlua-2.8.10.0-alt1	libwx_gtk2u_gl-2.8.so.0
wxlua-2.8.10.0-alt1	libwxlua_gtk2u_wxbindgl-2.8.so.0
xdm-2:1.1.10-alt1	libXrender.so.1
xfindproxy-1.0.1-alt1	libSM.so.6
xfindproxy-1.0.1-alt1	libX11.so.6
xfwp-1.0.1-alt2	libX11.so.6
xine-ui-0.99.5-alt8	libcucul.so.0
xlhtml-0.5.1-alt2	libm.so.6
xmms-imms-20081105:3.0.2-alt5	libX11.so.6
xmms-imms-20081105:3.0.2-alt5	libXss.so.1
xmms-in-bonk-0.12-alt1	libgcc_s.so.1
xmms-in-bonk-0.12-alt1	libm.so.6
xmms-in-mac-0.3.1-alt3	libstdc++.so.6
xmms-in-modplug-2.05-alt4	libm.so.6
xmms-in-modplug-2.05-alt4	libmodplug.so.0
xmms-infopipe-1.3-alt1	libgtk-1.2.so.0
xsane-0.998-alt1	libpng12.so.0
xsane-0.998-alt1	libz.so.1
xstdcmap-1.0.1-alt1	libICE.so.6
xstdcmap-1.0.1-alt1	libSM.so.6
xstdcmap-1.0.1-alt1	libXt.so.6
xulrunner-192-1.9.2.15-alt1.20110308	libz.so.1
xulrunner-minefield-2.0.0.0-alt0.20110225	libz.so.1
xvidcap-1.1.7-alt9	libmp3lame.so.0
xvidcap-1.1.7-alt9	libz.so.1
zoom-1.0.5-alt1	libXft.so.2
[apiary на ssh success]$

Вот статистика убывших зависимостей.

[apiary на ssh success]$ for f in *; do ~/bin/lost-sonames $f; done |cut -f2 |sort |uniq -c |sort -n |awk '$1>=3'
      3 libR-2.11.so
      3 libXext.so.6
      3 libasound.so.2
      3 libboost_program_options.so.1.45.0
      3 libcrypt.so.1
      3 libcrypto.so.10
      3 libdl.so.2
      3 libfltk.so.1.1
      3 libmodplug.so.0
      3 libopenal.so.0
      3 libpoppler.so.7
      3 libssl.so.10
      4 libao.so.2
      4 libboost_python.so.1.46.0
      4 libboost_regex.so.1.45.0
      4 libboost_thread.so.1.45.0
      4 libgcc_s.so.1
      5 libX11.so.6
      5 liballeg.so.4.2
      5 libboost_filesystem.so.1.46.0
      5 libboost_program_options.so.1.46.0
      5 libboost_python.so.1.45.0
      5 libboost_signals.so.1.45.0
      5 libboost_system.so.1.45.0
      5 libboost_system.so.1.46.0
      5 libevent.so.1
      5 libgcrypt.so.11
      6 libevent-1.4.so.2
      7 libboost_thread.so.1.46.0
      7 libpthread.so.0
      8 libnsl.so.1
      9 libstdc++.so.6
     12 libpng12.so.0
     13 libm.so.6
     21 libz.so.1
[apiary на ssh success]$

Понятно, что не все зависимости в этом списке убыли из-за изменения
зависимостей у *-devel пакетов.  Например, libboost_* зависимости убывают
из-за частой смены сонеймов: 1.45.0 -> 1.46.0 -> 1.46.1 (то есть вместо
них появляются новые libboost_* зависимости).  Сюда же относится
libpoppler, libevent и libfltk.

Если исключить ещё пакеты с libc-зависимстями, libgcc, libstdc++, и ещё
libR, то всего надо проверить примерно 97 пакетов и пересобрать некоторые
из них в среде с более полными зависимостями.
----------- следующая часть -----------
#!/bin/sh -efu
log=$1
removed=$(gzip -cdfq "$log" |sed -n 's/^-Requires: \(lib.*\.so[^(]*\)(.*/\1/p' |sort -u)
[ -n "$removed" ] || exit 0
requires=$(gzip -cdfq "$log" |egrep '^([ +]Requires:|Requires[(:]|PreReq:)' |cut -d: -f2-)
for soname in $removed; do
	if printf '%s\n' "$requires" |fgrep -qs " $soname("; then
		continue
	fi
	printf '%s\t%s\n' "${log%.gz}" "$soname"
done


Подробная информация о списке рассылки Devel