Wie kann man Debian-Paketierung veranlassen, zwei Pakete in einem vorgeschalteten Quellarchiv zu generieren?

14

Ich verpacke etwas für meine PPA. Die Upstream-Quelle ist ein auf .tar.gzMakefile basierendes Archiv.

Da dieses Paket eine erhebliche Menge von architekturunabhängigen Daten enthält, ist es ratsam, die Build-Skripte zwei Pakete generieren zu lassen:

  • Paket
  • Paket -Daten

Wie kann ich das einrichten? Ich habe meine Debian- controlDatei bearbeitet , um zwei Pakete zu generieren, aber ich habe keine Ahnung, wie ich die richtigen Dateien zum richtigen Paket bekomme.

Da die Datendateien derzeit alle über das Makefile installiert sind, bin ich hier irgendwie verloren.

Nathan Osman
quelle

Antworten:

14

Dies ist ein Ort, an dem mir die Dokumentation immer gefehlt hat. Ich habe so ziemlich nur gelernt, wie das funktioniert, indem ich mir ansah, wie es in anderen Paketen gemacht wird. Wie bei den meisten Dingen in Debian-Paketen gibt es einige Möglichkeiten, dies zu tun. Am einfachsten finde ich die Verwendung von debian/package.installDateien. Hier ist ein Beispiel für ein Paket, an dem ich gearbeitet habe: Imagination (bzr-Zweig) .

Zuerst müssen wir das Paket in erstellen debian/control. Es gibt jetzt drei Strophen. Eine für das Quellpaket und eine für jedes Binärpaket. Beachten Sie, dass das foo-Datenpaket sein sollte Architecture: all. Beachten Sie auch, dass die Vorstellungskraft davon abhängt imagination-common (= ${source:Version}).

Als nächstes erstellen wir eine debian/imagination.installDatei. Dies enthält die spezifischen Dateien oder Pfade, die wir in das Imaginationspaket aufnehmen möchten. Für dieses Paket benötigen wir alle architekturabhängigen Dateien. Die Desktop-Datei ist in der Binärdatei enthalten, die sie in ihrer Exec:Zeile aufruft .

usr/bin/
usr/lib/
/usr/share/applications/imagination.desktop

Wir müssen eine debian/imagination-common.installDatei erstellen . Dies wird alle architekturunabhängigen Dateien, Bilder, Übersetzungen, Dokumente und dergleichen enthalten.

/usr/share/doc/
/usr/share/icons/
/usr/share/imagination/
/usr/share/locale/

man dh_install beschreibt, was hier eigentlich los ist:

Vielleicht haben Sie ein großes Paket, das mehrere Binärpakete erstellt. Sie können das Upstream-Makefile verwenden, um alles in debian / tmp zu installieren, und dann mit dh_install Verzeichnisse und Dateien von dort in die richtigen Package-Build-Verzeichnisse kopieren.

Mit "den richtigen Paketerstellungsverzeichnissen" ist gemeint, dass am Ende des Erstellungsprozesses alles, was im Ergebnis enthalten foo.debist, in gefunden wird src/debian/foo. Die Dateien, in denen Sie landen foo-data.deb, finden Sie in src/debian/foo-data. Da debian/ruleses sich im Wesentlichen nur um ein Makefile handelt, können Sie sich andere Möglichkeiten vorstellen, um das gleiche Ergebnis zu erzielen.

undetwas
quelle
Ich danke dir sehr! Sehr klare Erklärung und funktioniert einwandfrei.
Nathan Osman