So installieren Sie zwei Pakete, die dieselbe Datei schreiben

14

Ich habe zwei Pakete, die jeweils / usr / bin / ffprobe erstellen. Einer von ihnen ist ffmpeg aus dem Deb Multimedia-Repository, der andere ist ffmbc 0.7-rc5, das aus dem Quellcode erstellt wurde. Die von Hand gerollte ist geschäftskritisch, und wir haben sie nur von der Quelle installiert, wo immer es nötig war. Ich kann nur davon ausgehen, dass es die ffmpeg-Datei verstopfen würde, und es gab nie irgendwelche negativen Auswirkungen.

Theoretisch sollte es für unser ffmbc-Paket akzeptabel sein, die Datei aus dem ffmpeg-Paket zu überschreiben. Der Nachteil dabei ist, dass ein Update auf ffmpeg die ffmbc-Binärdatei überschreibt. Gibt es eine einfache Möglichkeit, dies zu vereinbaren?

Joel E Salas
quelle

Antworten:

12

Auf Debian-basierten Systemen kann das DPKG (unter apt) Umleitungen mit dem Befehl dpkg- divert einrichten

dpkg-divert ist das Dienstprogramm zum Einrichten und Aktualisieren der Umleitungsliste.

Dateiumleitungen sind eine Möglichkeit, dpkg (1) zu zwingen, eine Datei nicht an ihrem Speicherort, sondern an einem umgeleiteten Speicherort zu installieren. ... Systemadministratoren können es auch verwenden, um die Konfigurationsdatei eines Pakets zu überschreiben, oder wenn einige Dateien (die nicht als 'conffiles' markiert sind) von dpkg beibehalten werden müssen, wenn eine neuere Version eines Pakets installiert wird, das diese Dateien enthält .

In Ihrem Fall können Sie einen Befehl wie diesen verwenden, um eine Umleitung einzurichten. (Ich habe nicht getestet. Überprüfen Sie die Manpage und vergewissern Sie sich, dass dies richtig scheint.)

dpkg-divert --local --divert /usr/bin/ffprobe.ffmpeg --rename /usr/bin/ffprobe
Zoredache
quelle
8

Eine andere Lösung, die ich gefunden habe, war zu ändern, wie ich das ffmbc-Paket erstellt habe. Im Allgemeinen ist es möglich, ein alternatives Präfix zu übergeben, um die endgültigen Pfade der installierten Dateien zu ändern:

./configure --prefix=/usr/local

Für Debian-Pakete geht dies in der Datei $ {package} / debian / rules folgendermaßen vor:

override_dh_auto_configure:
    ./configure --enable-gpl --prefix=/usr/local

Durch das Einfügen der ffmbc-Dateien /usr/localkann ich die ffmpeg-Dateien beibehalten /usrund jedem Paket ermöglichen, unabhängig aktualisiert zu werden.

Joel E Salas
quelle
3
Pakete sollten nichts zu installieren /usr/local- es ist ein Richtlinienverstoß. Der springende Punkt dabei /usr/localist, Dateien in der Paketverwaltung und manuell installierte Dateien getrennt zu halten. Siehe die folgende Diskussion zum Thema
Onlyjob
-1

Pakete, die die gleichen Dateien enthalten, sollten miteinander in Konflikt stehen - es handelt sich nicht um einen Fehler (bitte denken Sie daran, solche Fälle zu melden). Wenn Sie Software aus Quellen erstellen und mit make install(oder ähnlichem) installieren, stellen Sie sicher /usr/local, dass Konflikte mit der Paketverwaltung vermieden werden.

Bitte beachten Sie, dass deb-multimedia.org als inoffizielles Repository eingestuft wird, das bekanntermaßen Konflikte mit offiziellen Paketen verursacht.

Wenn die von Ihnen benötigte Software nicht für Debian gepackt ist , können Sie ein RFP für die Packungsanforderung senden, aber prüfen Sie zunächst, ob Anforderungen vorhanden sind .

Nurjob
quelle