Bug 15079 - detect when new packages require new versions of libraries
Summary: detect when new packages require new versions of libraries
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: rpm-build (show other bugs)
Version: unstable
Hardware: all Linux
: P2 enhancement
Assignee: placeholder@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on: 22383
Blocks: 28382 14603 15515 15520 15573 15700 15702 15708 15720 15944 16004 16005 16006 16007 16008 18279 18319 18654 21991 22308 23679 23681 23683 25814 28380
  Show dependency tree
 
Reported: 2008-03-25 19:55 MSK by Ivan Zakharyaschev
Modified: 2013-01-18 07:23 MSK (History)
7 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ivan Zakharyaschev 2008-03-25 19:55:09 MSK
Probably this problem doesn't have a neat solution.

Sometimes it is not detected that newly built packages require only a new
version of a library. As a result, unresolved symbols arise even when all RPM
dependencies are satisfied. 

For example: https://bugzilla.altlinux.org/show_bug.cgi?id=14603 .

Storing all symbol names in RPMs as dependencies probably is not a feasible
solution to protect from such cases. (Too many dependencies?) Another way would
be to use an external tool inspecting Sisyphus and keeping track of changes in
symbol requirements, and adding a "Requires: libXXX >= N.N" to a package when
needed.
Comment 1 at@altlinux.org 2008-03-26 05:13:42 MSK
У меня была такая идея -- отслеживать, начиная с какой версии появился
опредленный символ.

Но полный дамп символов сизиф занимает...
$ du sym def
574M    sym
359M    def
$

Этот дамп можно сделать с помощью /usr/bin/rpmelfsym на предмет посмотреть что
уже есть на эту тему.

Ну и тут ещё проблема в том что генерация репозитария становится инкрементальной
-- то есть нельзя это перегенерить с нуля.  А также символы могут не только
добавляться, но и удаляться.
Comment 2 Ivan Zakharyaschev 2008-03-28 01:23:02 MSK
(In reply to comment #1)
> Ну и тут ещё проблема в том что генерация репозитария становится инкрементальной
> -- то есть нельзя это перегенерить с нуля.

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

Тогда в формулировке есть зависимость от старого состояния Сизифа, поэтому
обвинить в невоспроизводимости с нуля нельзя. А польза была бы.
Comment 3 Ivan Zakharyaschev 2008-03-28 01:47:19 MSK
(In reply to comment #1)

>  А также символы могут не только
> добавляться, но и удаляться.

Да, представил себе сценарий: собрали новую библиотеку, в ней пропал символ,
используемый программами, кто-то поставил себе эту новую библиотеку, старые
программы перестали работать. Это, получается, конфликт новой библиотеки с
некоторыми старыми программами, от неё зависящими. Такое даже не очень понятно,
куда писать -- не в библиотеку же. 

Но зато это не такая тяжёлая ситуация для пользователя: если программа перестала
работать, её (можно сообразить, что) надо попытаться обновить. Искать
библиотеку, которую надо обновить при новой программе, (как в поводе для этого
обсуждения) гораздо неприятнее.

В принципе, в этой ситуации с пропавшими из библиотеки символами помочь
пользователю старых программ никак нельзя, он сам должен думать, когда обновляет
библиотеку. 

А в ситуации с появившимися символами можно: он ставит программу, и у него
должно автоматически поставиться всё, что ей нужно.
Comment 4 Ivan Zakharyaschev 2008-03-28 01:50:42 MSK
(In reply to comment #3)

> В принципе, в этой ситуации с пропавшими из библиотеки символами помочь
> пользователю старых программ никак нельзя, он сам должен думать, когда обновляет
> библиотеку. 

А Сизифу поможет пересборка в таком случае.
Comment 5 Ivan Zakharyaschev 2008-05-02 02:44:06 MSD
Ещё случаи в копилку примеров:
https://bugzilla.altlinux.org/show_bug.cgi?id=15515 ,
https://bugzilla.altlinux.org/show_bug.cgi?id=15520 .
Comment 6 Ivan Zakharyaschev 2008-05-02 02:48:20 MSD
(here, "bug blocks ..." == "this feature would have solved those problems")
Comment 7 Ivan Zakharyaschev 2008-05-02 03:25:29 MSD
Вариант реализации: при попадании в Сизиф новой версии библиотеки сравнивать её
ABI со старым ABI и требовать, чтобы различия были "версионированы" (иначе не
пропускать). Так прежде чем пакету попасть в Сизиф, версии должны будут быть
добавлены в него, а после попадания -- проблемы с воспроизводимостью сборки не
будет (всё уже в нём указано). 

(Это, правда, уже не совсем дело rpm-build.)
Comment 8 Ivan Zakharyaschev 2008-06-13 19:00:23 MSD
I made a search for some of the cases of undefined symbols admitted by APT on my system:

First, find the affected programs:

$ sudo ldd -r {,/usr}/{s,}bin/* 2>&1 >/dev/null | fgrep -v SUNW | fgrep undef | sed -e 's|.*(\(.*\)).*|\1|' | sort -u
/usr/bin/abiword
/usr/bin/gedit
/usr/bin/gimmage
/usr/bin/gmplayer
/usr/bin/gnome-system-monitor
/usr/bin/gnome-text-editor
/usr/bin/inkscape
/usr/bin/inkview
/usr/bin/lzop
/usr/bin/mencoder
/usr/bin/mplayer
/usr/bin/seahorse
/usr/bin/seahorse-agent
/usr/bin/seahorse-daemon
/usr/bin/seahorse-preferences
/usr/bin/seahorse-tool
/usr/bin/skipstone-bin
/usr/bin/xpcd
/usr/sbin/avahi-daemon
$ 

Then try to fix them by upgrading the affected programs:

$ sudo ldd -r {,/usr}/{s,}bin/* 2>&1 >/dev/null | fgrep -v SUNW | fgrep undef | sed -e 's|.*(\(.*\)).*|\1|' | sort -u | xargs sudo apt-get install
Reading Package Lists... Done
Building Dependency Tree... Done
Selecting abiword for '/usr/bin/abiword'
abiword is already the newest version.
Selecting gedit for '/usr/bin/gedit'
Selecting gimmage for '/usr/bin/gimmage'
Selecting mplayer-gui for '/usr/bin/gmplayer'
mplayer-gui is already the newest version.
Selecting gnome-system-monitor for '/usr/bin/gnome-system-monitor'
Selecting gedit for '/usr/bin/gnome-text-editor'
Selecting inkscape for '/usr/bin/inkscape'
Selecting inkscape-viewer for '/usr/bin/inkview'
Selecting lzop for '/usr/bin/lzop'
Selecting mencoder for '/usr/bin/mencoder'
Selecting mplayer for '/usr/bin/mplayer'
mplayer is already the newest version.
Selecting seahorse for '/usr/bin/seahorse'
Selecting seahorse-agent for '/usr/bin/seahorse-agent'
Selecting seahorse-agent for '/usr/bin/seahorse-daemon'
Selecting seahorse for '/usr/bin/seahorse-preferences'
Selecting seahorse for '/usr/bin/seahorse-tool'
Selecting skipstone for '/usr/bin/skipstone-bin'
skipstone is already the newest version.
Selecting xpcd for '/usr/bin/xpcd'
xpcd is already the newest version.
Selecting avahi-daemon for '/usr/sbin/avahi-daemon'
The following extra packages will be installed:
  avahi avahi-autoipd avahi-daemon avahi-dnsconfd avahi-tools gedit gedit-plugins-seahorse gimmage gnome-applets-seahorse gnome-system-monitor
  inkscape inkscape-viewer libavahi libavahi-devel libavahi-glib libavahi-glib-devel libavahi-qt3 libavahi-qt4 libavahi-ui libseahorse lzop mencoder
  seahorse seahorse-agent
The following packages will be upgraded
  avahi avahi-autoipd avahi-daemon avahi-dnsconfd avahi-tools gedit gedit-plugins-seahorse gimmage gnome-applets-seahorse gnome-system-monitor
  inkscape inkscape-viewer libavahi libavahi-devel libavahi-glib libavahi-glib-devel libavahi-qt3 libavahi-qt4 libavahi-ui libseahorse lzop mencoder
  seahorse seahorse-agent
24 upgraded, 0 newly installed, 0 removed and 1487 not upgraded.
Need to get 15,1MB/39,6MB of archives.
After unpacking 10,8MB of additional disk space will be used.
Do you want to continue? [Y/n] Abort.
$ 

Check that there are no unsupported packages in the list (that they are present in Sisyphus). The non-upgradble ones have to be looked at:

$ apt-cache showpkg abiword mplayer-gui mplayer skipstone xpcd | fgrep -4 Package:
Package: abiword
Versions: 
2.6.3-alt1(/var/lib/apt/lists/ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_i586_base_pkglist.classic)(/var/lib/apt/lists/ftp.linux.kiev.ua_pub_Linux_ALT_Sisyphus_i586_base_pkglist.classic)(/var/lib/rpm/Packages)

Reverse Depends: 
--
Provides: 
2.6.3-alt1 - abiword 
Reverse Provides: 
abiword 2.6.3-alt1
Package: mplayer-gui
Versions: 
1.0-alt35.26470.1(/var/lib/apt/lists/ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_i586_base_pkglist.classic)(/var/lib/apt/lists/ftp.linux.kiev.ua_pub_Linux_ALT_Sisyphus_i586_base_pkglist.classic)(/var/lib/rpm/Packages)

Reverse Depends: 
--
Provides: 
1.0-alt35.26470.1 - mplayer-gui MPlayer-gui gmplayer 
Reverse Provides: 
mplayer-gui 1.0-alt35.26470.1
Package: mplayer
Versions: 
1.0-alt35.26470.1(/var/lib/apt/lists/ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_i586_base_pkglist.classic)(/var/lib/apt/lists/ftp.linux.kiev.ua_pub_Linux_ALT_Sisyphus_i586_base_pkglist.classic)(/var/lib/rpm/Packages)

Reverse Depends: 
--
Provides: 
1.0-alt35.26470.1 - /usr/bin/mplayer mplayer MPlayer 
Reverse Provides: 
mplayer 1.0-alt35.26470.1
Package: skipstone
Versions: 
1.0.0-alt2(/var/lib/apt/lists/ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_i586_base_pkglist.classic)(/var/lib/apt/lists/ftp.linux.kiev.ua_pub_Linux_ALT_Sisyphus_i586_base_pkglist.classic)(/var/lib/rpm/Packages)

Reverse Depends: 
--
Provides: 
1.0.0-alt2 - skipstone 
Reverse Provides: 
skipstone 1.0.0-alt2
Package: xpcd
Versions: 
2.08-ipl13mdk(/var/lib/rpm/Packages)

Reverse Depends: 
$ 

So, only xpcd is outdated:

$ sudo rpm -e xpcd
$ 

Now, I finally perform the upgrade:

$ sudo ldd -r {,/usr}/{s,}bin/* 2>&1 >/dev/null | fgrep -v SUNW | fgrep undef | sed -e 's|.*(\(.*\)).*|\1|' | sort -u | xargs sudo apt-get --yes install

<...>

Done.
$ 

Now, I check whether any packages with problems have remained:

$ sudo ldd -r {,/usr}/{s,}bin/* 2>&1 >/dev/null | fgrep -v SUNW | fgrep undef | sed -e 's|.*(\(.*\)).*|\1|' | sort -u | xargs rpm -qf | sort -u 
abiword-2.6.3-alt1
avahi-daemon-0.6.22-alt6
gedit-2.22.3-alt1
gimmage-0.2.3-alt3
gnome-system-monitor-2.22.2-alt1
inkscape-0.46-alt2
inkscape-viewer-0.46-alt2
mencoder-1.0-alt35.26470.1
mplayer-1.0-alt35.26470.1
mplayer-gui-1.0-alt35.26470.1
seahorse-2.22.2-alt1
seahorse-agent-2.22.2-alt1
skipstone-1.0.0-alt2
$ 

These packages have to fix their dependencies on libraries (make them more strict, requiring the new versions of libraries).
Comment 9 Ivan Zakharyaschev 2008-06-13 21:09:12 MSD
Here are the corresponding bugreports: 

(In reply to comment #8)

> $ sudo ldd -r {,/usr}/{s,}bin/* 2>&1 >/dev/null | fgrep -v SUNW | fgrep undef | sed -e 's|.*(\(.*\)).*|\1|' | sort -u | xargs rpm -qf |
> sort -u 
> abiword-2.6.3-alt1

https://bugzilla.altlinux.org/show_bug.cgi?id=15944

> avahi-daemon-0.6.22-alt6

https://bugzilla.altlinux.org/show_bug.cgi?id=16004

> gedit-2.22.3-alt1

https://bugzilla.altlinux.org/show_bug.cgi?id=15573

> gimmage-0.2.3-alt3

https://bugzilla.altlinux.org/show_bug.cgi?id=16005

> gnome-system-monitor-2.22.2-alt1

https://bugzilla.altlinux.org/show_bug.cgi?id=15520

> inkscape-0.46-alt2
> inkscape-viewer-0.46-alt2

https://bugzilla.altlinux.org/show_bug.cgi?id=16006

> mencoder-1.0-alt35.26470.1

https://bugzilla.altlinux.org/show_bug.cgi?id=16007

> mplayer-1.0-alt35.26470.1
> mplayer-gui-1.0-alt35.26470.1

https://bugzilla.altlinux.org/show_bug.cgi?id=16008

> seahorse-2.22.2-alt1
> seahorse-agent-2.22.2-alt1

https://bugzilla.altlinux.org/show_bug.cgi?id=15720

> skipstone-1.0.0-alt2

Not a bug. Simply /usr/bin/skipstone-bin shouldn't be in the PATH -- https://bugzilla.altlinux.org/show_bug.cgi?id=16009 .

> $ 
> 
> These packages have to fix their dependencies on libraries (make them more strict, requiring the new versions of libraries).
> 
Comment 10 Michael Shigorin 2011-01-22 17:44:10 MSK
at@ с тех пор были продуманы и реализованы set versions и соответствующие provides/requires; см. тж. http://ftp.linux.kiev.ua/pub/conference/peers/protva/2010/trubezh2010.pdf (с. 63)
Comment 11 Ivan Zakharyaschev 2011-06-24 23:17:21 MSK
Большое спасибо всем решавшим проблему с зависимостями на символы в Сизифе! и за сообщения об этом здесь в комментариях спасибо!

Пока что, бывает, случаются такие проблемы в ветках репозитория более старых; например, при попытке делать обновления в p5 -- https://bugzilla.altlinux.org/show_bug.cgi?id=25814 . Не знаю, достойны ли такие неприятности внимания и особого решения там...