it-swarm.com.de

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

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 boost oder libboost bekannt ist.

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

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 wir die Pakete foo-common, foo-data oder foo-doc zu Architecture: all machen, behalten wir nur eine Kopie der Daten im Archiv, anstatt sie mit jeder Architektur (z. B. i386, AMD64, ect ...) kopieren zu lassen. 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, -dbg-Pakete manuell zu erstellen. Die Build-Maschinen entfernen automatisch die Debugging-Symbole und fügen sie in -dbgsym-Pakete ein, die auf ddebs.ubuntu.com gehostet werden. (Siehe: Debug Symbol Packages ) -dbg -Pakete, die existieren, werden normalerweise einfach von Debian übernommen.

Anleitung

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

Kurz gesagt, für jedes Paket müssen in debian/control neue Zeilengruppen erstellt werden. Dann müssen auch debian/foo-*.install-Dateien erstellt werden. Dadurch kann dh_install den richtigen Inhalt in die richtigen Pakete einfügen.

Der foo.install fü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-dbg-Pakets erfordert das Bearbeiten von debian/rules, da dh_strip normalerweise Debugging-Symbole entfernt. Also müssen wir dieses Verhalten überschreiben:

.PHONY: override_dh_strip
override_dh_strip:
        dh_strip --dbg-package=foo-dbg
13
andrewsomething

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

Genau genommen bietet das openssl Quellpaket 5 Binärpakete:

  • libssl1.0.0 enthält die dynamische OpenSSL-Bibliothek, 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.
  • openssl enthä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 _/usr/bin/openssl_ und die zugehörigen Tools, Daten und Dokumentationen.
  • libssl-dev enthä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-doc enthä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-dbg enthält Debugging-Symbole. Dies ist nur nützlich für Benutzer, die die OpenSSL-Bibliothek oder Programme, die sie verwenden, debuggen. andrewsomething's answer enthält weitere Informationen zu diesen _-dbg_ Paketen.

Außerdem enthält exact eine ältere Version der Bibliothek, libssl0.9.8 , da es Programme gibt, die noch mit der älteren Version verknüpft 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 sqlite , 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 Kernpaket lib 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 Paket _-dev_. Wenn jemand ein Programm schreiben möchte, das die Bibliothek verwendet, benötigt er das Paket _-doc_.

Was ist mit Boost? Es folgt der gleichen Struktur, aber da Boost eine riesige Bibliothek ist, ist es in viele kleinere Pakete unterteilt: _libboost-*1.46.1_ und _libboost-*1.46-dev_. Genau genommen gibt es nur eine Version von Boost, 1.46 , aber oneiric hatte beide 1.42 und 1.46 . Es gibt auch ein Metapaket Boost-Defaults , das das versionierte Paket als Abhängigkeit einbindet.

Betrachtet man libhangul , so gibt es neben dem dynamischen Bibliothekspaket _libhangul1_ und dem Entwicklungspaket _libhangul-dev_ ein 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 Paket _-data_ 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, und 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 ; Eine Einführung finden Sie im New Maintainer's Guide . 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 ist ein guter Weg, um mit einem Deb-Paket zu beginnen (wählen Sie "Bibliothek").

12
Gilles