Как указать, что deb-пакет должен заменить пакет с другим именем?

Как указать, что deb-пакет должен заменить пакет с другим именем?

Я создаю пакет Debian foo, который должен заменить существующий пакет barв системах, на которых он установлен.

Я прочел:

https://www.debian.org/doc/debian-policy/ch-relationships.html

И пришли к выводу, что правильные предложения в тексте DEBIAN/controlдолжны выглядеть так:

Provides: foo
Conflicts: bar
Replaces: bar

Однако когда я пытаюсь установить fooпакет в системе, где он уже barустановлен, система отказывается из-за fooконфликта с bar.

Если я удалю Conflicts: barзапись, то dpkgоба пакета будут установлены бок о бок, что является проблемой, поскольку fooнеобходимо заменить bar.

Каковы правильные controlположения файла, позволяющие этого добиться?

Я пробовал Breaksвместо Conflicts:

dpkg: regarding foo_DEV-22._i386.deb containing foo:
 foo breaks bar
  bar (version 3.2.2.1-x86NX4.4-x86) is present and installed.
  bar provides bar and is present and installed.
dpkg: error processing foo_DEV-22._i386.deb (--install):
 installing foo would break existing software
Errors were encountered while processing:
 foo_DEV-22._i386.deb

решение1

dpkgэто инструмент низкого уровня. Чтобы получить желаемый эффект, пакет следует поместить в репозиторий и добавить, тогда sources.list(5)все apt install fooбудет сделано правильно.

решение2

Почему бы не переименовать существующий пакет заранее, а затем заменить его на нужный вам?

Для этого вам необходимо воспользоваться методами/способами, указанными на официальной вики-странице Debian ниже:

https://wiki.debian.org/Renaming_a_Package

Связанный контент