Bug 36421
| Summary: | apt-get install --reinstall не может переустановить установленный пакет при совпадении provides и conflicts или obsoletes и имени пакета | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | Aleksei Nikiforov <darktemplaralt> |
| Component: | apt | Assignee: | Ivan Zakharyaschev <imz> |
| Status: | NEW --- | QA Contact: | qa-sisyphus |
| Severity: | normal | ||
| Priority: | P3 | CC: | aen, boyarsh, glebfm, imz, lav, ldv, placeholder, rider, sotor |
| Version: | unstable | ||
| Hardware: | all | ||
| OS: | Linux | ||
У меня есть ощущение, что раньше такой проблемы не было. По крайней мере я иногда пользовался reinstall и не сталкивался с таким поведением. Поправить cups-filters не сложно, но всё-таки для начала хотелось бы понять корректность поведения apt'а. Изменений нет.
# apt-get install --reinstall cups-filters
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
0 будет обновлено, 0 новых установлено, 1 пакетов будет переустановлено, 0 пакетов будет удалено и 0 не будет обновлено.
Необходимо получить 0B/724kB архивов.
После распаковки потребуется дополнительно 0B дискового пространства.
Продолжить? [Y/n]
ghostscript-cups конфликтует с cups-filters-1.22.5-alt1.x86_64
foomatic-filters конфликтует с cups-filters-1.22.5-alt1.x86_64
ghostscript-cups конфликтует с (установлен) cups-filters-1.22.5-alt1.x86_64
foomatic-filters конфликтует с (установлен) cups-filters-1.22.5-alt1.x86_64
E: Проверка группы транзакций не удалась
Актуализация: баг воспроизводится по-прежнему, на apt-0.5.15lorg2-alt103 (Sisyphus, октябрь 2026). Проверено на минимальном синтетическом пакете:
Name: demo2
Version: 1.0
Release: alt1
BuildArch: noarch
Provides: virtual-demo = %EVR
Conflicts: virtual-demo
# apt-get install --reinstall demo2
virtual-demo конфликтует с demo2-1.0-alt1.noarch
virtual-demo конфликтует с (установлен) demo2-1.0-alt1.noarch
E: Проверка группы транзакций не удалась
(rc=100)
Дополнительные факты, которые проясняют природу проблемы:
1. Это не специфика apt: чистый rpm ведёт себя так же.
# rpm -Uvh demo2-1.0-alt1.noarch.rpm # тот же NEVR, уже установлен
ошибка: Неудовлетворенные зависимости:
virtual-demo конфликтует с demo2-1.0-alt1.noarch
virtual-demo конфликтует с (установлен) demo2-1.0-alt1.noarch
То есть librpm при обновлении транзакцией того же NEVR проверяет
Conflicts пакета против его же собственной установленной копии
(которая одновременно поставляет virtual-demo).
2. Обновление на НОВУЮ версию того же пакета (1.0 -> 1.1 с той же парой
Provides/Conflicts) проходит штатно и в apt, и в rpm. Проблема
затрагивает только переустановку / обновление на тот же NEVR.
3. Симуляция apt при этом проходит чисто:
# apt-get install --reinstall -s demo2
Inst demo2 [1.0-alt1] (1.0-alt1)
Conf demo2 (1.0-alt1)
(rc=0)
т.е. pkgSimulate этот конфликт не моделирует — реальный прогон
расходится с симуляцией (в том числе поэтому ошибка всплывает только
на этапе выполнения транзакции).
4. В исходниках apt ошибка поднимается из librpm: apt-pkg/rpm/rpmpm.cc,
функция pkgRPMLibPM::Run() — после AddToTransaction() вызывается
rpmtsCheck(), сообщения «конфликтует с» печатает rpmpsPrint() librpm,
затем apt отдаёт "E: Проверка группы транзакций не удалась"
(_("Transaction set check failed")). apt при ReInstall выставляет
probFilter RPMPROB_FILTER_REPLACEPKG / REPLACEOLDFILES / REPLACENEWFILES
для rpmtsRun(), но rpmtsCheck() фильтры проблем не принимает — поэтому
обойти проверку со стороны apt текущим механизмом нельзя.
Вывод: либо это особенность/баг librpm (конфликт пакета с самим собой при
переустановке того же NEVR), либо apt должен обрабатывать reinstall таких
пакетов иначе (например, удаление + установка вместо обновления
транзакцией). Обход для пользователей: apt-get remove <pkg> && apt-get
install <pkg>.
|

Description
Aleksei Nikiforov 2019-03-26 10:59:31 MSKВоспроизведение: # apt-get install cups-filters # apt-get install cups-filters --reinstall На вопрос ответить "y". Результат: # apt-get install cups-filters --reinstall Чтение списков пакетов... Завершено Построение дерева зависимостей... Завершено 0 будет обновлено, 0 новых установлено, 1 пакетов будет переустановлено, 0 пакетов будет удалено и 0 не будет обновлено. Необходимо получить 0B/724kB архивов. После распаковки потребуется дополнительно 0B дискового пространства. Продолжить? [Y/n] y ghostscript-cups конфликтует с cups-filters-1.22.2-alt1.x86_64 foomatic-filters конфликтует с cups-filters-1.22.2-alt1.x86_64 ghostscript-cups конфликтует с (установлен) cups-filters-1.22.2-alt1.x86_64 foomatic-filters конфликтует с (установлен) cups-filters-1.22.2-alt1.x86_64 E: Проверка группы транзакций не удалась Ожидаемый результат: Успешная переустановка пакета. Поведение не консистентно. С одной стороны, такой пакет apt-get позволяет установить, с другой стороны, переустановка не возможна. С обновлением пакета проблем пока не замечал. $ rpm -q --provides cups-filters ghostscript-cups foomatic-filters cups-filters = 1.22.2-alt1:sisyphus+225163.100.1.1 $ rpm -q --conflicts cups-filters cups < 1.6.1-alt1 ghostscript-cups foomatic-filters Происходит это, похоже, из-за совпадения записей provides и conflicts. Аналогичные проблемы возникают при попытке переустановить следующие пакеты: javapackages-tools libzvbi python-module-mysqlclient qmmp1 systemd-sysvinit firefox-esr selinux-policy-alt Вот более полный список их ошибок: ghostscript-cups конфликтует с cups-filters-1.22.2-alt1.x86_64 foomatic-filters конфликтует с cups-filters-1.22.2-alt1.x86_64 ghostscript-cups конфликтует с (установлен) cups-filters-1.22.2-alt1.x86_64 foomatic-filters конфликтует с (установлен) cups-filters-1.22.2-alt1.x86_64 jpackage-utils < 0:5.0.1 конфликтует с javapackages-tools-1:5.0.0-alt1_12jpp8.noarch jpackage-utils < 0:5.0.1 конфликтует с (установлен) javapackages-tools-1:5.0.0-alt1_12jpp8.noarch libzvbi is obsoleted by libzvbi-0.2.35-alt1.x86_64 libzvbi is obsoleted by (установлен) libzvbi-0.2.35-alt1.x86_64 python-module-MySQLdb конфликтует с python-module-mysqlclient-1.4.2.post1-alt1.x86_64 python-module-MySQLdb конфликтует с (установлен) python-module-mysqlclient-1.4.2.post1-alt1.x86_64 qmmp < 1:0.12.0-alt0.M80P.svn8288.1 конфликтует с qmmp1-1.2.6-alt1.x86_64 qmmp < 1:0.12.0-alt0.M80P.svn8288.1 конфликтует с (установлен) qmmp1-1.2.6-alt1.x86_64 SysVinit конфликтует с systemd-sysvinit-1:241-alt3.noarch SysVinit конфликтует с (установлен) systemd-sysvinit-1:241-alt3.noarch firefox конфликтует с firefox-esr-60.6.1-alt1.x86_64 firefox конфликтует с (установлен) firefox-esr-60.6.1-alt1.x86_64 selinux-policy-altlinux конфликтует с selinux-policy-alt-0.0.43-alt1.noarch selinux-policy-altlinux конфликтует с (установлен) selinux-policy-alt-0.0.43-alt1.noarch