Summary: | старый rpm не может обновить пакеты с конфликтами на себя, собранные с новым rpm, при dist-upgrade | ||||||
---|---|---|---|---|---|---|---|
Product: | Sisyphus | Reporter: | Aleksei Nikiforov <darktemplaralt> | ||||
Component: | rpm | Assignee: | placeholder <placeholder> | ||||
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus | ||||
Severity: | normal | ||||||
Priority: | P3 | CC: | aen, at, glebfm, imz, ldv, placeholder, rider, vseleznv, vt | ||||
Version: | unstable | ||||||
Hardware: | all | ||||||
OS: | Linux | ||||||
Bug Depends on: | 36180 | ||||||
Bug Blocks: | |||||||
Attachments: |
|
Надо сперва обновить rpm, а потом уже всё остальное? (In reply to comment #1) > Надо сперва обновить rpm, а потом уже всё остальное? Или сперва dist-upgrade в текущем бранче, а потом уже в новом стабильном. (В ответ на комментарий №2) > (In reply to comment #1) > > Надо сперва обновить rpm, а потом уже всё остальное? > > Или сперва dist-upgrade в текущем бранче, а потом уже в новом стабильном. Но это Сизиф, который не обновлялся всего несколько дней. Теперь главное не повторить эту ошибку в p8. (In reply to comment #4) > Теперь главное не повторить эту ошибку в p8. Я не вижу других вариантов для p8. Чем раньше rpm в p8 научится обрабатывать EVRD, тем лучше для p8. Это особый случай, напоролись на конфликты. (Мы при обсуждении новой фичи это предвидели.) [root@prodesk0 ~]# rpm -q rpm rpm-4.13.0.1-alt1.x86_64 [root@prodesk0 ~]# apt-get install wireshark-qt5 Reading Package Lists... Done Building Dependency Tree... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. Since you only requested a single operation it is extremely likely that the package is simply not installable and a bug report against that package should be filed. The following information may help to resolve the situation: The following packages have unmet dependencies: wireshark-qt5: Depends: wireshark-base (= 2.6.6-alt1:sisyphus+219299.100.2.1) E: Broken packages [root@prodesk0 ~]# rpm -Uhv /ALT/Sisyphus/x86_64/RPMS.classic/wireshark-qt5-2.6.6-alt1.x86_64.rpm /ALT/Sisyphus/x86_64/RPMS.classic/wireshark-base-2.6.6-alt1.x86_64.rpm /ALT/Sisyphus/x86_64/RPMS.classic/libwiretap-2.6.6-alt1.x86_64.rpm error: Failed dependencies: libwiretap > 2.6.6-alt1 conflicts with wireshark-base-2.6.6-alt1.x86_64 [root@prodesk0 ~]# (In reply to comment #6) > [root@prodesk0 ~]# rpm -Uhv > /ALT/Sisyphus/x86_64/RPMS.classic/wireshark-qt5-2.6.6-alt1.x86_64.rpm > /ALT/Sisyphus/x86_64/RPMS.classic/wireshark-base-2.6.6-alt1.x86_64.rpm > /ALT/Sisyphus/x86_64/RPMS.classic/libwiretap-2.6.6-alt1.x86_64.rpm > error: Failed dependencies: > libwiretap > 2.6.6-alt1 conflicts with wireshark-base-2.6.6-alt1.x86_64 > [root@prodesk0 ~]# Давайте конфликты на подпакеты вида "> %EVR" переписывать в "> %EVR:D". Тогда будет лучше совместимо со старым rpm, который не знает про disttag. Про "< %EVR" надо подумать. (In reply to comment #7) > (In reply to comment #6) > > > [root@prodesk0 ~]# rpm -Uhv > > /ALT/Sisyphus/x86_64/RPMS.classic/wireshark-qt5-2.6.6-alt1.x86_64.rpm > > /ALT/Sisyphus/x86_64/RPMS.classic/wireshark-base-2.6.6-alt1.x86_64.rpm > > /ALT/Sisyphus/x86_64/RPMS.classic/libwiretap-2.6.6-alt1.x86_64.rpm > > error: Failed dependencies: > > libwiretap > 2.6.6-alt1 conflicts with wireshark-base-2.6.6-alt1.x86_64 > > [root@prodesk0 ~]# > > Давайте конфликты на подпакеты вида "> %EVR" переписывать в "> %EVR:D". > > Тогда будет лучше совместимо со старым rpm, который не знает про disttag. > > Про "< %EVR" надо подумать. Ещё можно подмать про "Requires: подпакет >= %EVR" -- но это неважно, потому что превратится в строгую зависимость. А строго "Requires: подпакет > %EVR" всё равно бессмысленно. То же касается "Requires: подпакет <= %EVR" и "Requires: подпакет < %EVR". Т.е. тут делать ничего не надо. Нестрогий "Conflicts: подпакет >= %EVR" или "Conflicts: подпакет <= %EVR" выглядит тоже бессмысленно. Obsoletes, кажется, должен требовать такого же подхода, как Conflicts. Остаётся не обдуманным "Conflicts: подпакет < %EVR" (В ответ на комментарий №7) > (In reply to comment #6) > > > [root@prodesk0 ~]# rpm -Uhv > > /ALT/Sisyphus/x86_64/RPMS.classic/wireshark-qt5-2.6.6-alt1.x86_64.rpm > > /ALT/Sisyphus/x86_64/RPMS.classic/wireshark-base-2.6.6-alt1.x86_64.rpm > > /ALT/Sisyphus/x86_64/RPMS.classic/libwiretap-2.6.6-alt1.x86_64.rpm > > error: Failed dependencies: > > libwiretap > 2.6.6-alt1 conflicts with wireshark-base-2.6.6-alt1.x86_64 > > [root@prodesk0 ~]# > > Давайте конфликты на подпакеты вида "> %EVR" переписывать в "> %EVR:D". > > Тогда будет лучше совместимо со старым rpm, который не знает про disttag. > > Про "< %EVR" надо подумать. Ваня, спасибо. Ты прав. Надо чуть чуть подправить и тогда будет хорошо. Сделайте, пожалуйста, для начала - в Sisyphus. wireshark я отправлю на rebuild (или сами отправляйте, релиз ему наверняка не надо увеличивать). Резюмирую: в Сизифе при переходе на disttags надо сперва обновить rpm, а потом уже делать apt-get dist-upgrade. Что именно делать в бранчах, решат мантейнеры бранчей, но принципиально другого подхода я не вижу. ментейнеры бранчей не решат, к сожалению. Им надо помочь. Чтобы облегчить ситуацию с обработкой Conflicts в новых пакетах (с disttag-ом в Provides) старым rpm (который не умеет сравнивать disttag-и), я предлагал начать с простой подмены значения макроса %EVR на E:V-R:D. (Причём он был заведён специально для указания межподпакетных завеисимостей, так что никакого обмана с точки зрения оговоренного смысла тут нет.) Это отразится на сборке новых пакетов. Если написано Conflicts: %name < %EVR и Conflicts: %name > %EVR, то подмена подействует. Если %EVR в Conflicts не написано, то, конечно, не подействует. Какие есть ещё варианты похожих записей? Если написано Conflicts: %name < %version и Conflicts: %name > %version, то всё и так будет работать, как раньше; помощи не требуется. (Просто менее жёсткие требования были записаны в пакет.) Если написано Conflicts: %name < %version-%release и Conflicts: %name > %version-%release, то, конечно, потребуется ручное вмешательство мейнтейнера. (Но хоть в другом случае с %EVR можно будет прожить без ручного вмешательства.) При этом надо иметь в виду, что, к сожалению, с ввведением disttag-ов, даже при обрботке новым rpm эти конфликты становятся менее строгими, чем, возможно, задумано, так как не гарантируют больше отсутствие %name из других сборок (но с тем же %release), потому что disttag-и не сравнимы (не имеют порядка). (Это имеет решение в виде заведения common-подпакета.) Посмотрим, как поведёт себя старый rpm с конфликтами, в которые вписали disttag. Например, у меня есть набор тестов (в первую очередь на пересечение разных требований с Provides), написанный исходя из ожидаемой логики удовлетворения требований по задуманному алгоритму сравнения. (Это пояснение я пишу к тому, что какой-то интересный случай с Conflicts там может не присутствовать, хотя все возможные комбинации с и без disttag-а при столкновении с тем же релизом там есть.) Например, старый rpm (из t7) без поддержки сравнения disttag-ов поведёт себя так http://git.altlinux.org/tasks/221387/build/300/x86_64/log -- перечисляю тесты failed и xfailed с точки зрения логики нового rpm (т.е. где отличие поведения по сравнению с новым rpm, который можно считать образцом): XFailed tests: noninstallable_virtDummyDisttag_with_reqGreaterEpoch (external dep & future pkg ) noninstallable_virtDummyDisttag_before_reqGreaterEpoch (external dep & future pkg) installable_virtDummyDisttag_with_conflGreaterEpoch (external dep & future pkg ) installable_virtDummyDisttag_before_conflGreaterEpoch (external dep & future pkg) installable_virtDummyDisttag_after_conflGreaterEpoch (external dep & future pkg) installable_virtDummyDisttag_with_reqEqualEpoch (external/strict-old-old dep & future pkg ) installable_virtDummyDisttag_before_reqEqualEpoch (external/strict-old-old dep & future pkg) noninstallable_virtDummyDisttag_with_conflEqualEpoch (external/strict-old-old dep & future pkg ) noninstallable_virtDummyDisttag_before_conflEqualEpoch (external/strict-old-old dep & future pkg) noninstallable_virtDummyDisttag_after_conflEqualEpoch (external/strict-old-old dep & future pkg) noninstallable_virtDummyDisttag_with_reqGreater (elusive external dep & future pkg ) noninstallable_virtDummyDisttag_before_reqGreater (elusive external dep & future pkg) installable_virtDummyDisttag_with_conflGreater (elusive external dep & future pkg ) installable_virtDummyDisttag_before_conflGreater (elusive external dep & future pkg) installable_virtDummyDisttag_after_conflGreater (elusive external dep & future pkg) installable_virtDummyDisttag_with_reqEqual (elusive external/strict-old-old dep & future pkg ) installable_virtDummyDisttag_before_reqEqual (elusive external/strict-old-old dep & future pkg) noninstallable_virtDummyDisttag_with_conflEqual (elusive external/strict-old-old dep & future pkg ) noninstallable_virtDummyDisttag_before_conflEqual (elusive external/strict-old-old dep & future pkg) noninstallable_virtDummyDisttag_after_conflEqual (elusive external/strict-old-old dep & future pkg) noninstallable_dummy_with_reqLessEpochDisttag (bogus future dep & old pkg ) noninstallable_dummy_before_reqLessEpochDisttag (bogus future dep & old pkg ) noninstallable_virtDummy_with_reqLessEpochDisttag (bogus future dep & old pkg ) noninstallable_virtDummy_before_reqLessEpochDisttag (bogus future dep & old pkg) installable_dummy_with_conflLessEpochDisttag (bogus future dep & old pkg ) installable_dummy_before_conflLessEpochDisttag (bogus future dep & old pkg) installable_dummy_after_conflLessEpochDisttag (bogus future dep & old pkg ) installable_virtDummy_with_conflLessEpochDisttag (bogus future dep & old pkg ) installable_virtDummy_before_conflLessEpochDisttag (bogus future dep & old pkg) installable_virtDummy_after_conflLessEpochDisttag (bogus future dep & old pkg) nonobsoleted_dummy_before_obsolLessEpochDisttag (bogus future dep & old pkg ) noninstallable_dummy_with_reqLessDisttag (elusive bogus future dep ) noninstallable_dummy_before_reqLessDisttag (elusive bogus future dep ) noninstallable_virtDummy_with_reqLessDisttag (elusive bogus future dep ) noninstallable_virtDummy_before_reqLessDisttag (elusive bogus future dep ) installable_dummy_with_conflLessDisttag (elusive bogus future dep ) installable_dummy_before_conflLessDisttag (elusive bogus future dep) installable_dummy_after_conflLessDisttag (elusive bogus future dep ) installable_virtDummy_with_conflLessDisttag (elusive bogus future dep ) installable_virtDummy_before_conflLessDisttag (elusive bogus future dep) installable_virtDummy_after_conflLessDisttag (elusive bogus future dep ) nonobsoleted_dummy_before_obsolLessDisttag (elusive bogus future dep ) installable_provVR3Disttag_with_reqEq_VR3 (elusive external/strict-old-old dep & future pkg ) installable_provVR3Disttag_before_reqEq_VR3 (elusive external/strict-old-old dep & future pkg) make: Leaving directory `/usr/src/RPM/BUILD/rpminstall-tests-1.0' + exit 0 Теперь прокомментирую случаи с кофликтами: XFailed tests: installable_virtDummyDisttag_with_conflGreaterEpoch (external dep & future pkg ) installable_virtDummyDisttag_before_conflGreaterEpoch (external dep & future pkg) installable_virtDummyDisttag_after_conflGreaterEpoch (external dep & future pkg) Новый пакет disttag-ом, а в конфликте второго пакета написано > E:V-R. (Релиз тот же самый). Ожидалось, что он поставится, но со старым rpm не так. Такой случай и стал поводом к написанию этого bug report-а. noninstallable_virtDummyDisttag_with_conflEqualEpoch (external/strict-old-old dep & future pkg ) noninstallable_virtDummyDisttag_before_conflEqualEpoch (external/strict-old-old dep & future pkg) noninstallable_virtDummyDisttag_after_conflEqualEpoch (external/strict-old-old dep & future pkg) Конфлкт с равенством E:V-R -- не интересный на практике случай. installable_virtDummyDisttag_with_conflGreater (elusive external dep & future pkg ) installable_virtDummyDisttag_before_conflGreater (elusive external dep & future pkg) installable_virtDummyDisttag_after_conflGreater (elusive external dep & future pkg) Аналогично первому случаю (как в этом bug report-е). (Просто конфликт без эпохи. Эпоха пустая.) noninstallable_virtDummyDisttag_with_conflEqual (elusive external/strict-old-old dep & future pkg ) noninstallable_virtDummyDisttag_before_conflEqual (elusive external/strict-old-old dep & future pkg) noninstallable_virtDummyDisttag_after_conflEqual (elusive external/strict-old-old dep & future pkg) Кофликт с равенством -- неинтересно. installable_dummy_with_conflLessEpochDisttag (bogus future dep & old pkg ) installable_dummy_before_conflLessEpochDisttag (bogus future dep & old pkg) installable_dummy_after_conflLessEpochDisttag (bogus future dep & old pkg ) installable_virtDummy_with_conflLessEpochDisttag (bogus future dep & old pkg ) installable_virtDummy_before_conflLessEpochDisttag (bogus future dep & old pkg) installable_virtDummy_after_conflLessEpochDisttag (bogus future dep & old pkg) nonobsoleted_dummy_before_obsolLessEpochDisttag (bogus future dep & old pkg ) Конфликт "меньше" с disttag-ом (то, что я предлагаю), а пакет без disttag-а в Provides. По логике сравнения они не должны были бы конфликтовать (т.е. установились бы вместе). Такая логика для нас, конечно, неидеальна, потому что здесь пакет из старой сборки. Но старый rpm даже в этом случае считает их конфликтующими и не устанавливает вместе. Что на может только порадовать. И ещё он вытеснил старый пакет по такому Obsoletes (последний тест). installable_dummy_with_conflLessDisttag (elusive bogus future dep ) installable_dummy_before_conflLessDisttag (elusive bogus future dep) installable_dummy_after_conflLessDisttag (elusive bogus future dep ) installable_virtDummy_with_conflLessDisttag (elusive bogus future dep ) installable_virtDummy_before_conflLessDisttag (elusive bogus future dep) installable_virtDummy_after_conflLessDisttag (elusive bogus future dep ) nonobsoleted_dummy_before_obsolLessDisttag (elusive bogus future dep ) То же самое, просто эпоха пустая в конфликте написана. Вывод: либо поведение соответствует новой логике, либо поведение старого rpm при столкновении с новыми пакетами нам даже приятно (если там добавить disttag в %EVR). Собираюсь вскоре сделать сборку с изменённым значением %EVR для Sisyphus. Изучу ещё поведение "старого" rpm из архива Sisyphus таким же способом. По крайней мере это сейчас сделаю (In reply to comment #12) > Чтобы облегчить ситуацию с обработкой Conflicts в новых пакетах (с disttag-ом в > Provides) старым rpm (который не умеет сравнивать disttag-и), я предлагал > начать с простой подмены значения макроса %EVR на E:V-R:D. (Причём он был > заведён специально для указания межподпакетных завеисимостей, так что никакого > обмана с точки зрения оговоренного смысла тут нет.) > Собираюсь вскоре сделать сборку с изменённым значением %EVR для Sisyphus. > > Изучу ещё поведение "старого" rpm из архива Sisyphus таким же способом. (In reply to comment #12) > Например, старый rpm (из t7) без поддержки сравнения disttag-ов поведёт себя > так http://git.altlinux.org/tasks/221387/build/300/x86_64/log -- перечисляю > тесты failed и xfailed с точки зрения логики нового rpm (т.е. где отличие > поведения по сравнению с новым rpm, который можно считать образцом): Это был rpminstall-tests-1.0-alt2.M70P.1 . > Изучу ещё поведение "старого" rpm из архива Sisyphus таким же способом. Сделаем git checkout 1.0-alt2.M70P.1 и запустим в системе с rpm из архива и новым rpm-build (который умеет генерировать пакеты с disttag-ами -- поэтому тестов будет запущено побольше). ./makeme.sh ... XFailed tests: noninstallable_dummyDisttag_with_reqGreaterEpoch (external dep & future pkg ) noninstallable_dummyDisttag_before_reqGreaterEpoch (external dep & future pkg ) noninstallable_virtDummyDisttag_with_reqGreaterEpoch (external dep & future pkg ) noninstallable_virtDummyDisttag_before_reqGreaterEpoch (external dep & future pkg) installable_dummyDisttag_with_conflGreaterEpoch (external dep & future pkg ) installable_dummyDisttag_before_conflGreaterEpoch (external dep & future pkg) installable_dummyDisttag_after_conflGreaterEpoch (external dep & future pkg ) installable_virtDummyDisttag_with_conflGreaterEpoch (external dep & future pkg ) installable_virtDummyDisttag_before_conflGreaterEpoch (external dep & future pkg) installable_virtDummyDisttag_after_conflGreaterEpoch (external dep & future pkg) installable_dummyDisttag_with_reqEqualEpoch (external/strict-old-old dep & future pkg ) installable_dummyDisttag_before_reqEqualEpoch (external/strict-old-old dep & future pkg) noninstallable_dummyDisttag_with_conflEqualEpoch (external/strict-old-old dep & future pkg ) noninstallable_dummyDisttag_before_conflEqualEpoch (external/strict-old-old dep & future pkg) noninstallable_dummyDisttag_after_conflEqualEpoch (external/strict-old-old dep & future pkg) installable_virtDummyDisttag_with_reqEqualEpoch (external/strict-old-old dep & future pkg ) installable_virtDummyDisttag_before_reqEqualEpoch (external/strict-old-old dep & future pkg) noninstallable_virtDummyDisttag_with_conflEqualEpoch (external/strict-old-old dep & future pkg ) noninstallable_virtDummyDisttag_before_conflEqualEpoch (external/strict-old-old dep & future pkg) noninstallable_virtDummyDisttag_after_conflEqualEpoch (external/strict-old-old dep & future pkg) noninstallable_dummyDisttag_with_reqGreater (elusive external dep & future pkg ) noninstallable_dummyDisttag_before_reqGreater (elusive external dep & future pkg ) noninstallable_virtDummyDisttag_with_reqGreater (elusive external dep & future pkg ) noninstallable_virtDummyDisttag_before_reqGreater (elusive external dep & future pkg) installable_dummyDisttag_with_conflGreater (elusive external dep & future pkg ) installable_dummyDisttag_before_conflGreater (elusive external dep & future pkg) installable_dummyDisttag_after_conflGreater (elusive external dep & future pkg ) installable_virtDummyDisttag_with_conflGreater (elusive external dep & future pkg ) installable_virtDummyDisttag_before_conflGreater (elusive external dep & future pkg) installable_virtDummyDisttag_after_conflGreater (elusive external dep & future pkg) installable_dummyDisttag_with_reqEqual (elusive external/strict-old-old dep & future pkg ) installable_dummyDisttag_before_reqEqual (elusive external/strict-old-old dep & future pkg) noninstallable_dummyDisttag_with_conflEqual (elusive external/strict-old-old dep & future pkg ) noninstallable_dummyDisttag_before_conflEqual (elusive external/strict-old-old dep & future pkg) noninstallable_dummyDisttag_after_conflEqual (elusive external/strict-old-old dep & future pkg) installable_virtDummyDisttag_with_reqEqual (elusive external/strict-old-old dep & future pkg ) installable_virtDummyDisttag_before_reqEqual (elusive external/strict-old-old dep & future pkg) noninstallable_virtDummyDisttag_with_conflEqual (elusive external/strict-old-old dep & future pkg ) noninstallable_virtDummyDisttag_before_conflEqual (elusive external/strict-old-old dep & future pkg) noninstallable_virtDummyDisttag_after_conflEqual (elusive external/strict-old-old dep & future pkg) noninstallable_dummy_with_reqLessEpochDisttag (bogus future dep & old pkg ) noninstallable_dummy_before_reqLessEpochDisttag (bogus future dep & old pkg ) noninstallable_virtDummy_with_reqLessEpochDisttag (bogus future dep & old pkg ) noninstallable_virtDummy_before_reqLessEpochDisttag (bogus future dep & old pkg) installable_dummy_with_conflLessEpochDisttag (bogus future dep & old pkg ) installable_dummy_before_conflLessEpochDisttag (bogus future dep & old pkg) installable_dummy_after_conflLessEpochDisttag (bogus future dep & old pkg ) installable_virtDummy_with_conflLessEpochDisttag (bogus future dep & old pkg ) installable_virtDummy_before_conflLessEpochDisttag (bogus future dep & old pkg) installable_virtDummy_after_conflLessEpochDisttag (bogus future dep & old pkg) nonobsoleted_dummy_with_obsolLessEpochDisttag (bogus future dep & old pkg ) nonobsoleted_dummy_updated_with_obsolLessEpochDisttag (bogus future dep & old pkg ) nonobsoleted_dummy_before_obsolLessEpochDisttag (bogus future dep & old pkg ) nonobsoleted_dummy_after_obsolLessEpochDisttag (bogus future dep & old pkg ) nonobsoleted_dummyDisttag_with_obsolLessEpochDisttag (bogus future dep & future pkg ) nonobsoleted_dummyDisttag_updated_with_obsolLessEpochDisttag (bogus future dep & future pkg ) nonobsoleted_dummyDisttag_before_obsolLessEpochDisttag (bogus future dep & future pkg ) nonobsoleted_dummyDisttag_after_obsolLessEpochDisttag (bogus future dep & future pkg ) obsoleted_dummyDisttag_before_obsolEqualEpochDisttag (unrealistic obsoleting disttag ) noninstallable_dummy_with_reqLessDisttag (elusive bogus future dep ) noninstallable_dummy_before_reqLessDisttag (elusive bogus future dep ) noninstallable_virtDummy_with_reqLessDisttag (elusive bogus future dep ) noninstallable_virtDummy_before_reqLessDisttag (elusive bogus future dep ) installable_dummy_with_conflLessDisttag (elusive bogus future dep ) installable_dummy_before_conflLessDisttag (elusive bogus future dep) installable_dummy_after_conflLessDisttag (elusive bogus future dep ) installable_virtDummy_with_conflLessDisttag (elusive bogus future dep ) installable_virtDummy_before_conflLessDisttag (elusive bogus future dep) installable_virtDummy_after_conflLessDisttag (elusive bogus future dep ) nonobsoleted_dummy_with_obsolLessDisttag (elusive bogus future dep ) nonobsoleted_dummy_updated_with_obsolLessDisttag (elusive bogus future dep ) nonobsoleted_dummy_before_obsolLessDisttag (elusive bogus future dep ) nonobsoleted_dummy_after_obsolLessDisttag (elusive bogus future dep ) nonobsoleted_dummyDisttag_with_obsolLessDisttag (elusive bogus future dep ) nonobsoleted_dummyDisttag_updated_with_obsolLessDisttag (elusive bogus future dep ) nonobsoleted_dummyDisttag_before_obsolLessDisttag (elusive bogus future dep ) nonobsoleted_dummyDisttag_after_obsolLessDisttag (elusive bogus future dep ) obsoleted_dummyDisttag_before_obsolEqualDisttag (unrealistic obsoleting disttag ) installable_provVR3Disttag_with_reqEq_VR3 (elusive external/strict-old-old dep & future pkg ) installable_provVR3Disttag_before_reqEq_VR3 (elusive external/strict-old-old dep & future pkg) Failed tests: noninstallable_provOnlyV_with_reqVR noninstallable_provOnlyV_before_reqVR installable_provOnlyV_with_conflVR installable_provOnlyV_before_conflVR make: *** [/home/user/wip/2019-01-rpm-disttag/rpminstall-tests/Makefile:29: all_tests] Error 1 Прокомментирую непрошедшие (с т.зр. логики нового rpm) тесты с конфликтами: installable_dummyDisttag_with_conflGreaterEpoch (external dep & future pkg ) installable_dummyDisttag_before_conflGreaterEpoch (external dep & future pkg) installable_dummyDisttag_after_conflGreaterEpoch (external dep & future pkg ) installable_virtDummyDisttag_with_conflGreaterEpoch (external dep & future pkg ) installable_virtDummyDisttag_before_conflGreaterEpoch (external dep & future pkg) installable_virtDummyDisttag_after_conflGreaterEpoch (external dep & future pkg) Новый пакет с disttag-ом, а в конфликте второго пакета написано > E:V-R. (Релиз тот же самый). Ожидалось, что он поставится, но со старым rpm не так. Такой случай и стал поводом к написанию этого bug report-а. noninstallable_dummyDisttag_with_conflEqualEpoch (external/strict-old-old dep & future pkg ) noninstallable_dummyDisttag_before_conflEqualEpoch (external/strict-old-old dep & future pkg) noninstallable_dummyDisttag_after_conflEqualEpoch (external/strict-old-old dep & future pkg) Конфлкт с равенством E:V-R -- не интересный на практике случай. noninstallable_virtDummyDisttag_with_conflEqualEpoch (external/strict-old-old dep & future pkg ) noninstallable_virtDummyDisttag_before_conflEqualEpoch (external/strict-old-old dep & future pkg) noninstallable_virtDummyDisttag_after_conflEqualEpoch (external/strict-old-old dep & future pkg) Конфлкт с равенством E:V-R -- не интересный на практике случай. installable_dummyDisttag_with_conflGreater (elusive external dep & future pkg ) installable_dummyDisttag_before_conflGreater (elusive external dep & future pkg) installable_dummyDisttag_after_conflGreater (elusive external dep & future pkg ) installable_virtDummyDisttag_with_conflGreater (elusive external dep & future pkg ) installable_virtDummyDisttag_before_conflGreater (elusive external dep & future pkg) installable_virtDummyDisttag_after_conflGreater (elusive external dep & future pkg) Аналогично первому случаю (как в этом bug report-е). (Просто конфликт без эпохи. Эпоха пустая.) noninstallable_dummyDisttag_with_conflEqual (elusive external/strict-old-old dep & future pkg ) noninstallable_dummyDisttag_before_conflEqual (elusive external/strict-old-old dep & future pkg) noninstallable_dummyDisttag_after_conflEqual (elusive external/strict-old-old dep & future pkg) Конфлкт с равенством V-R -- не интересный на практике случай. noninstallable_virtDummyDisttag_with_conflEqual (elusive external/strict-old-old dep & future pkg ) noninstallable_virtDummyDisttag_before_conflEqual (elusive external/strict-old-old dep & future pkg) noninstallable_virtDummyDisttag_after_conflEqual (elusive external/strict-old-old dep & future pkg) Конфлкт с равенством V-R -- не интересный на практике случай. installable_dummy_with_conflLessEpochDisttag (bogus future dep & old pkg ) installable_dummy_before_conflLessEpochDisttag (bogus future dep & old pkg) installable_dummy_after_conflLessEpochDisttag (bogus future dep & old pkg ) installable_virtDummy_with_conflLessEpochDisttag (bogus future dep & old pkg ) installable_virtDummy_before_conflLessEpochDisttag (bogus future dep & old pkg) installable_virtDummy_after_conflLessEpochDisttag (bogus future dep & old pkg) nonobsoleted_dummy_with_obsolLessEpochDisttag (bogus future dep & old pkg ) nonobsoleted_dummy_updated_with_obsolLessEpochDisttag (bogus future dep & old pkg ) nonobsoleted_dummy_before_obsolLessEpochDisttag (bogus future dep & old pkg ) nonobsoleted_dummy_after_obsolLessEpochDisttag (bogus future dep & old pkg ) nonobsoleted_dummyDisttag_with_obsolLessEpochDisttag (bogus future dep & future pkg ) nonobsoleted_dummyDisttag_updated_with_obsolLessEpochDisttag (bogus future dep & future pkg ) nonobsoleted_dummyDisttag_before_obsolLessEpochDisttag (bogus future dep & future pkg ) nonobsoleted_dummyDisttag_after_obsolLessEpochDisttag (bogus future dep & future pkg ) Конфликт "меньше" с disttag-ом (то, что я предлагаю), а пакет без disttag-а в Provides, т.е. из старой сборки, а не из этой. По логике сравнения они не должны были бы конфликтовать (т.е. установились бы вместе). Такая логика для нас, конечно, неидеальна, потому что здесь пакет из старой сборки. Но старый rpm даже в этом случае считает их конфликтующими и не устанавливает вместе. Что нас может только порадовать. И ещё он вытеснил старый пакет по такому Obsoletes (последние тесты). installable_dummy_with_conflLessDisttag (elusive bogus future dep ) installable_dummy_before_conflLessDisttag (elusive bogus future dep) installable_dummy_after_conflLessDisttag (elusive bogus future dep ) installable_virtDummy_with_conflLessDisttag (elusive bogus future dep ) installable_virtDummy_before_conflLessDisttag (elusive bogus future dep) installable_virtDummy_after_conflLessDisttag (elusive bogus future dep ) nonobsoleted_dummy_with_obsolLessDisttag (elusive bogus future dep ) nonobsoleted_dummy_updated_with_obsolLessDisttag (elusive bogus future dep ) nonobsoleted_dummy_before_obsolLessDisttag (elusive bogus future dep ) nonobsoleted_dummy_after_obsolLessDisttag (elusive bogus future dep ) nonobsoleted_dummyDisttag_with_obsolLessDisttag (elusive bogus future dep ) nonobsoleted_dummyDisttag_updated_with_obsolLessDisttag (elusive bogus future dep ) nonobsoleted_dummyDisttag_before_obsolLessDisttag (elusive bogus future dep ) nonobsoleted_dummyDisttag_after_obsolLessDisttag (elusive bogus future dep ) То же самое, просто эпоха пустая в конфликте написана. Нас устраивает. Выводы те же самые, что в предыдущем комментарии. Переопределение %EVR нам подойдёт ради обработки старым rpm-ом конфликтов в новых пакетах. А новый rpm их тоже нормально обработает, потому что наличие disttag-а после знака "меньше" или "больше" никак не влияет на результат сравнения. (In reply to comment #14) > (In reply to comment #12) > > > Например, старый rpm (из t7) без поддержки сравнения disttag-ов поведёт себя > > так http://git.altlinux.org/tasks/221387/build/300/x86_64/log -- перечисляю > > тесты failed и xfailed с точки зрения логики нового rpm (т.е. где отличие > > поведения по сравнению с новым rpm, который можно считать образцом): > > Это был rpminstall-tests-1.0-alt2.M70P.1 . > > > Изучу ещё поведение "старого" rpm из архива Sisyphus таким же способом. > > Сделаем git checkout 1.0-alt2.M70P.1 и запустим в системе с rpm из архива и > новым rpm-build (который умеет генерировать пакеты с disttag-ами -- поэтому > тестов будет запущено побольше). Это были: $ rpm -q rpm rpm-build --lastchange * Пт окт 05 2018 Gleb F-Malinovskiy <glebfm@altlinux.org> 4.13.0.1-alt4 - Add _allow_deps_with_beginning_dot macro to allow dependencies beginning with a dot character in spec file (vseleznv@). * Чт янв 31 2019 Gleb F-Malinovskiy <glebfm@altlinux.org> 4.0.4-alt126 - imz@: + shell.req: correctly detect #!/bin/env bash (ALT#35376). + platform.in: completely expand %_libsuff (/usr/lib%nil was ugly). - Fixed getopt(3) use in parameterized macros parser. Такой формат (E:V-R:D) не помогает с проблемой со старым rpm без улучшения apt-а (ещё не готового). Вот проблема со старым форматом конфликтов: [root@prodesk0 ~]# apt-repo rpm [alt] file:/ALT Sisyphus/x86_64 classic rpm [alt] file:/ALT Sisyphus/noarch classic rpm [alt] file:/ALT Sisyphus/x86_64-i586 classic [root@prodesk0 ~]# apt-get update; apt-get install wireshark-{base,doc} Reading Package Lists... Done Building Dependency Tree... Done Reading Package Lists... Done Building Dependency Tree... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: wireshark-doc: Conflicts: wireshark-base (> 2.6.6-alt2) E: Broken packages [root@prodesk0 ~]# rpm -U /ALT/Sisyphus/noarch/RPMS.classic/wireshark-doc-2.6.6-alt2.noarch.rpm /ALT/Sisyphus/x86_64/RPMS.classic/wireshark-base-2.6.6-alt2.x86_64.rpm error: Failed dependencies: wireshark-base > 2.6.6-alt2 conflicts with wireshark-doc-2.6.6-alt2.noarch Вот проблема с новым форматом при обработке apt-ом (но не старым rpm-ом, конечно, потому что это мы уже всё тут описали): [root@prodesk0 ~]# apt-repo add 222028 [root@prodesk0 ~]# apt-get update; apt-get install wireshark-{base,doc} Get:1 http://git.altlinux.org repo/222028/x86_64 release [549B] Get:2 http://git.altlinux.org repo/222028/x86_64-i586 release [532B] Fetched 1081B in 0s (46,2kB/s) Get:1 http://git.altlinux.org repo/222028/x86_64/task pkglist [40,5kB] Get:2 http://git.altlinux.org repo/222028/x86_64/task release [138B] Get:3 http://git.altlinux.org repo/222028/x86_64-i586/task pkglist [8260B] Get:4 http://git.altlinux.org repo/222028/x86_64-i586/task release [143B] Fetched 49,0kB in 0s (633kB/s) Reading Package Lists... Done Building Dependency Tree... Done Reading Package Lists... Done Building Dependency Tree... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: wireshark-doc: Conflicts: wireshark-base (< 2.6.6-alt2:sisyphus+222028.200.2.1) E: Broken packages [root@prodesk0 ~]# rpm -U /home/user/MNT/team.alt/tasks/222028/build/200/x86_64/rpms/wireshark-doc-2.6.6-alt2.noarch.rpm /home/user/MNT/team.alt/tasks/222028/build/200/x86_64/rpms/wireshark-base-2.6.6-alt2.x86_64.rpm [root@prodesk0 ~]# echo $? 0 [root@prodesk0 ~]# Интересно, а новый формат Conflicts будет ли нормально обрабатываться apt-ом (всё ещё старым), если в эту систему поставить новый rpm?.. Сейчас проверю. То было с rpm-4.13.0.1-alt4. Теперь попробуем с новым rpm-4.13.0.1-alt6. Conflicts старого формата: [root@prodesk0 ~]# apt-repo rpm [alt] file:/ALT Sisyphus/x86_64 classic rpm [alt] file:/ALT Sisyphus/noarch classic rpm [alt] file:/ALT Sisyphus/x86_64-i586 classic [root@prodesk0 ~]# apt-get update; apt-get install wireshark-{base,doc} Reading Package Lists... Done Building Dependency Tree... Done Reading Package Lists... Done Building Dependency Tree... Done The following NEW packages will be installed: wireshark-base wireshark-doc 0 upgraded, 2 newly installed, 0 removed and 1543 not upgraded. Need to get 0B/15,6MB of archives. After unpacking 92,2MB of additional disk space will be used. === apt-printchanges === ==wireshark-doc wireshark-base== * Sat Jan 19 2019 Anton Farygin <rider@altlinux.ru> 2.6.6-alt2 - libwiretap included to wireshark-base package - libwiretap-devel included to wireshark-devel package Committing changes... Preparing... #################################################################################################### [100%] Updating / installing... 1: wireshark-base-2.6.6-alt2 #################################################################################################### [ 50%] 2: wireshark-doc-2.6.6-alt2 #################################################################################################### [100%] Done. [root@prodesk0 ~]# rpm -e wireshark-{base,doc} [root@prodesk0 ~]# Тестируем установку с Conflicts нового предлагаемого формата: [root@prodesk0 ~]# apt-repo add 222028 [root@prodesk0 ~]# apt-get update; apt-get install wireshark-{base,doc} Get:1 http://git.altlinux.org repo/222028/x86_64 release [549B] Get:2 http://git.altlinux.org repo/222028/x86_64-i586 release [532B] Fetched 1081B in 0s (26,8kB/s) Get:1 http://git.altlinux.org repo/222028/x86_64/task pkglist [40,5kB] Get:2 http://git.altlinux.org repo/222028/x86_64/task release [138B] Get:3 http://git.altlinux.org repo/222028/x86_64-i586/task pkglist [8260B] Get:4 http://git.altlinux.org repo/222028/x86_64-i586/task release [143B] Fetched 49,0kB in 0s (776kB/s) Reading Package Lists... Done Building Dependency Tree... Done Reading Package Lists... Done Building Dependency Tree... Done The following NEW packages will be installed: wireshark-base wireshark-doc 0 upgraded, 2 newly installed, 0 removed and 1546 not upgraded. Need to get 15,6MB of archives. After unpacking 92,2MB of additional disk space will be used. Get:1 http://git.altlinux.org repo/222028/x86_64/task wireshark-doc 2.6.6-alt2 [37,8kB] Get:2 http://git.altlinux.org repo/222028/x86_64/task wireshark-base 2.6.6-alt2 [15,6MB] Fetched 15,6MB in 1s (7890kB/s) === apt-printchanges === ==wireshark-doc wireshark-base== * Sat Jan 19 2019 Anton Farygin <rider@altlinux.ru> 2.6.6-alt2 - libwiretap included to wireshark-base package - libwiretap-devel included to wireshark-devel package Committing changes... Preparing... #################################################################################################### [100%] Updating / installing... 1: wireshark-base-2.6.6-alt2 #################################################################################################### [ 50%] 2: wireshark-doc-2.6.6-alt2 #################################################################################################### [100%] тоже работает. Интересно, почему со старым rpm через apt не работало. В общем-то, я смотрел код apt некоторое время назад и подозреваю, чем это вызвано. (Отклонение от поведения собственно rpm.) (In reply to comment #16) > Такой формат (E:V-R:D) не помогает с проблемой со старым rpm без улучшения > apt-а (ещё не готового). > > Вот проблема со старым форматом конфликтов: > The following packages have unmet dependencies: > wireshark-doc: Conflicts: wireshark-base (> 2.6.6-alt2) > E: Broken packages > [root@prodesk0 ~]# rpm -U > /ALT/Sisyphus/noarch/RPMS.classic/wireshark-doc-2.6.6-alt2.noarch.rpm > /ALT/Sisyphus/x86_64/RPMS.classic/wireshark-base-2.6.6-alt2.x86_64.rpm > error: Failed dependencies: > wireshark-base > 2.6.6-alt2 conflicts with wireshark-doc-2.6.6-alt2.noarch Здесь всё так же, как в rpm: есть Provides вида wireshark-base = 2.6.6-alt2:DISTTAG и он при сравнении старым rpm по релизу больше. > Вот проблема с новым форматом при обработке apt-ом (но не старым rpm-ом, > конечно, потому что это мы уже всё тут описали): > The following packages have unmet dependencies: > wireshark-doc: Conflicts: wireshark-base (< > 2.6.6-alt2:sisyphus+222028.200.2.1) > E: Broken packages Здесь поведение расходится со старым rpm. Подозревая, что он динамисеки конструирует соответствующие как-бы-Provides по N-E:V-R пакета и проверяет их. Т.к. про disttag старый apt не знает, он в эту строку ("VerStr") не добавляет disttag, и сравнивает её с требованием "< 2.6.6-alt2:sisyphus+222028.200.2.1". Старый rpm отвечает, что этот сконструированный VerStr действительно меньше, т.е. конфликтует. > [root@prodesk0 ~]# rpm -U > /home/user/MNT/team.alt/tasks/222028/build/200/x86_64/rpms/wireshark-doc-2.6.6-alt2.noarch.rpm > > /home/user/MNT/team.alt/tasks/222028/build/200/x86_64/rpms/wireshark-base-2.6.6-alt2.x86_64.rpm > [root@prodesk0 ~]# echo $? > 0 > [root@prodesk0 ~]# > > Интересно, а новый формат Conflicts будет ли нормально обрабатываться apt-ом > (всё ещё старым), если в эту систему поставить новый rpm?.. Сейчас проверю. С установкой нового rpm apt начинает прилично обрабатывать установку этого пакета, потому что строки, передаваемые для сравнения в rpm такие: одна не имеет disttag-а, а другая имеет. Но при сравнении "<" disttag для нового rpm, конечно, не имеет значения, поэтому это условие не выполнится. Получается, большого смысла менять значение %EVR сейчас нет. Это поможет обработке старым rpm, но не старым apt. Но apt задним числом мы не можем обучить disttag-ам. Можно посоветовать обновлять сначала apt и кзью Если хочется изготавливать пакеты, совместимые со старым rpm и apt, получается, единственный выход -- делать общий подпакет, от которого все подпакеты будут зависеть (потом эти зависимости могут спотимизироваться). rpm-build-4.0.4-alt127 -> sisyphus: Tue Feb 19 2019 Ivan Zakharyaschev <imz@altlinux> 4.0.4-alt127 - Make "new" packages (with disttags) be treated better by the "old" disttag-unaware rpm in some cases; primarily those with < and/or > Conflicts on another subpackage. This form of Conflicts is used to ensure that no subpackages from different releases/builds get installed together. (A better way to express this is to add a common subpackage that all other subpackages depend on.) This change doesn't affect the way the "new" rpm would treat packages with such deps (ALT#35930): + rewrite < and > dependencies so that they have almost the same meaning when treated by old disttag-unaware tools; + %EVR macro (for intersubpackage deps) upgraded to include %disttag (given the other change, this is only useful for making the rare Conflicts: subpkg = %EVR more compatible with disttag-unaware tools). - checkinstall subpackage added. |
Created attachment 7961 [details] pkgs.log При попытке сделать dist-upgrade, apt-get предложил удалить пакеты libwiretap, wireshark-base и wireshark-qt5 несмотря на отсутствие конфликтов с какими-либо пакетами. Также до применения dist-upgrade установить эти пакеты apt отказался. Логи прилагаются.