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.
У меня была такая идея -- отслеживать, начиная с какой версии появился опредленный символ. Но полный дамп символов сизиф занимает... $ du sym def 574M sym 359M def $ Этот дамп можно сделать с помощью /usr/bin/rpmelfsym на предмет посмотреть что уже есть на эту тему. Ну и тут ещё проблема в том что генерация репозитария становится инкрементальной -- то есть нельзя это перегенерить с нуля. А также символы могут не только добавляться, но и удаляться.
(In reply to comment #1) > Ну и тут ещё проблема в том что генерация репозитария становится инкрементальной > -- то есть нельзя это перегенерить с нуля. Ну если на это посмотреть не как на автообнаружение зависимостей, а как на автоматическое тестирование (частичной обновляемости) Сизифа со старого состояния -- то это не такая проблема. Оно может автоматически слать багрепорты и предлагать добавить зависимость (или самостоятельно добавлять). Тогда в формулировке есть зависимость от старого состояния Сизифа, поэтому обвинить в невоспроизводимости с нуля нельзя. А польза была бы.
(In reply to comment #1) > А также символы могут не только > добавляться, но и удаляться. Да, представил себе сценарий: собрали новую библиотеку, в ней пропал символ, используемый программами, кто-то поставил себе эту новую библиотеку, старые программы перестали работать. Это, получается, конфликт новой библиотеки с некоторыми старыми программами, от неё зависящими. Такое даже не очень понятно, куда писать -- не в библиотеку же. Но зато это не такая тяжёлая ситуация для пользователя: если программа перестала работать, её (можно сообразить, что) надо попытаться обновить. Искать библиотеку, которую надо обновить при новой программе, (как в поводе для этого обсуждения) гораздо неприятнее. В принципе, в этой ситуации с пропавшими из библиотеки символами помочь пользователю старых программ никак нельзя, он сам должен думать, когда обновляет библиотеку. А в ситуации с появившимися символами можно: он ставит программу, и у него должно автоматически поставиться всё, что ей нужно.
(In reply to comment #3) > В принципе, в этой ситуации с пропавшими из библиотеки символами помочь > пользователю старых программ никак нельзя, он сам должен думать, когда обновляет > библиотеку. А Сизифу поможет пересборка в таком случае.
Ещё случаи в копилку примеров: https://bugzilla.altlinux.org/show_bug.cgi?id=15515 , https://bugzilla.altlinux.org/show_bug.cgi?id=15520 .
(here, "bug blocks ..." == "this feature would have solved those problems")
Вариант реализации: при попадании в Сизиф новой версии библиотеки сравнивать её ABI со старым ABI и требовать, чтобы различия были "версионированы" (иначе не пропускать). Так прежде чем пакету попасть в Сизиф, версии должны будут быть добавлены в него, а после попадания -- проблемы с воспроизводимостью сборки не будет (всё уже в нём указано). (Это, правда, уже не совсем дело rpm-build.)
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).
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). >
at@ с тех пор были продуманы и реализованы set versions и соответствующие provides/requires; см. тж. http://ftp.linux.kiev.ua/pub/conference/peers/protva/2010/trubezh2010.pdf (с. 63)
Большое спасибо всем решавшим проблему с зависимостями на символы в Сизифе! и за сообщения об этом здесь в комментариях спасибо! Пока что, бывает, случаются такие проблемы в ветках репозитория более старых; например, при попытке делать обновления в p5 -- https://bugzilla.altlinux.org/show_bug.cgi?id=25814 . Не знаю, достойны ли такие неприятности внимания и особого решения там...