Ersetzen mehrerer Debian-Pakete aus kompilierten Quellen

Ersetzen mehrerer Debian-Pakete aus kompilierten Quellen

Ich musste eine Version einer Bibliothek aus ihrem Quellcode-Repository herunterladen und installieren. Das Problem ist, dass andere Pakete aus dem Kubuntu-Paketmanager die Installation dieser Bibliothek erfordern. Im Moment arbeite ich mit ffmpeg, aber ich musste das schon einmal tun (z. B. OpenCV) und suche nach der besten Möglichkeit, dies in Zukunft zu tun ...

Ich versuche also, ein Debian-Paket zu erstellen, das ich mit dpkg und checkinstall installieren kann. Ich habe die Deb-Datei inzwischen dekomprimiert, um sie zu ändern und zu versuchen, sie richtig zum Laufen zu bringen.

Das Problem ist, dass ffmpeg im Paketmanager in mehrere Pakete aufgeteilt ist und ich nicht 5/6 Pakete schreiben möchte, um jedes einzelne zu ersetzen, wenn es nicht sein muss. Ich habe sichergestellt, dass es mit allem, was für alle diese Pakete erforderlich ist, richtig kompiliert ist.

Ich habe versucht, „Erfordert“ und „Ersetzt“ zu verwenden, aber es scheint einfach nicht richtig zu funktionieren. Wenn ich versuche, VLC anschließend zu installieren, werde ich aufgefordert, alle Versionen aus dem Paketmanager zu installieren. Ich habe auch sichergestellt, dass die Versionsnummer neuer ist als die im Paketmanager.

VLC-Voraussetzungen

Hier ist, was in meiner Deb-Steuerdatei steht. Soweit ich sehen kann, wird das alles im Muon-Paketmanager erkannt.

Package: ffmpeg
Priority: extra
Section: checkinstall
Installed-Size: 172216
Maintainer: root@skund
Architecture: amd64
Version: 8:1.2.1-git-2
Provides: ffmpeg,libav-tools,libpostproc52,libavdevice53,libavutil51,libavformat53,libavcodec53,libswscale2
Replaces: ffmpeg,libav-tools,libpostproc52,libavdevice53,libavutil51,libavformat53,libavcodec53,libswscale2
Description: Package created with checkinstall 1.6.2

Und hier ist es im Paketmanager installiert:

ffmpeg-Paketmanager ffmpeg-Paketmanager 2

Hat jemand eine Idee, wie man das zum Laufen bringen kann?

Antwort1

Nun, zum einen Provides:funktioniert es nicht mit Abhängigkeiten, die eine Version angeben. Von derDebian-Richtlinienhandbuch, „Virtuelle Pakete – Bietet“:

Wenn einem Beziehungsfeld eine Versionsnummer zugeordnet ist, werden nur echte Pakete berücksichtigt [...]. Mit anderen Worten, wenn eine Versionsnummer angegeben ist, ist dies eine Aufforderung, alle Provides für diesen Paketnamen zu ignorieren und nur echte Pakete zu berücksichtigen.

Abhängigkeiten von Bibliotheken sind fast immer versioniert. Das funktioniert also einfach nicht.

Stattdessen könnten Sie:

  • Laden Sie das Debian-Paket ( apt-get source PACKAGE) herunter und aktualisieren Sie es für das neueste ffmpeg (und Sie können erforderliche Patches sogar an den Debian-Bugtracker senden). Natürlich müssen Sie die Sonames der Bibliotheken aktualisieren (ich wette, die ABI hat sich geändert) und wahrscheinlich viele Dinge neu erstellen, die von ffmpeg abhängen. Einiges davon erfordert möglicherweise Quellcodeänderungen, wenn sich die API geändert hat.
  • Oder der einfache Weg: Installieren Sie es in /usr/local. Sie können davon eins erstellen .debund ihm einen anderen Paketnamen geben (z. B. local-ffmpeg). Sie können es dann zusammen mit dem von Debian bereitgestellten ffmpeg installieren und müssen sich um all das oben genannte nicht kümmern. Sie können es auch stowin installieren /usr/local.

verwandte Informationen