# Debian-Paket

Debian-Pakete (Dateiendung: .deb) dienen der Softwareinstallation auf Debian-basierten Betriebssystemen. Sie enthalten die zu installierenden Programme in komprimierter Form. Das Paketformat wurde von Ian Murdock entwickelt, die Abkürzung Deb leitet sich hierbei aus dem ersten Teil des Namens der Distribution Debian, der sich wiederum von den Namen „Debra“ (der Vorname Murdocks damaliger Frau) und „Ian“ ableitet.
Eine Debian-Paketdatei besteht einmal aus einem ar-Archiv, das wiederum mit gzip, bzip2 oder LZMA komprimierte tar-Archive enthält. Diese enthalten die eigentlichen Programmdateien sowie Metainformationen wie Versionsinformationen des enthaltenen Programms und Abhängigkeiten zu weiteren Paketen, welche dieses Programm zum Laufen benötigt oder die Funktion verbessern.
Um diese Informationen verwenden und verwalten zu können, konzipierte Murdock ebenfalls den Debian Package Manager (kurz dpkg). Darauf wiederum baut APT (Kommandozeilenprogramm) auf bzw. dessen Frontends (z. B. aptitude oder Synaptic), das auch weitere für das Programmpaket nötige Pakete automatisch installiert.
Die Debian-Repositorys enthalten neben diesen Binärpaketen auch Quelltextpakete.

## Binärpakete

Binärpakete können von den Werkzeugen der Debian-Paketverwaltung direkt installiert werden.
Das Auspacken des Debianpakets und die Ausführung diverser Skripte und Helferprogramme geschieht mit den Rechten des Systemadministrators, genauso wie bei den Paketverwaltungen anderer Betriebssysteme.
Einige Pakete sind auch als udeb-Pakete erhältlich. Diese werden meist dazu benutzt, ein minimales Debiansystem für die Installation zu laden. Sie bieten nur einen Bruchteil der Funktionen eines normalen deb-Paketes und werden nur vom Debian-Installer verwendet, nicht in einem installierten Debiansystem.

### Aufbau im Detail

Jedes Binärpaket besteht aus drei Dateien, die mittels des UNIX-Kommandos ar oder dem debianspezifischen Kommando dpkg-deb entpackt werden können (z. B. ar x datei.deb):
* debian-binary: eine Textdatei mit der Versionsnummer des verwendeten Paketformats, aktuell ist die Version 2.0.
* control.tar.gz: ein mit tar und gzip gepacktes Archiv, enthält Dateien, die zur Installation dienen oder Abhängigkeiten auflisten. Die hier aufgeführten sind nur einige Beispiele. Weiterführende Beschreibungen dazu finden sich z. B. in der Offiziellen Debian FAQ zu .deb Paketen.
** control enthält eine Kurzbeschreibung des Paketes sowie weitere Informationen wie dessen Abhängigkeiten.
** md5sums enthält MD5-Prüfsummen aller im Paket enthaltenen Dateien, um Verfälschungen erkennen zu können bzw. die automatische Aktualisierung von Konfigurationsdateien (sog. conffiles) zu ermöglichen.
** conffiles listet die Dateien des Paketes auf, die als Konfigurationsdateien behandelt werden sollen. Konfigurationsdateien werden bei einem Update nicht überschrieben und nur bei einer kompletten Entfernung (Purge) des Pakets entfernt.
** preinst, postinst, prerm, postrm sind optionale Skripte, die vor oder nach dem Installieren, Aktualisieren oder Entfernen des Pakets ausgeführt werden. Sie werden mit den Rechten des Nutzers root ausgeführt.
** config ist ein optionales Skript, das den debconf genannten Konfigurationsmechanismus unterstützt. Die Datei templates enthält dazu notwendige Metainformationen für die debconf-Datenbank.
** shlibs listet die eventuell bereitgestellten Programmbibliotheken auf.
* data.* Ist ein mit gzip, bzip, lzma oder xz komprimiertes Archiv und enthält die eigentlichen Programmdaten mit relativen, beim Stammverzeichnis beginnenden Pfaden.

## Quellpakete

Quelltextpakete enthalten unkompilierte Programmdaten, den Quelltext der Programme. Sie bestehen aus einem Archiv mit den originären Quelltexten (Endung .orig.tar.gz), einer (komprimierten) diff-Datei mit Debian-spezifischen Modifikationen (.diff.gz) und einer Beschreibungsdatei (.dsc).
Quellpakete können nicht direkt installiert werden. Es müssen zuerst die Quelltexte kompiliert und dann eventuell ein installierbares Binärpaket daraus erstellt werden.

## Vollständiger Dateiname

Der Dateiname eines binären Debian-Paketes folgt einem festgelegten Schema: Dem Namen der Software (eventuell mit Präfixen wie z. B. lib für Programmbibliotheken oder Postfixen wie z. B. -doc für Dokumentationen oder -dev für entwicklungsspezifische Pakete), einem Unterstrich, der Versionsnummer der Software, eventuell einem Bindestrich und einer Debian-internen Revisionsnummer, dann einem weiteren Unterstrich, einem Kürzel für die Prozessorarchitektur (all für plattformunabhängige) und der Dateinamenserweiterung .deb (z. B. beispiel_10.2-5_powerpc.deb).

## Sonstiges

Debian-Pakete sind nicht mit RPM-Paketen kompatibel, können aber mit Hilfe des Programms alien innerhalb einer Architektur (z. B. PowerPC oder x86-basierte Systeme) konvertiert werden. Einige Dateimanager, wie z. B. Konqueror, Midnight Commander oder 7-Zip, erlauben das Anzeigen des Paketinhalts und der Kontrollinformation, ohne das Paket zu installieren.

## Paketerstellung

Mittels debhelper können Quellpakete in Binärpakete übersetzt werden.

## Verbreitung

Aufgrund der einfachen Portierbarkeit von APT und dpkg hat das Debian-Paketformat auch in vielen anderen Betriebssystemen Einzug gehalten.
* BSD – in Distributionen wie Debian GNU/kFreeBSD.
* GNU Hurd – Debian GNU/HURD.
* GNU/Linux – diverse Distributionen, einschließlich Debian und Ubuntu.
* macOS – mittels Fink, auch für iPhones, iPods und iPads mit Jailbreak.
* OpenSolaris – Nexenta OS.