// Datei: ./konzepte/software-in-paketen-organisieren/debian-paket-varianten.adoc

// Baustelle: Fertig
// Axel: Fertig

[[debian-pakete-varianten]]

=== Debian-Pakete (Varianten) ===

// Stichworte für den Index
(((Paketvarianten, Binärpaket)))
(((Paketvarianten, Sourcepaket)))
Wird von einem Debianpaket gesprochen, ist meist ein Binärpaket mit der
Dateiendung `deb` gemeint. Dieses beinhaltet Software oder Daten, welche
Sie sofort auf einem Computer mit Debian GNU/Linux installieren können.

Darüberhinaus gibt es aber auch noch andere Paketarten in Debian. Das
wichtigste davon sind die Sourcepakete (siehe <<sourcepakete>>), die den
Quellcode enthalten, aus dem später eines oder mehrere Binärpakete
(siehe <<binaerpakete>>) gebaut werden.

[[binaerpakete]]

==== Binärpakete (`deb`) ====

// Stichworte für den Index
(((Paketvarianten, Binärpaket)))
Binärpakete beinhalten Programme in kompilierter Form, die vorher bspw.
in C oder einer ähnlichen Programmiersprache geschrieben wurden.
Weiterhin beinhaltet es häufig noch Konfigurationsdateien, Dokumentation
und weitere Daten in exakt dem Zustand, wie sie nachher auch auf der
Festplatte Ihres Rechners vorliegen.

Bei der Installation eines `deb`-Pakets entpackt das Programm `dpkg`
zuerst das Archiv aus dem `deb`-Paket und kopiert danach die Inhalte des
Archivs an die vorbezeichnete Stelle in der Verzeichnishierarchie auf
dem Zielsystem. Alle im Archiv genannten Pfade und Berechtigungen werden
dabei übernommen.

// Stichworte für den Index
(((Paketinhalt, Metadaten)))
Außerdem sind in den Binärpaketen Metadaten gespeichert, die solche
Informationen wie bspw. die Abhängigkeiten zu anderen Paketen
enthalten. Weitere Details dazu erfahren Sie unter ``Konzepte und Ideen
dahinter'' (siehe <<konzepte-und-ideen-dahinter>>) sowie ``Aufbau und
Format von Binärpaketen'' (siehe <<aufbau-und-format-binaer>>).

// Stichworte für den Index
(((file, UNIX-Kommando)))
(((Debianpaket, vnstat)))
Wie bereits oben benannt, hat ein Binärpaket üblicherweise die
Dateiendung `deb` und wird auch durch das UNIX-Kommando
`file` entsprechend als solches erkannt. Nachfolgende Ausgabe zeigt
dieses Verhalten am Beispiel des Pakets 'vnstat', eines Programms zur
Analyse des Netzwerktraffics.

.Das UNIX-Kommando `file` identifiziert die `deb`-Datei als Debianpaket
----
$ file vnstat_1.10-1_i386.deb
vnstat_1.10-1_i386.deb: Debian binary package (format 2.0)
$
----

[[uebergangs-und-metapakete]]

==== Übergangspakete, Metapakete und Tasks ====

// Stichworte für den Index
(((Paketvarianten, Metapaket)))
(((Paketvarianten, Mikro-Binärpaket)))
(((Paketvarianten, Tasks)))
(((Paketvarianten, Übergangspaket)))
Es gibt ein paar besondere Varianten von Binärpaketen – _Übergangspakete_ 
und _Metapakete_. Vom Aufbau her unterscheiden sich diese nicht von normalen 
Binärpaketen, aber vom Inhalt. Übergangspakete und Metapakete sind reguläre 
Binärpakete, die jedoch im Normalfall keine eigenen Programme, Daten oder 
ähnliches beinhalten. Stattdessen liefern diese Abhängigkeiten auf andere 
Pakete.

// Stichworte für den Index
(((Paketvarianten, Übergangspaket)))
(((Umbenennung eines Pakets)))
_Übergangspakete_ werden bei Paketumbenennungen verwendet und dienen nur
dazu, Ihnen den Wechsel bei geänderten (Binär-)Paketnamen zu
erleichtern. Damit wird bei einer Aktualisierung eines bestehenden
Pakets das Paket mit dem neuen Namen nachgezogen. In den meisten Fällen
können Sie nach der Aktualisierung das Paket mit dem bisher verwendeten
Namen gefahrlos von ihrem System entfernen. Nicht selten passiert dies
bereits automatisch über die Paketverwaltung durch weitere, ggf.
negative Abhängigkeiten.

Übergangspakete hängen meist nur von einem einzigen anderen Paket ab.
Beispiele dafür sind:

 - 'git' -> 'gnuit' und dann später 'git-core' -> 'git'
 - 'chromium' -> 'chromium-bsu' und dann später 'chromium-browser' -> 'chromium'
 - 'diff' -> 'diffutils'
 - 'ttf-mplus' -> 'fonts-mplus'

// Stichworte für den Index
(((Communtu)))
(((Paketkombinationen)))
(((Paketvarianten, Metapaket)))
_Metapakete_ sind hingegen bewusst installierte Pakete, die Ihnen die
Installation einer ganzen Gruppe von Paketen erleichtern. Als
Abhängigkeiten zieht ein Metapaket eine Gruppe von verwendeten Paketen
hinter sich her. Auf diese Art und Weise installieren Sie durch die
Auswahl eines einzelnen Pakets eine ganze Gruppe an weiteren Paketen,
die thematisch zusammengehören und sich häufig auch einander bedingen.

Das ist sehr nützlich, wenn Sie sich sicher sind, dass Sie eine bereits
vorbereitete Zusammenstellung von Programmen benötigen. Für die
Desktop-Umgebung XFCE genügt es beispielsweise, das dazugehörige
Metapaket namens 'xfce4' auszuwählen. Andere Programmzusammenstellungen
wie 'gnome' (GNOME-Window-Manager), 'lxde' (LXDE-Window-Manager) und
'kde-full' (K Desktop Environment) handhaben das ähnlich.

Sehr intensiv verwendet das Projekt Communtu diese Metapakete. Über die
Webseite des Projekts stellen Sie sich individuelle Paketkombinationen
(``Bündel'') zusammen und beziehen diese von dort. Ausführlicher gehen
wir darauf in <<webbasierte-programme-communtu>> ein.

// Stichworte für den Index
(((Debianpaket, tasksel)))
(((Metapaket, Tasks)))
(((Paketgruppe)))
(((Paketvarianten, Tasks)))
_Tasks_ – auf deutsch mit ``Aufgaben'' übersetzbar – sind Metapakete,
die vom Debian Installer verwendet werden, um bestimmte Paketgruppen zu
installieren. Dabei geht es vor allem um Pakete für bestimmte Sprachen
und Lokalisierungen. Zum Beispiel hängt die Aufgabe
'task-german-desktop' u.a. von den Paketen mit den deutschsprachigen
Hilfedateien und Wörterbüchern von LibreOffice ab. Ähnliches existiert
für Serverfunktionen, bspw. 'task-dns-server' und
'task-database-server'. Diese Funktionalität stammt vom Paket 'tasksel'
und wird ab Debian 7 _Wheezy_ intensiv verwendet. Auf das angesprochene
Programm `tasksel` gehen wir in <<tasksel>> ausführlicher ein.

[TIP]
.Aufbau und Format von Übergangs- und Metapaketen
====
Mehr Informationen zum Aufbau dieser Pakete finden Sie unter ``Aufbau
und Format von Übergangs- und Metapaketen'' in
<<aufbau-und-format-uebergang-und-metapakete>>.
====

[TIP]
.Metapakete selber bauen
====
Wie Sie ihre eigenen Metapakete erstellen und diese dann auch zum Bezug in 
einem Repository bereithalten, lernen Sie unter ``Metapakete bauen'' in 
<<metapakete-bauen>>. 
====

[[mikro-binaerpakete]]

==== Mikro-Binärpakete ====

// Stichworte für den Index
(((Mikro-Binärpaket, udeb)))
(((Paketvarianten, Mikro-Binärpaket)))
Ausschließlich die _Mikro-Binärpakete_ mit der Dateiendung `udeb` sind
technisch keine gewöhnlichen Binärpakete. Sie sind aufs Kleinste
heruntergestutzte Pakete, die nur eine Art von Paketrelation namens
``hängt ab von'' kennen, desweiteren keine Maintainer-Skripte beinhalten
und auch sonst kaum Metainformationen mitführen. Einziger Einsatzzweck
dieser Mikro-Debs{empty}footnote:[das ``u'' soll den griechischen
Buchstaben Mu (``µ'') darstellen] ist im Debian Installer während des
Zeitpunkts der Installation. Deswegen gibt es auch nur solche Pakete als
`udeb`-Variante, die vom Debian Installer selbst gebraucht werden.
Darunter zählen bspw. Pakete mit den Programmen zum Anlegen von
Dateisystemen.

[[sourcepakete]]

==== Source-Pakete (`dsc` und weitere Dateien) ====

// Stichworte für den Index
(((Debian Source Control)))
(((Paketvarianten, Sourcepaket)))
(((Sourcepaket, dsc)))
Diese Pakete beinhalten den Quellcode von Programmen und tragen das
Suffix `dsc` als Abkürzung für _Debian Source Control_. Die Bestandteile
eines solchen Paketes sind:

- der Originalquellcode als ein oder mehrere komprimierte `tar`-Archive.
  Je nach verwendetem Komprimierungsverfahren lauten die Dateiendungen
  `orig.tar.gz`, `orig.tar.bz2` oder `orig.tar.xz`.

- die Änderungen vom Original zum Debianpaket als komprimierter Patch.
  Diese Dateien haben klassisch die Endung `diff.gz` und wurden mit
  `gzip` gepackt. Liegen die Änderungen wie bei moderneren Sourcepaketen 
  als komprimiertes `tar`-Archiv vor, wird als Dateiendung `debian.tar.gz` 
  oder `debian.tar.xz` genutzt. Bei Letzterem kommt anstatt von `gzip`
  das Komprimierungswerkzeug `xz` zum Einsatz.

- eine Datei mit den Metadaten (Größe, Hashsummen, etc.) über die
  vorher genannten Dateien. Genutzt wird die Dateiendung `dsc` als
  Abkürzung für _Debian Source Control_.

Alle diese genannten Dateien stellen in der Gesamtheit ein einzelnes
Debian-Source-Paket dar und beinhalten den Upstream-Quellcode plus
Paketierung.

// Stichworte für den Index
(((apt-get, source)))
(((Debianpaket, dpkg-dev)))
(((dpkg-source)))

[TIP]
.Auspacken von Debian-Source-Paketen
====
Zum Auspacken von Debian-Source-Paketen benutzen Sie das Programm
`dpkg-source` aus dem Paket 'dpkg-dev'. Müssen Sie das Source-Paket
vorher noch herunterladen, so nutzen Sie besser den Aufruf `apt-get
source` 'Paketname', welcher das Source-Paket herunterlädt und danach
direkt mit `dpkg-source` auspackt. Mehr Informationen zu Source-Paketen
finden Sie unter ``Aufbau und Format von Sourcepaketen'' in
<<aufbau-und-format-source>> und ``Sourcepakete beziehen'' in
<<sourcepakete-beziehen>>.
====

[[virtuelle-pakete]]

==== Virtuelle Pakete ====

// Stichworte für den Index
(((Paketvarianten, virtuelles Paket)))
Reale Binärpakete können zusätzlich deklarieren, dass sie die
Funktionalität eines weiteren Pakets ebenfalls bereitstellen. Existiert
dieses weitere Paket nicht auch als reales Binärpaket, wird es als
virtuelles Paket bezeichnet. Das gleiche virtuelle Paket kann hierbei
von verschiedenen Binärpaketen zur Verfügung gestellt werden.

Andere Pakete können von einem solchen virtuellen Paket abhängen. Um
diese Abhängigkeit zu erfüllen, genügt es, wenn ein Paket installiert
ist, welches dieses virtuelle Paket bereitstellt.

In Debian gibt es bspw. die virtuellen Pakete 'xserver',
'x-display-manager' und 'x-window-manager', die typische
Komponenten des X-Window-Systems zusammenfassen.
<<fig.aptitude-virtuelle-pakete>> zeigt beispielhaft die Auswahl für das
virtuelle Paket 'x-display-manager' in `aptitude`. In der ersten Spalte
der Darstellung kennzeichnet dazu der Buchstabe `v` neben dem Namen des
virtuellen Pakets diese spezielle Variante.

Zur Auswahl aus dem Paket stehen u.a. der Displaymanager Slim (Paket
'slim'), der Gnome Display Manager in Versionen 2 und 3 (Pakete 'gdm'
und 'gdm3'), der KDE Display Manager (Paket 'kdm'), der WINGs Display
Manager und der ursprüngliche X Display-Manager (Paket 'xdm'). Der
Screenshot in <<fig.aptitude-virtuelle-pakete>> stammt von einem
Debian-System, auf welchem GDM3 installiert ist. Das erkennen Sie an der
Hervorhebung durch fettgedruckten Text und der Markierung `i` für
``Paket ist installiert'' in der ersten Spalte der Darstellung (siehe
auch <<dpkg>> für weitere Darstellungsvarianten).

.Inhalt des Pakets x-display-manager in Aptitude
image::konzepte/software-in-paketen-organisieren/aptitude-virtuelle-pakete.png[id="fig.aptitude-virtuelle-pakete",width="50%"]

Eine Liste aller offiziell verwendeten virtuellen Pakete in Debian gibt
es im Paketierungshandbuch auf der Debian-Webseite
<<Debian-Virtual-Packages-List>>. Andere Distributionen nutzen dieses
Konzept auch, jedoch in unterschiedlicher Intensität.

[[pseudopakete]]

==== Pseudopakete im Debian Bug Tracking System ====

// Stichworte für den Index
(((Bugreport)))
(((Debianpaket, ftp.debian.org)))
(((Debianpaket, general)))
(((Debianpaket, wnpp)))
(((Debianpaket, www.debian.org)))
(((Fehler melden)))
(((Paketvarianten, Pseudopakete)))
(((Debian BTS)))
Eine weitere Art nicht real existierender Pakete sind die sogenannten
_Pseudopakete_, die Sie bei der Rückmeldung von Fehlern verwenden
können. Diese Pakete dienen dazu, um Probleme mit der
Debian-Infrastruktur aufzufangen und über das Debian Bug Tracking System
(BTS) zu verfolgen.

Finden Sie bspw. einen Fehler auf den Webseiten von Debian, so können
Sie einen Fehlerbericht gegen das Pseudopaket 'www.debian.org'
schreiben. Paketentfernungen aus Debian werden über Fehlerberichte gegen
das Paket 'ftp.debian.org' abgehandelt. Zukünftige Pakete sowie
verwaiste Pakete werden über das Pseudopaket 'wnpp' verwaltet und
verfolgt. 'wnpp' ist eine Abkürzung für ``Work-needing and prospective
packages'' -- auf deutsch: ``Arbeit bedürfende und zukünftige Pakete''.

Möchten Sie einen Fehlerbericht schreiben, wissen aber nicht, welchem
konkreten Paket der Fehler zuzuordnen ist, so können Sie einen
Fehlerbericht gegen das Pseudopaket 'general' schreiben. Die
Debian-Entwickler werden danach versuchen, herauszufinden, welches reale
Paket die Ursache für den von Ihnen berichteten Fehler ist.

[TIP]
.Fehler zu einem Paket anzeigen
====
Unter ``Bugreports anzeigen'' in <<bugreports-anzeigen>> lernen Sie, wie
Sie die bestehenden Fehlermeldungen zu einem Paket anzeigen, deuten und
einen eigenen Bugreport an das Betreuerteam des Pakets
('Paket-Maintainer') übermitteln.
====

// Datei (Ende): ./konzepte/software-in-paketen-organisieren/debian-paket-varianten.adoc
