Wie kann man über die Befehlszeile feststellen, ob ein Paket ein Metapaket ist?

14

Wie kann ich über die Befehlszeile feststellen, ob ein Paket ein Metapaket ist, möglicherweise über apt-get, aptitude oder apt-cache?

Ich habe versucht:

apt-cache show texlive-full
apt-cache showpkg texlive-full

Ich kann dieses Paket nur durch Lesen des Felds "en-description" als Meta identifizieren.

Gibt es einen automatischeren Weg, der mir eine Ja / Nein-Antwort gibt, oder zumindest ein Feld wie "en-description", das diesem Thema gewidmet ist?

Ciro Santilli ist ein Schauspieler
quelle
1
Abgesehen von der Tatsache, dass diese Frage und die Antworten sehr interessant sind, warum möchten Sie das wissen?
Joe
1
Ich habe Sachen mit apt-get installiert und festgestellt, dass bei der Installation eines Metapakets (texlive-full) die gewünschten Abhängigkeiten installiert werden. Bei der Deinstallation des Metapakets bleiben die Abhängigkeiten jedoch erhalten (apt-get install texlive-full). apt-get purge texlive-full; apt-get autoremove). Dann fand ich , dass dies der Fall ist , nur für Metapakete brainstorm.ubuntu.com/idea/17785 . aptitude hingegen entfernt die unnötigen Abhängigkeiten aus einem Metapaket.
Ciro Santilli

Antworten:

7

Es gibt keine formale Definition eines Metapakets. Die informelle Definition ist, dass ein Metapaket nur für seine Abhängigkeiten installiert werden soll und keine eigene nützliche Datei enthält.

Sie können ein Metapaket als Paket definieren, das keine Datei enthält. Es gibt keine Möglichkeit, dies aus der Paketdatenbank zu ermitteln. Sie können die Dateidatenbank verwenden und überprüfen, ob das Paket nur Verzeichnisse enthält (viele solcher Pakete enthalten einige Verzeichnisse). Tatsächlich enthalten die meisten Metapakete einige Dateien in /usr/share/doc/<package name>: eine copyrightDatei, ein Änderungsprotokoll, manchmal einige weitere. Hier ist eine Annäherung, die ein Metapaket so definiert, dass es nur Dateien in /usr/share/doc/<some directory>(nicht in Unterverzeichnissen davon) und den führenden Verzeichnissen enthält:

if ! apt-file -F list $package | grep -qvE '^/(usr(/share(/doc(/[^/]*(/[^/]*)?)?)?)?)?$'; then
  echo "$package looks like a metapackage"
fi

Ein anderer Ansatz besteht darin, nach einem Paket-Tag mit zu suchen debtags. Es gibt mehrere Tags, die häufig für Metapakete verwendet werden.

debtags tag ls $package | grep -x -e 'role::metapackage' -e 'role::dummy' -e 'special::meta'

Ein anderer Ansatz besteht darin, nach Paketen mit einer geringen Größe zu suchen. Jedes Verzeichnis hat eine Größe von 4 kB. Planen Sie daher bei der Auswahl eines Schwellenwerts entsprechend (auch dies ist eine Annäherung).

aptitude -F '%I %p' search "~n^$package\$"

Nach dem Nachdenken frage ich mich, ob Sie eher virtuelle Pakete als Metapakete meinen. Virtuelle Pakete sind eigentlich keine Pakete, sondern in Provides:Feldern verwendete Paketnamen . Sie können sie mit auflisten aptitude search '~v'. Bei der apt-cache showAusführung auf einem wird angezeigt, dass "Versionen aus dem Paket" zcav "nicht ausgewählt werden können, da es sich um ein rein virtuelles Paket handelt". Running aptitude showlistet die Pakete auf, die es bereitstellen. Eine bequeme Möglichkeit, virtuelle Pakete apt-cacheanzuzeigen, besteht darin, eine Zeile für ein nicht virtuelles Paket und möglicherweise mehrere Zeilen (eine für jeden Anbieter) für ein virtuelles Paket zu drucken. Sie können feststellen, ob das Paket virtuell ist, selbst wenn es einen einzelnen Anbieter gibt weil der Name des Anbieters unterschiedlich ist.

apt-cache -n search "^$package\$"
Gilles 'SO - hör auf böse zu sein'
quelle
Danke für diese Methoden: Ich wusste nichts über Schulden! Außerdem habe ich irgendwo gelesen, dass es bei der Installation eines Metapakets mit apt-get genau so ist, als hätten Sie jede Abhängigkeit einzeln von Hand installiert, was bedeutet, dass beim Entfernen des ursprünglichen Pakets die Abhängigkeiten nicht sofort entfernt werden, während bei normalen Paketen das Entfernen von Abhängigkeiten erfolgt Entfernen Sie die installierten Abhängigkeiten. Ist das wahr? Wenn ja, wie kann apt-get den Unterschied feststellen? Dies könnte auch genutzt werden , ... (scheint auch , dass aptitude kümmert sich nicht darum , ob seine meta oder nicht, ist das wahr?)
Ciro Santilli新疆改造中心法轮功六四事件
@cirosantilli Die Funktion zum automatischen Entfernen von Abhängigkeiten hat nichts mit Metapaketen zu tun. Dies liegt daran, dass ein Paket als automatisch installiert markiert wird, wenn Sie es nicht explizit anfordern. Ein Paket, das als automatisch installiert markiert ist, wird entfernt, wenn kein davon abhängiges Paket installiert ist. Siehe apt-get autoremove, aptitude (un)markautoder MBefehl in der interaktiven Benutzeroberfläche von aptitude.
Gilles 'SO - hör auf böse zu sein'
@cirosantilli Nach dem Nachdenken frage ich mich, ob Sie virtuelle Pakete und keine Metapakete im Sinn hatten. Siehe meine aktualisierte Antwort.
Gilles 'SO - hör auf böse zu sein'
Ich wusste wirklich nichts über virtuelle Pakete, aber ich denke, texlive-full ist nicht virtuell, da apt-cache show texlive-full die üblichen Ergebnisse zeigt. Trotzdem, nachdem ich tat apt-get install texlive-full, apt-get purge texlive-full; apt-get autoremovenicht entfernen Sie alle installierten Abhängigkeiten. Ich habe irgendwo gelesen, dass dies daran liegt, dass texlive-full ein Metapaket war und dass dies normales Verhalten eines Metapakets war, aber vielleicht war dies falsch. aptitude hingegen schien die automatisch installierten Abhängigkeiten in Ordnung zu bringen.
Ciro Santilli
2

Sie könnten versuchen, einzutreten

apt-cache search 'metapackage | meta-package'

das wird dir eine lange Liste geben und dann grepzum Beispiel alle wissenschaftsbezogenen Metapakete mit anzeigen

apt-cache search 'metapackage | meta-package' | grep -i science

Dies wird eine lange Liste zurückgeben (ich habe es hier gekürzt )

science-astronomy - Debian Science Astronomy packages
science-astronomy-dev - Debian Science Astronomy-dev packages
science-biology - Debian Science Biology packages
science-chemistry - Debian Science Chemistry packages
science-dataacquisition - Debian Science data acquisition packages
science-dataacquisition-dev - Debian Science data acquisition development packages
science-distributedcomputing - Debian Science Distributed Computing packages
science-electronics - Debian Science Electronics packages
science-electrophysiology - Debian Science packages for Electrophysiology
science-engineering - Debian Science Engineering packages
science-engineering-dev - Debian Science Engineering-dev packages
science-geography - Debian Science Geography packages
science-highenergy-physics - Debian Science High Energy Physics packages

Sie können eine beliebige Anzahl von Alternativen für die Wissenschaft verwenden, KDEum beispielsweise alle KDEMetapakete zu finden .

Dies ist wahrscheinlich das Beste, was Sie tun können apt-cache, aber es sollte die meisten Metapakete, die Sie finden möchten, schnell finden. Wenn nicht genau das gefunden wird, wonach Sie gesucht haben, ist es am einfachsten, im Abschnitt Metapaket in zu suchen Synaptic.


quelle