Bug 36375

Summary: rpm: после прерывания обновления нельзя удалить дублированные пакеты с одинаковыми %EVR
Product: Sisyphus Reporter: Aleksei Nikiforov <darktemplaralt>
Component: rpmAssignee: Vladimir D. Seleznev <vseleznv>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: major    
Priority: P3 CC: aen, at, glebfm, imz, jenya, ldv, placeholder, rider, sbolshakov, vt
Version: unstable   
Hardware: all   
OS: Linux   
Bug Depends on:    
Bug Blocks: 34231    

Description Aleksei Nikiforov 2019-03-25 11:14:27 MSK
Система неожиданно зависла при обновлении по неопределённым причинам. В результате этого на системе оказалось много дублированных пакетов. Однако, дальнейшее обновление невозможно:

# apt-get dist-upgrade --fix-broken
... пропущено много строк ...

52 будет обновлено, 6 новых установлено, 589 пакетов будет удалено и 1 не будет обновлено.
Необходимо получить 0B/151MB архивов.
После распаковки будет освобождено 7215MB дискового пространства.
Продолжить? [Y/n] y
Совершаем изменения...  
Подготовка...                                                                                                                     #################################################################################################### [100%]
        пакет plasma5-kwin-common-5.12.8-alt1.noarch уже установлен
        файл /usr/share/kf5/doc/HTML/ca/kcontrol/kwindecoration/index.cache.bz2 из устанавливаемого пакета plasma5-kwin-common-5.12.8-alt1.noarch конфликтует с файлом из пакета plasma5-kwin-common-5.12.8-alt1.noarch
        файл /usr/share/kf5/doc/HTML/ca/kcontrol/windowbehaviour/index.cache.bz2 из устанавливаемого пакета plasma5-kwin-common-5.12.8-alt1.noarch конфликтует с файлом из пакета plasma5-kwin-common-5.12.8-alt1.noarch
        файл /usr/share/kf5/doc/HTML/de/kcontrol/kwindecoration/index.cache.bz2 из устанавливаемого пакета plasma5-kwin-common-5.12.8-alt1.noarch конфликтует с файлом из пакета plasma5-kwin-common-5.12.8-alt1.noarch
        файл /usr/share/kf5/doc/HTML/de/kcontrol/windowbehaviour/index.cache.bz2 из устанавливаемого пакета plasma5-kwin-common-5.12.8-alt1.noarch конфликтует с файлом из пакета plasma5-kwin-common-5.12.8-alt1.noarch
        файл /usr/share/kf5/doc/HTML/en/kcontrol/kwindecoration/index.cache.bz2 из устанавливаемого пакета plasma5-kwin-common-5.12.8-alt1.noarch конфликтует с файлом из пакета plasma5-kwin-common-5.12.8-alt1.noarch
        файл /usr/share/kf5/doc/HTML/en/kcontrol/windowbehaviour/index.cache.bz2 из устанавливаемого пакета plasma5-kwin-common-5.12.8-alt1.noarch конфликтует с файлом из пакета plasma5-kwin-common-5.12.8-alt1.noarch
        файл /usr/share/kf5/doc/HTML/it/kcontrol/kwindecoration/index.cache.bz2 из устанавливаемого пакета plasma5-kwin-common-5.12.8-alt1.noarch конфликтует с файлом из пакета plasma5-kwin-common-5.12.8-alt1.noarch
        файл /usr/share/kf5/doc/HTML/it/kcontrol/windowbehaviour/index.cache.bz2 из устанавливаемого пакета plasma5-kwin-common-5.12.8-alt1.noarch конфликтует с файлом из пакета plasma5-kwin-common-5.12.8-alt1.noarch
        файл /usr/share/kf5/doc/HTML/nl/kcontrol/kwindecoration/index.cache.bz2 из устанавливаемого пакета plasma5-kwin-common-5.12.8-alt1.noarch конфликтует с файлом из пакета plasma5-kwin-common-5.12.8-alt1.noarch
        файл /usr/share/kf5/doc/HTML/nl/kcontrol/windowbehaviour/index.cache.bz2 из устанавливаемого пакета plasma5-kwin-common-5.12.8-alt1.noarch конфликтует с файлом из пакета plasma5-kwin-common-5.12.8-alt1.noarch
        файл /usr/share/kf5/doc/HTML/pt/kcontrol/kwindecoration/index.cache.bz2 из устанавливаемого пакета plasma5-kwin-common-5.12.8-alt1.noarch конфликтует с файлом из пакета plasma5-kwin-common-5.12.8-alt1.noarch
        файл /usr/share/kf5/doc/HTML/pt/kcontrol/windowbehaviour/index.cache.bz2 из устанавливаемого пакета plasma5-kwin-common-5.12.8-alt1.noarch конфликтует с файлом из пакета plasma5-kwin-common-5.12.8-alt1.noarch
        файл /usr/share/kf5/doc/HTML/pt_BR/kcontrol/kwindecoration/index.cache.bz2 из устанавливаемого пакета plasma5-kwin-common-5.12.8-alt1.noarch конфликтует с файлом из пакета plasma5-kwin-common-5.12.8-alt1.noarch
        файл /usr/share/kf5/doc/HTML/pt_BR/kcontrol/windowbehaviour/index.cache.bz2 из устанавливаемого пакета plasma5-kwin-common-5.12.8-alt1.noarch конфликтует с файлом из пакета plasma5-kwin-common-5.12.8-alt1.noarch
        файл /usr/share/kf5/doc/HTML/ru/kcontrol/kwindecoration/index.cache.bz2 из устанавливаемого пакета plasma5-kwin-common-5.12.8-alt1.noarch конфликтует с файлом из пакета plasma5-kwin-common-5.12.8-alt1.noarch
        файл /usr/share/kf5/doc/HTML/ru/kcontrol/windowbehaviour/index.cache.bz2 из устанавливаемого пакета plasma5-kwin-common-5.12.8-alt1.noarch конфликтует с файлом из пакета plasma5-kwin-common-5.12.8-alt1.noarch
        файл /usr/share/kf5/doc/HTML/sv/kcontrol/kwindecoration/index.cache.bz2 из устанавливаемого пакета plasma5-kwin-common-5.12.8-alt1.noarch конфликтует с файлом из пакета plasma5-kwin-common-5.12.8-alt1.noarch
        файл /usr/share/kf5/doc/HTML/sv/kcontrol/windowbehaviour/index.cache.bz2 из устанавливаемого пакета plasma5-kwin-common-5.12.8-alt1.noarch конфликтует с файлом из пакета plasma5-kwin-common-5.12.8-alt1.noarch
        файл /usr/share/kf5/doc/HTML/uk/kcontrol/kwindecoration/index.cache.bz2 из устанавливаемого пакета plasma5-kwin-common-5.12.8-alt1.noarch конфликтует с файлом из пакета plasma5-kwin-common-5.12.8-alt1.noarch
        файл /usr/share/kf5/doc/HTML/uk/kcontrol/windowbehaviour/index.cache.bz2 из устанавливаемого пакета plasma5-kwin-common-5.12.8-alt1.noarch конфликтует с файлом из пакета plasma5-kwin-common-5.12.8-alt1.noarch
        пакет libkwinglutils11-5.12.8-alt1.x86_64 уже установлен
        файл /usr/lib64/libkwinglutils.so.5.12.8 из устанавливаемого пакета libkwinglutils11-5.12.8-alt1.x86_64 конфликтует с файлом из пакета libkwinglutils11-5.12.8-alt1.x86_64
        пакет libkwin5-5.12.8-alt1.x86_64 уже установлен
        файл /usr/lib64/libkwin.so.5.12.8 из устанавливаемого пакета libkwin5-5.12.8-alt1.x86_64 конфликтует с файлом из пакета libkwin5-5.12.8-alt1.x86_64
E: Ошибка во время исполнения транзакции


# rpm -e --nodeps plasma5-kwin-common-5.12.8-alt1
ошибка: "plasma5-kwin-common-5.12.8-alt1" specifies multiple packages:
  plasma5-kwin-common-5.12.8-alt1.noarch
  plasma5-kwin-common-5.12.8-alt1.noarch

# rpm -qa | grep plasma5-kwin-common-5.12.8-alt1
plasma5-kwin-common-5.12.8-alt1.noarch
plasma5-kwin-common-5.12.8-alt1.noarch

# rpm -q plasma5-kwin-common --qf '%{NAME} %{EVR} %{DISTTAG}\n'
plasma5-kwin-common 5.12.8-alt1 sisyphus+223879.1400.2.3
plasma5-kwin-common 5.12.8-alt1 sisyphus+225279.100.1.1


До введения DISTTAG в аналогичной ситуации вполне можно было исправить систему, удаляя дублированные пакеты на основе их версий, поскольку эпохи/версии/релизы у пакетов отличались, сейчас возможности удалить один из дублированных пакетов - нет.
Comment 1 Dmitry V. Levin 2019-03-25 11:21:02 MSK
Указать disttag при удалении нельзя?
Comment 2 Aleksei Nikiforov 2019-03-25 11:26:44 MSK
(В ответ на комментарий №1)
> Указать disttag при удалении нельзя?

Я пока такой возможности не видел. Неплохо бы к возможности указывать disttag при удалении также добавить вывод %DISTTAG если выводится %EVR, например, при выводе списка дублированных пакетов, чтобы отдельно дополнительное rpm query не писать.
Comment 3 Vladimir D. Seleznev 2019-03-25 13:35:26 MSK
(In reply to comment #2)
> (В ответ на комментарий №1)
> > Указать disttag при удалении нельзя?
> 
> Я пока такой возможности не видел. Неплохо бы к возможности указывать disttag
> при удалении также добавить вывод %DISTTAG если выводится %EVR, например, при
> выводе списка дублированных пакетов, чтобы отдельно дополнительное rpm query не
> писать.

У меня были наработки на эту тему. Соберу следующий релиз rpm с возможностью указать disttag.
Comment 4 Vladimir D. Seleznev 2019-03-25 13:39:14 MSK
Вопрос: стоит ли менять при этом формат вывода `rpm -qa`? Чтобы вместо "%{name}-%{version}.%{release}" выводилось "%{name}-%{EVR}:%{?disttag::%disttag}"? Мне не очевидно, что от такого изменения может сломаться?
Comment 5 Dmitry V. Levin 2019-03-25 13:41:25 MSK
(In reply to comment #4)
> Вопрос: стоит ли менять при этом формат вывода `rpm -qa`?

А зачем?
Comment 6 Vladimir D. Seleznev 2019-03-25 13:50:53 MSK
(In reply to comment #5)
> (In reply to comment #4)
> > Вопрос: стоит ли менять при этом формат вывода `rpm -qa`?
> 
> А зачем?

Чтобы явно было видно, что установлен не два раза одна версия пакета, а два различных пакета, например. И чтобы было понятно, что именно писать в `rpm -e`
Comment 7 Aleksei Nikiforov 2019-03-25 13:52:26 MSK
(В ответ на комментарий №6)
> (In reply to comment #5)
> > (In reply to comment #4)
> > > Вопрос: стоит ли менять при этом формат вывода `rpm -qa`?
> > 
> > А зачем?
> 
> Чтобы явно было видно, что установлен не два раза одна версия пакета, а два
> различных пакета, например. И чтобы было понятно, что именно писать в `rpm -e`

Можно добавить опцию для отображения (или спрятывания) %DISTTAG из вывода.
Comment 8 Dmitry V. Levin 2019-03-25 14:01:54 MSK
(In reply to comment #6)
> (In reply to comment #5)
> > (In reply to comment #4)
> > > Вопрос: стоит ли менять при этом формат вывода `rpm -qa`?
> > 
> > А зачем?
> 
> Чтобы явно было видно, что установлен не два раза одна версия пакета, а два
> различных пакета, например. И чтобы было понятно, что именно писать в `rpm -e`

Там даже Epoch не выводится, и ничего, никому не надо было.  Я бы традиционный формат вывода не трогал, во избежание.
Comment 9 Anton Farygin 2019-03-25 14:14:45 MSK
главное научиться обрабатывать disttag в rpm -e.

Запросить то можно и через query-format.
Comment 10 Vladimir D. Seleznev 2019-03-25 14:53:31 MSK
Можно в выводе "error: "pkg" specifies multiple packages:" выводить формат с disttag. По идее, это ничего не должно сломать, очень удивлюсь, если скрипты это используют и парсят.
Comment 11 Dmitry V. Levin 2019-03-25 15:08:48 MSK
(In reply to comment #10)
> Можно в выводе "error: "pkg" specifies multiple packages:" выводить формат с
> disttag. По идее, это ничего не должно сломать, очень удивлюсь, если скрипты
> это используют и парсят.

Тут, я думаю, мы ничем не рискуем, расширяя формат вывода.
Comment 12 Ivan Zakharyaschev 2019-03-25 16:16:44 MSK
Как workaround для систем, где такое случилось, glebfm@ предложил использовать --allmatches
Comment 13 Anton Farygin 2019-03-25 21:19:57 MSK
Всё-таки с выводом более-менее понятно. Вопрос в удалении мусора.
Comment 14 Sergey Bolshakov 2019-04-02 15:01:05 MSK
(In reply to comment #9)
> главное научиться обрабатывать disttag в rpm -e.
> 
> Запросить то можно и через query-format.

Да, именно так.
Несчастные случаи на производстве с подобным итогом что-то часты в последнее время, --allmatches не спасает.
Comment 15 Bolshedvorsky Evgeny 2019-04-23 17:13:51 MSK
Нажатие ctrl+c при dist-upgrade  так-же приводит в появлению трудноудаляемых пакетов.
Comment 16 Repository Robot 2019-06-03 14:02:00 MSK
rpm-4.13.0.1-alt7 -> sisyphus:

Mon May 27 2019 Ivan Zakharyaschev <imz@altlinux> 4.13.0.1-alt7
(thx Vladimir D. Seleznev vseleznv@)
- Added support for dbi matching against DistTag and BuildTime (closes: #36375).
- Display NEVR with DistTag or BuildTime when label, specified to erase, is
  matching to multiple packages.
(thx Gleb F-Malinovskiy glebfm@)
- Fix non-LFS functions on i586 in rpm-plugins/systemd_inhibit.so,
  /usr/lib/rpm/sepdebugcrcfix (thx glebfm@).