Finden Sie ein minimales Äquivalent der aktuell installierten Pakete

7

Ich habe ein Tool verwendet, das die minimale Menge an Paketen berechnet, die Sie installieren können, um die aktuelle Menge an Paketen zu erhalten, die Sie haben. Dies unterscheidet sich von der Angabe Ihrer Auswahl. Es findet buchstäblich die kürzeste Liste von Paketen, die Ihnen durch Abhängigkeiten das geben, was Sie aktuell haben.

Ich habe vergessen, wo ich dieses Tool finden kann. Wie heißt es?

Ein Student an einer Universität
quelle

Antworten:

3

aptitudekann Sie mit seiner Suchfunktion den größten Teil des Weges erreichen. So finden Sie alles installiert, was nicht nur eine automatische Abhängigkeit war:

aptitude search -F "%p" "?installed ?not(?automatic)"

Dies ist nicht optimal. Einige davon können möglicherweise entfernt werden, aber ich kenne keinen einfachen Weg, um das herauszufinden. Vielleicht liegt die Antwort in man aptitude.

Beim zweiten Gedanken könnten Sie mit dieser Liste eine Schleife durchlaufen und die abhängigen Pakete (nicht Abhängigkeiten) für jedes einzelne finden. Wenn sich eines davon in der Hauptliste befindet, entfernen Sie das aktuelle Paket aus der Liste ... aber erst, nachdem Sie die gesamte Liste analysiert haben, oder Sie werden Zwischenprodukte in einem Dep-Baum der Stufe 3+ verpassen.

Sie finden abhängige Personen mit einer Abfrage wie dieser:

aptitude search '~i~Dpackage'

Ich würde versuchen, das Skript zu schreiben, aber ich schreibe es auf einer winzigen Telefontastatur. Auch ich habe Grenzen.

Bearbeiten: Nachdem ich fünf Minuten lang versucht hatte zu schlafen, fing ich an, mich darauf einzulassen. so etwas sollte den Job machen:

orig=$(aptitude search -F "%p" "?installed ?not(?automatic)")
newlist="";
for p in $orig; do
    depended=0;
    for dependant in `aptitude search -F "%p" "~i~D$p"`; do
        if [[ $orig == "* $dependant *" ]]; then
            depended=1;
        fi;
    done;
    if [[ $depended == 0 ]]; then
        newlist="$newlist $p";
    fi;
done;
echo $newlist

Beachten Sie, dass die Ausführung sehr lange dauert und möglicherweise zu intensiv ist (z. B. werden manuell entfernte Elemente entfernt, die manuell installiert werden sollen, wenn sie von etwas anderem in der $ orig-Liste abhängen, das Sie verwenden vielleicht später installiert).

Oli
quelle
Warte was? Wenn Sie dies ausführen, werden alle von mir installierten Pakete entfernt.
Oxwivi
Nein. Die zweite Route entfernt nicht automatische Elemente aus der ausgegebenen Liste, wenn etwas anderes in der Liste davon abhängt. Es könnte also nicht genau sein. Es wird eigentlich nichts aus dem System entfernt.
Oli
Oh, ich verstehe. Ich möchte herausfinden, welches Paket ich am wenigsten für alle Pakete installieren muss, die ich für minimales Ubuntu erhalten habe. Werden Autopakete aufgelistet? Und ich möchte auch nicht die empfohlenen Abhängigkeiten meiner Pakete.
Oxwivi
@Toki Das ist das Ziel des Skripts des zweiten Teils ... Es zielt darauf ab, alles zu verbergen, was von irgendetwas anderem in der Liste abhängt. Aber wie gesagt, es ist sehr langsam (weil es die Eignung für jede Abhängigkeit beeinträchtigt). Im Zweifelsfall erledigt der erste die Arbeit und erledigt sie schnell.
Oli
2

Ich habe dazu ein kleines Python-Skript geschrieben, das hier als Kernstück veröffentlicht wurde .

Sie geben ihm eine Reihe von Paketnamen in der Befehlszeile, und es sollte Ihnen eine kleinere, minimale Menge von Paketen geben, die alle anderen, die Sie als Argumente angegeben haben, implizieren. Hier x11-proto-fixes-devwird impliziert (eine Abhängigkeit von) durch libgtk2.0-dev:

fuwaad:~$ python mindeps.py x11proto-fixes-dev libgtk2.0-dev
libgtk2.0-dev
Francois G.
quelle
1

Ich habe versucht, Antworten auf diese und zwei ähnliche Fragen auf einem System zu finden, das ich seit Jahren verwende, und die kürzeste Liste, die ich bekommen konnte, waren 1338 Pakete, von denen die meisten offensichtlich Abhängigkeiten oder Aktienpakete waren.

Bei Unix / Linux Stack Exchange habe ich jedoch diese Antwort gefunden , die die Liste der Standardpakete für Ihre Installation aus dem Ubuntu-Spiegel abruft und herausfiltert. Das hat meine Liste auf 404 Pakete reduziert, was für mich vernünftig aussieht.

Dirk Bergstrom
quelle