Bug 15079

Summary: detect when new packages require new versions of libraries
Product: Sisyphus Reporter: Ivan Zakharyaschev <imz>
Component: rpm-buildAssignee: placeholder <placeholder>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: enhancement    
Priority: P2 CC: arseny, glebfm, imz, ldv, mike, placeholder, vt
Version: unstable   
Hardware: all   
OS: Linux   
Bug Depends on: 22383    
Bug 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    

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 . Не знаю, достойны ли такие неприятности внимания и особого решения там...