Назад | Перейти на главную страницу

Как указать, что пакет 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

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

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

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

https://wiki.debian.org/Renaming_a_Package