Wie und warum werden -dbg-, -dev- und -doc-Pakete erstellt?

15

Ich schreibe ein Ubuntu-Paket für ein Paket, das im Wesentlichen eine Reihe von Bibliotheken und Headern enthält, die dann zum Erstellen anderer Software verwendet werden. Das Paket zerfällt auch in kleinere Unterpakete, die voneinander abhängig sind. In diesem Sinne ist das Paket Boost ziemlich ähnlich.

Mir ist aufgefallen, dass Pakete wie boost dafür sorgen

[...]
libboost-dbg
libboost-dev
libboost-doc
[...]
libboost-all-dev
[...]

aber nichts, was unter dem Namen boostoder geht libboost.

  • Welche Idee steckt dahinter?
  • Was sind die Zwecke der -dbg, -devund -docPakete?
  • Gibt es Anweisungen zum Schreiben von Build-Dateien für diese Pakete?
Nico Schlömer
quelle

Antworten:

13

Idee & Zweck

Der Hauptgrund für die Trennung dieser verschiedenen Pakete hängt mit dem Speicherplatz und der Download-Geschwindigkeit zusammen. Insbesondere ist der Spiegelbereich von großer Bedeutung, da dadurch mehrere Kopien der Daten verteilt werden. Indem die foo-common, foo-dataoder foo-docPakete Architecture: all, halten wir nur eine Kopie der Daten im Archiv anstatt es mit jeder Architektur kopiert (zB i386, amd64, ect ...). Debugging-Symbole werden von den meisten Benutzern nicht benötigt und führen dazu, dass der Paket-Download länger dauert.

Für Pakete in den offiziellen Ubuntu-Archiven gibt es eigentlich keinen Grund, -dbgPakete manuell zu erstellen . Die Build-Maschinen -dbgsymentfernen automatisch die Debugging-Symbole und fügen sie in Pakete ein, die auf ddebs.ubuntu.com gehostet werden. (Siehe: Debug Symbol Packages ) -dbgPakete, die existieren, werden normalerweise einfach von Debian übernommen.

Anleitung

Schauen Sie sich für die Implementierung diese Frage an:

Kurz gesagt, debian/controlfür jedes Paket müssen neue Zeilengruppen erstellt werden. Dann müssen auch debian/foo-*.installDateien erstellt werden. Auf diese Weise können Sie dh_installdie richtigen Inhalte in die richtigen Pakete einfügen.

Das foo.installfür das Haupt-Binärpaket könnte folgendermaßen aussehen:

usr/bin/
usr/lib/

foo-common.install, foo-data.install, foo-doc.install, Oder was auch immer:

/usr/share/doc/
/usr/share/icons/
/usr/share/foo/
/usr/share/locale/

Und für foo-dev:

/usr/include/
/usr/lib/pkgconfig
/usr/lib/*.so

Das Erstellen des foo-dbgPakets erfordert debian/rulesdie normale Bearbeitung dh_strip, wodurch die Fehlersuchsymbole entfernt werden. Also müssen wir dieses Verhalten überschreiben:

.PHONY: override_dh_strip
override_dh_strip:
        dh_strip --dbg-package=foo-dbg
undetwas
quelle
12

Boost ist ein komplexes Beispiel, schauen wir uns zunächst ein einfacheres an.

Genauer gesagt enthält das OpenSSL- Quellpaket 5 Binärpakete:

  • libssl1.0.0enthält die OpenSSL Dynamic Library, Version 1.0.0. Das ist es, was Programme, die mit dieser Bibliothek verknüpft sind, ausführen müssen. Der Paketname enthält eine Versionsnummer, da möglicherweise gleichzeitig andere Versionen der Bibliothek installiert sind, wenn andere Programme mit einer anderen Version verknüpft sind, die nicht mit 1.0.0 binär kompatibel ist.
  • opensslEnthält Befehlszeilentools, die die OpenSSL-Bibliothek verwenden. Selbst wenn Sie über mehrere Versionen der Bibliothek verfügen, benötigen Sie nicht mehrere Versionen dieser Tools: Es gibt nur ein Tool /usr/bin/opensslund die zugehörigen Tools, Daten und Dokumentationen.
  • libssl-devEnthält die Dateien, die Sie benötigen, um ein Programm zu kompilieren, das mit OpenSSL verknüpft ist. Es gibt C-Header-Dateien ( *.h), Bibliotheken zum Verknüpfen ( *.a,*.so ) und einige verschiedene Dateien.
  • libssl-docenthält Dokumentation für die OpenSSL-Bibliothek. Sie benötigen dieses Paket nur, wenn Sie Programme schreiben möchten, die die Bibliothek verwenden.
  • libssl1.0.0-dbgenthält Debugging-Symbole. Dies ist nur nützlich für Benutzer, die die OpenSSL-Bibliothek oder Programme, die sie verwenden, debuggen. Die Antwort von andrewsomething enthält weitere Informationen dazu-dbg Paketen.

Darüber hinaus enthält präzise eine ältere Version der Bibliothek, libssl0.9.8 da es Programme gibt, die noch mit der älteren Version verlinkt sind.

Andere Pakete, die Sie möglicherweise sehen, sind Bindungen für andere Sprachen als C. OpenSSL wird nicht mit allen ausgeliefert (es gibt Bindungen für OpenSSL für andere Sprachen, aber sie stammen nicht aus derselben Quelle). Ein Beispiel ist sqlite3 , das mit TCL-Bindungen geliefert wird .

Der Hauptgrund für die Aufteilung solcher Pakete ist, dass unterschiedliche Pakete unterschiedliche Zielgruppen haben. Ein System, in dem niemand jemals etwas kompiliert, benötigt nur das libKernpaket und möglicherweise die Befehlszeilentools. Sie werden bei Bedarf automatisch aus den Abhängigkeiten installiert. Wenn jemand ein Programm kompilieren möchte, das die Bibliothek verwendet, benötigt er das -devPaket. Wenn jemand ein Programm schreiben möchte, das die Bibliothek verwendet, benötigt er das -docPaket.

Was ist mit Boost? Es folgt der gleichen Struktur, aber da Boost eine riesige Bibliothek ist, wird es in viele kleinere Pakete aufgeteilt: libboost-*1.46.1und libboost-*1.46-dev. Genau genommen gibt es nur eine Version von Boost, 1.46 , aber oneiric hatte sowohl 1.42 als auch 1.46 . Es gibt auch ein Metapaket für die Boost- Standardeinstellungen , das das versionierte Paket als Abhängigkeit abruft .

Wenn man sich libhangul ansieht , gibt es neben dem dynamischen Bibliothekspaket libhangul1und dem Entwicklungspaket libhangul-devein Paket libhangul-data. Dieses Paket enthält zusätzliche Daten, die von der Bibliothek benötigt werden. Selbst wenn Sie über mehrere Versionen der Bibliothek verfügen, können diese das -dataPaket gemeinsam nutzen. Das Paket ist außerdem architekturunabhängig. Software, die eine große Menge architekturunabhängiger Daten enthält, wird in architekturabhängige und architekturunabhängige Pakete aufgeteilt, um Speicherplatz auf Verteilungsstandorten zu sparen. Ein anderes Suffix mit einer ähnlichen Bedeutung ist-common .

Ubuntu- und Debian-Paketierungsregeln sind sehr ähnlich, so dass Material über die Erstellung von Debian-Paketen auch für Ubuntu gilt. Tatsächlich können Sie dasselbe Quellpaket für Debian und Ubuntu haben; Das einzige, was Debian- und Ubuntu-Pakete unterscheidet, ist das Kompilieren gegen verschiedene Bibliotheksversionen. Das ist nicht mehr als der Unterschied zwischen verschiedenen Versionen von Ubuntu. Halten Sie die Debian-Entwicklerdokumentation bereit, insbesondere das Debian-Richtlinienhandbuch und die Entwicklerreferenz . Im New Maintainer's Guide finden SieEine Einführung finden . Ignorieren Sie die Teile über die Arbeit mit dem Debian-Projekt und so weiter, lesen Sie einfach die Teile über die Erstellung eines Pakets.dh_make eine gute Möglichkeit, um mit einem Deb-Paket zu beginnen (wählen Sie "Library" aus).

Gilles 'SO - hör auf böse zu sein'
quelle