Я создаю пакет 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