Meta-Paket
Review: Dieser Artikel ist für das Review freigegeben.
|
Ein Meta-Paket vereinfacht die Installation einer komplexen Umgebung, wie beispielsweise einer Desktopumgebung, durch den Nutzer des Systems. Dieser muss im Paketmanager seiner Wahl zur Installation dieser Umgebung so nicht eine Reihe von Paketen angeben, sondern kann sich auf die Angabe des entsprechenden Meta-Paketes beschränken. Dieser Vorteil führt oftmals allerdings zu "apt will das halbe System entfernen"-Problemen und Unsicherheiten bei der Deinstallation von Paketen von mit der Paketverwaltung unerfahrenere Nutzer. Deshalb wird im Folgenden beschrieben was Meta-Pakete sind und wie sich diese, an einem Beispiel, ordnungsgemäß verwenden lassen um die angesprochene Problematik zu vermeiden.
Begriffsdefinition
Ein Meta-Paket stellt selbst keine Programme zur Verfügung sondern definiert Abhängigkeiten, die zur Installation eines, meist umfangreicheren Programmes (etwa einer Desktop-Umgebung) notwendig sind. Debian stellt eine Reihe von Meta-Paketen zur Verfügung, um die Installation von Software zu vereinfachen. Eine Liste von verfügbaren Meta-Paketen lässt sich mit dem Programm debtags generieren:
root@debian:~# debtags search role::metapackage
Problematik
Da Meta-Pakete keine eigenen Funktionen zur Verfügung stellen, beschränkt sich die Interaktion von Nutzern mit diesen auf die Installation oder Deinstallation von Paketen. Die Installation des Meta-Paketes gnustep unterscheidet sich nicht von der Installation anderer Pakete:
root@debian:~# apt-get install gnustep
Das Meta-Paket besitzt Abhängigkeiten zu einer Reihe von Anwendungen und auch den wmaker, um eine fast vollständige GNUstep-Umgebung zu installieren. Der Nutzer zieht aus dem Meta-Paket den Vorteil, dass er nicht erst die einzelnen GNUstep-Komponenten ermitteln muss um eine GNUstep-Umgebung installieren zu können. Ebenso wie Programme mittels eines Meta-Paketes komplett installiert werden können, können sie auf die gleiche Weise auch komplett wieder de-installiert werden. Die bereits angesprochene Problematik tritt auf wenn der Nutzer, aus verschiedenen Gründen, ein Paket von dem das Meta-Paket abhängt deinstallieren möchte. Denn dann sollen durch den Paketmanager auch andere Pakete deinstalliert werden, die der Nutzer gegebenfalls weiterhin verwenden möchte. Der folgende Terminaloutput zeigt, dass die Deinstallation von terminal.app sowohl das Meta-Paket gnustep entfernt, als auch eine Reihe von weiteren Paketen als nicht länger notwendig erklärt:
root@debian:~# root@jessie:/home/linux# apt-get purge terminal.app
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
affiche.app charmap.app charmap.app-common cynthiune.app dictionaryreader.app edenmath.app gnustep-icons gworkspace.app helpviewer.app libavifile-0.7-common libavifile-0.7c2 libid3tag0 libpreferencepanes1 libtagc0 preview.app systempreferences.app textedit.app wrapperfactory.app zipper.app
Use 'apt-get autoremove' to remove them.
The following packages will be REMOVED:
gnustep* terminal.app*
0 upgraded, 0 newly installed, 2 to remove and 4 not upgraded.
After this operation, 385 kB disk space will be freed.
Do you want to continue? [Y/n]
Die Pakete die nicht länger notwendig sind, können weiterhin verwendet werden, werden jedoch bei einem Bereinigen des Systems durch den Paketmanager entfernt. Das erzielte Ergebnis unterscheidet sich von dem was der Nutzer angestrebt hat. Dieser wollte nur das Paket terminal.app entfernen und hätte auch noch die Deinstallation des Meta-Paketes gnustep akzeptiert, da es ihm aufgrund des Mangels an Funktionalität keinen Nutzen erbringt. Die Ursache dieses Problems wird im folgenden beschrieben.
Ursache
Die Ursache des Problems ergibt sich aus den Informationen, die der Paketmanager zur Verfügung hat, um die Verwaltung der Pakete des Systems sicherzustellen. Diese Informationen beschränken sich auf die Art der Abhängigkeit eines Paketes zu einem anderen und um die Art wie das Paket installiert wurde. Die folgende Tabelle zeigt die unterschiedlichen Abhängigkeiten, die Pakete untereinander haben können.
Abhängigkeitsart | Bedeutung |
---|---|
Pre-Depends | Diese Abhängigkeitsart ist mit der Abhängigkeitsart Depends gleichzusetzen. Die beiden Abhängigkeitsarten unterscheiden sich darin das Pre-Depends dpkg dazu zwinkt die Installation des Pre-Depends vor der Installation des Paketes abzuschließen welches die Abhängigkeit deklariert hat. Diese Form der Abhängigkeit wird nur in begründeten Ausnahmefällen verwendet. |
Depends | Eine Abhängigkeit wird als Depends bezeichnet, wenn ein signifikanter Bestandteil der Funktionalität des zu installierenden Paketes von der Verfügbarkeit eines anderen Paketes abhängt. |
Recommends | Recommends ist eine Abhängigkeit von einem Paket zu einem anderen, wenn diese in der Regel zusammen installiert werden. |
Suggests | Als Suggests werden Abhängigkeiten bezeichnet die suggerieren, dass das Paket auch ohne das suggested Paket installiert werden kann. Die Installation des suggested Paketes führt allerdings zu einem Mehrwert. |
Enhances | Enhances bezeichnet, dass das zu installierende Paket einen Mehrwert mit einem anderen Paket erbringt. Diese Abhängigkeitsart entspricht der Abhängigkeitsart Suggests mit dem Unterschied, dass das suggested Paket diese Information besitzt. |
Die in der Tabelle aufgeführten Abhängigkeiten sind in absteigender Stärke sortiert. Bei der Installation eines Paketes, werden zur Sicherstellung eines sauberen Paketstandes durch den Paketmanager zusätzlich zum angegebenen Paket noch die Paket die als Pre-Depends oder Depends Abhängigkeit angegeben sind installiert. Die Pakete welche als Recommends oder Suggests angegeben sind, müssen nicht installiert werden. Wie bereits geschrieben, hat auch die Art wie das Paket installiert wird Einfluss auf die angesprochene Problematik. Die möglichen Installationsarten werden in der folgende Tabelle aufgeführt.
Installationsart | Bedeutung |
---|---|
auto | Ein Paket wird als auto installiert markiert, wenn es zur Erfüllung von Abhängigkeiten installiert wurden ist. |
manual | Ein Paket wird als manual markiert, wenn es vom Nutzer des Systems installiert worden ist. |
Das Absenden von folgenden Befehl führt demnach dazu, dass das Paket (kein Meta-Paket) alpine als manual und das Paket mlock als auto installiert markiert wird.
root@debian:~# apt-get --no-install-recommends install alpine
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
mlock
Recommended packages:
alpine-doc
The following NEW packages will be installed:
alpine mlock
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,772 kB of archives.
After this operation, 7,291 kB of additional disk space will be used.
Do you want to continue? [Y/n]
Zusammengefasst ist die Ursache der Problematik bei der Deinstallation eines Paketes in diesem zusehen wenn es von einem Meta-Paket als Pre-Depends- oder Depends-Abhängigkeit benannt ist. Des Weiteren ist die Ursache in den Paketen die nicht deinstalliert werden sollen zusehen wenn diese als auto installiert markiert und wenn die Pakete von dem Meta-Paket als Pre-Depends- oder Depends-Abhängigkeit benannt sind.
Lösung
Aus der zuvor beschriebenen Ursache des Problems lassen sich zwei mögliche Lösungen ableiten. Zum einen könnten die Pakete als manual installiert markiert oder zum anderen die Abhängigkeiten durch andere Pakete erfüllt werden. Die Markierung eines Paketes als manual installiert kann, wenn es bereits installiert ist, über das Programm apt-mark vorgenommen werden. Bezogen auf das bereits aufgeführt gnustep Beispiel müsste, zur Erreichung des angestrebten Ziels, folgender Befehl genutzt werden:
root@debian:~# apt-mark manual affiche.app charmap.app charmap.app-common cynthiune.app dictionaryreader.app edenmath.app gnustep-icons gworkspace.app helpviewer.app libavifile-0.7-common libavifile-0.7c2 libid3tag0 libpreferencepanes1 libtagc0 preview.app systempreferences.app textedit.app wrapperfactory.app zipper.app
Das Deinstallieren des Programmes terminal.app führt anschließend zu folgendem Ergebnis:
root@debian:~# apt-get purge terminal.app
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
gnustep* terminal.app*
0 upgraded, 0 newly installed, 2 to remove and 5 not upgraded.
After this operation, 385 kB disk space will be freed.
Do you want to continue? [Y/n]
Je nach Anzahl der Pakete ist dies ein gangbarer Lösungsweg, der allerdings auch einen Nachteil mit sich bringt. Sollte der Nutzer alle Pakete, die über das Meta-Paket gnustep installiert worden sind, deinstallieren wollen, dann muss er dem Paketmanager jedes Einzelne benennen. Wenn die zu deinstallierenden Pakete untereinander Pre-Depends- oder Depends-Abhängigkeit besitzen verringert sich die zu benennende Anzahl, doch je nach Wahrscheinlichkeit des Deinstallationswunsches ist vielleicht die zweite Lösungsmöglichkeit die bessere. Hierfür sollte zunächst geprüft werden ob es vielleicht ein anderes, kleineres Meta-Paket gibt welches die Abhängigkeiten erfüllen kann. Dies ist bei Meta-Paketen wie gnustep eher unwahrscheinlich, aber den den Meta-Paketen für die Desktopanwendungen eher die Regel. Für die Installation der Desktopumgebung KDE gibt es beispielsweise unter anderem die Meta-Pakete kde-full, kde-standard oder kde-plasma-desktop. Die Umsetzung dieser Lösung sollte in folgender Reihenfolge erfolgen:
- Deinstallation der nicht mehr gewünschten Anwendung simulieren, um zu sehen welche Pakete betroffen sind.
- Geeignetes kleineres Meta-Paket finden welches keine Pre-Depends- oder Depends-Abhängigkeit zur zu deinstallierenden Anwendung besitzt.
- Kleineres Meta-Paket installieren oder als manual installiert markieren.
- Erneute Simulation der Deinstallation der nicht mehr benötigten Anwendung.
- Weiterhin gewünschte Pakete als manual installiert markieren.
- Deinstallation der nicht mehr benötigten Anwendung.
Wenn es keine geeignetes kleineres Meta-Paket gibt, besteht auch die Möglichkeit ein eigenes Meta-Paket zu erstellen. Dieses entspricht dem Meta-Paket welches entfernt wird, mit dem Unterschied, dass es keine Pre-Depends- oder Depends-Abhängigkeit zu der nicht mehr gewünschten Anwendung besitzt. Eine Erläuterung zur Erstellung eines Meta-Paketes ist im Administrationshandbuch enthalten. Eine Möglichkeit, die bis jetzt noch nicht erwähnt wurde, weil sie das Problem nicht löst sondern lediglich umgeht, ist es, Meta-Pakete gar nicht zu installieren. Bei dieser Herangehensweise sollten die Meta-Pakete nur als Informationsquelle benutzt werden um die gewünschten Pakete manuell zu installieren.
Quellenverzeichnis
Manpages
Wikiseiten
Weblinks
- https://wiki.debian.org/metapackage (Englisch)
- Meta-Paket HowTo (Englisch)
- Paketabhängigkeiten (Englisch)
- Erstellung eines Meta-Paketes