// Datei: ./konzepte/software-in-paketen-organisieren/softwarestapel-und-ebenen.adoc

// Baustelle: Fertig
// Axel: Graphen-frisch-machen

[[softwarestapel-und-ebenen]]

=== Softwarestapel und Ebenen ===

==== Ebenen ====

// Stichworte für den Index
(((Softwarestapel, Ebenenmodell)))
Die Paketverwaltung kann man leicht in zwei Ebenen aufteilen. Dabei wird
jede Ebene durch eine Reihe von Programmen und Bibliotheken
repräsentiert (siehe <<fig.werkzeugebenen>>).

//image::konzepte/software-in-paketen-organisieren/werkzeugebenen.png[]
.Schichtenmodell zur `deb`-basierten Paketverwaltung
image::konzepte/software-in-paketen-organisieren/werkzeugebenen-2.png[id="fig.werkzeugebenen", width="50%"]

==== Untere Ebene ====

// Stichworte für den Index
(((dpkg, -c)))
(((dpkg, --contents)))
(((dpkg, -i)))
(((dpkg, --install)))
(((dpkg, -l)))
(((dpkg, --load-avail)))
(((dpkg, -L)))
(((dpkg, --listfiles)))
(((dpkg, -r)))
(((dpkg, --remove)))
(((dpkg, -s)))
(((dpkg, --status)))
(((dpkg, -S)))
(((dpkg, --search)))
(((dpkg-deb)))
(((dpkg-query)))
(((Softwarestapel, dpkg)))
(((Softwarestapel, untere Ebene)))
Die Basis bildet `dpkg`. Dessen Aufgabe ist es a) ein bereits lokal
vorliegendes `deb`-Paket auszupacken und auf dem System einzuspielen und
b) die Inhalte eines bereits installierten `deb`-Pakets wieder aus dem
System zu entfernen. Ersteres entspricht dabei dem Kommandozeilenaufruf
`dpkg -i` 'Paketdatei', das zweite hingegen `dpkg -r` 'Paketdatei'
(siehe <<pakete-installieren>> und <<pakete-deinstallieren>>).

Für Statusabfragen zu einem einzelnen Paket stützt sich `dpkg` auf die
beiden Hilfsprogramme `dpkg-deb` und `dpkg-query`. Dazu gehören bspw.
die Schalter `-c` und `-L` zum Anzeigen des Inhalts eines Pakets (siehe
<<paketinhalte-anzeigen-apt-file>>) sowie `-l` zur Auflistung der 
installierten Pakete (siehe <<liste-der-installierten-pakete-anzeigen-und-deuten>>), 
`-s` zum Erfragen des Paketstatus (siehe <<paketstatus-erfragen>>) und
`-S`, um das Paket zu finden, in dem eine bestimmte Datei vorkommt
(siehe <<paket-zu-datei-finden>>).

Mit `dpkg` können Sie Ihre Pakete verwalten und das System vollständig
pflegen. Jedoch müssen Sie sich dann aber selbst um alle
Komfortfunktionen kümmern. `dpkg` prüft nur, ob alle Abhängigkeiten zu
anderen Paketen erfüllt sind und beendet im Fehlerfall die Aktion. Es
nimmt Ihnen weder die automatische Auflösung von Paketabhängigkeiten,
noch die richtige Reihenfolge bei der Installation der Pakete ab. Diese
Mühe erleichtern Ihnen die Werkzeuge der oberen Ebene.

// Stichworte für den Index
(((emerge)))
(((equery)))
(((Pacman)))
(((rpm)))

[TIP] 
.Paketverwaltung bei anderen Linux-Distributionen
====
Das Analogon zu `dpkg` bei `rpm`-basierten Distributionen ist `rpm`, bei
Arch Linux ist es Pacman und bei Gentoo erreichen Sie die Funktionalität
durch die beiden Programme `emerge` und `equery`. Eine komplette
Übersicht zu den verschiedenen Programmen finden Sie einerseits in der
Pacman-Rosetta (siehe <<pacman-rosetta-beschreibung>>) sowie in unserer
Übersicht im Anhang des Buches (siehe
<<kommandos-zur-paketverwaltung-im-vergleich>>).
====

==== Obere Ebene ====

// Stichworte für den Index
(((Softwarestapel, APT)))
(((Softwarestapel, aptitude)))
(((Softwarestapel, Muon)))
(((Softwarestapel, obere Ebene)))
(((Softwarestapel, PackageKit)))
(((Softwarestapel, Synaptic)))
Bei `deb`-basierten Distributionen besteht die obere Ebene
typischerweise aus dem Werkzeug APT (siehe <<apt>>). Häufig ist
mindestens eines der weiteren Programme wie `aptitude` (siehe
<<aptitude>>), Synaptic (siehe <<gui-synaptic>>), Muon (siehe <<gui-muon>>) oder
auch PackageKit (siehe <<gui-packagekit>>) installiert. Die Auswahl
variiert und hängt von der von Ihnen gewählten Linux-Distribution und
ihren Vorlieben ab.

Alle diese Programme übernehmen die Aufgabe, Ihnen die Installation und
die Aktualisierung der einzelnen Programmpakete auf Ihrem System zu
vereinfachen und unter möglichst einer Benutzeroberfläche
zusammenzufassen. Konkret gehört dazu die Aktualisierung der Liste von
Paketen aus den Paketquellen, der Auflösung der Paketabhängigkeiten und
die Berechnung der Installationsreihenfolge der von Ihnen ausgewählten
Pakete.

// Stichworte für den Index
(((Softwarebibliotheken, libapt-inst)))
(((Softwarebibliotheken, libapt-pkg)))
Bei der Erfüllung ihrer Aufgaben stützen sich die Programme einerseits
auf die beiden Bibliotheken `libapt-inst` und `libapt-pkg` (siehe
<<apt-und-bibliotheken>>) und andererseits auf die Werkzeuge aus der
unteren Ebene, d.h. vor allem auf `dpkg`. Es übernimmt die eigentliche
Installation, Entfernung oder Aktualisierung (siehe untere Ebene).
Sichtbar wird dies insbesondere, wenn Sie ein Paket mit `apt-get` oder
`aptitude` installieren. Einen Teil der Ausgaben auf dem Terminal
steuern `dpkg` und die o.g. Bibliotheken bei.

==== Paketformate und -werkzeuge anderer Distributionen ====

// Stichworte für den Index
(((rpm)))
(((RPM)))
(((rpmdrake)))
(((urpmi)))
(((Yet another Setup Tool (YaST))))
(((Yellowdog Updater Modified (YUM))))
(((Zypper)))
Bei `rpm`-basierten Distributionen RedHat, Fedora und CentOS heißen die
Werkzeuge Yellowdog Updater Modified (YUM) <<YUM>>, bei SuSE und
openSUSE Zypper <<Zypper>> und Yet another Setup Tool (YaST). Mageia
Linux und Rosa Linux nutzen hingegen `urpmi` <<Mageia-urpmi>>.
`rpmdrake` <<rpmdrake>> setzt auf `urpmi` auf und ist das Pendant zum
graphischen Werkzeug Synaptic. Aufgrund der einfachen Benutzbarkeit wird
es häufig Einsteigern empfohlen.

==== Werkzeuge, die verschiedene Paketformate unterstützen ====

// Stichworte für den Index
(((Muon)))
(((PackageKit)))
(((SmartPM)))
(((urpmi)))
(((Yellowdog Updater Modified (YUM))))
Darüber hinaus gibt es Programme, die mit mehreren unterschiedlichen
Paketformaten umgehen können. Dazu zählen Muon (siehe <<gui-muon>>), der
Smart Package Manager (SmartPM) (siehe <<gui-smartpm>>) und PackageKit
(siehe <<gui-packagekit>>). Muon und SmartPM können die Paketformate
`deb`, `rpm` und `tar.gz` (Slackware) verarbeiten sowie die bereits oben
genannten Verwaltungen APT, YUM und `urpmi` ansprechen. Weitere
Informationen dazu finden Sie unter ``Frontends für das
Paketmanagement'' in <<frontends-fuer-das-paketmanagement>>.

// Datei (Ende): ./konzepte/software-in-paketen-organisieren/softwarestapel-und-ebenen.adoc
