Ich erstelle ein Debian-Paket foo
, das ein vorhandenes Paket auf den Systemen ersetzen muss, bar
auf denen es installiert ist.
Ich habe gelesen:
https://www.debian.org/doc/debian-policy/ch-relationships.html
Und kam zu dem Schluss, dass die korrekten Klauseln darin DEBIAN/control
wie folgt aussehen sollten:
Provides: foo
Conflicts: bar
Replaces: bar
foo
Wenn ich jedoch versuche, das Paket auf einem System zu installieren , auf dem es bereits bar
installiert ist, schreckt das System zurück, da foo
Konflikte mit bestehen bar
.
Conflicts: bar
Wenn ich den Eintrag entferne dpkg
, können beide Pakete nebeneinander installiert werden, was jedoch ein Problem darstellt, da foo
ersetzt werden muss bar
.
Welche Dateiklauseln sind geeignet, control
um dies zu erreichen?
Ich habe Breaks
stattdessen Folgendes versucht 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
Antwort1
dpkg
ist ein Low-Level-Tool. Um den gewünschten Effekt zu erzielen, sollte das Paket in ein Repo gepackt und hinzugefügt werden, sources.list(5)
dann apt install foo
funktioniert es richtig.
Antwort2
Warum benennen Sie das vorhandene Paket nicht vorher um und ersetzen es später durch das gewünschte?
Zu diesem Zweck müssen Sie die Methoden/Wege gemäß der folgenden offiziellen Debian-Wiki-Seite verwenden:
https://wiki.debian.org/Renaming_a_Package