Wie finde ich auf Gentoo eine Liste der Pakete, die nach einem bestimmten Datum installiert wurden?

7

Ich habe Gentoo VM, mit der ich verschiedene Puppenrezepte teste, und ich muss häufig Pakete entfernen, um den Ausgangszustand zu bereinigen. Ich könnte dies zwar von Hand tun, wenn nur wenige Pakete installiert sind (und Abhängigkeiten mit entfernen emerge -av --depclean), aber es gibt einige Rezepte, die die Installation einiger Dutzend Perl-Module beinhalten, die ich nach dem Testen reinigen muss. Ich denke darüber nach, sie in ein einzelnes virtuelles Ebuild zu packen, aber ich habe bereits ein Testsystem, das mit vielen installierten Paketen verschmutzt ist, und ich möchte vermeiden, sie einzeln zu überprüfen. Die Frage ist also, wie ich eine Liste der Pakete finde, die nach einem bestimmten Datum installiert wurden .

AlexD
quelle

Antworten:

11

Sie können app-portage/genlopdies verwenden.

genlop -l --date some_date

listet alle Pakete auf, die an oder nach diesem Datum zusammengeführt wurden. (Sie können auch ein Enddatum angeben.)

emerge --unmergeVersuchen Sie Folgendes, um eine Liste der Pakete zu erhalten, für die Folgendes geeignet ist:

genlop -ln --date 2011/10/02 | perl -ne '/>>> (.*)/ and print " =$1";'

Überprüfen Sie diese Liste noch einmal, bevor Sie sie tatsächlich entfernen. Das versehentliche Entfernen von Systempaketen macht keinen Spaß.

Eine andere Möglichkeit, eine Liste von Dingen zu erhalten, die nach einem bestimmten Datum zusammengeführt wurden, besteht darin, die BUILD_TIMEin der Portage-Datenbank gespeicherten Daten zu betrachten.

#!/bin/bash
stime=$(date -d "$1" +%s)

for dir in /var/db/pkg/*/* ; do
    if [ -f $dir/BUILD_TIME ] ; then
        btime=$(<$dir/BUILD_TIME)
        if [ $btime -ge $stime ] ; then
            package=$(basename $dir)
            category=$(basename $(dirname $dir))
            echo $category/$package
        fi
    fi
done

Rufen Sie dies mit einem Datum (dh ./script "2001/09/30 21:32") auf und Sie erhalten eine Liste der Pakete, die seit diesem Datum zusammengeführt wurden.

Portage speichert nicht, ob eine Zusammenführung eine Neuinstallation oder ein Update in seiner Datenbank war. Sie können diese Informationen aus der emerge.logDatei rekonstruieren, vorausgesetzt, Sie haben den gesamten Systemverlauf dort.

Eine einfachere Möglichkeit, all dies zu handhaben, wäre die Verwendung von Paketsätzen. Erstellen Sie jedes Mal ein Set, wenn Sie ein neues Rezept ausprobieren, und verwenden Sie dieses, um Ihre Aufräumarbeiten durchzuführen. (Depclean ist noch notwendig.)

# echo dev-perl/IO-AIO > /etc/portage/sets/my_set
# emerge -a @my_set

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N     ] dev-perl/IO-AIO-2.33 

Would you like to merge these packages? [Yes/No] y
>>> Recording @my_set in "world" favorites file...

...
>>> Installing (1 of 1) dev-perl/IO-AIO-2.33
>>> Auto-cleaning packages...

>>> No outdated packages were found on your system.

 * GNU info directory index is up-to-date.
# emerge -a --unmerge @my_set
 * This action can remove important packages! In order to be safer, use
 * `emerge -pv --depclean <atom>` to check for reverse dependencies before
 * removing packages.

>>> These are the packages that would be unmerged:

 dev-perl/IO-AIO
    selected: 2.33 
   protected: none 
     omitted: none 

All selected packages: dev-perl/IO-AIO-2.33

>>> 'Selected' packages are slated for removal.
>>> 'Protected' and 'omitted' packages will not be removed.

Would you like to unmerge these packages? [Yes/No] 
Matte
quelle
Danke für den Vorschlag, ich habe es versucht. Leider ist genlopdas Parsen von Portage-Protokolldateien erforderlich und spiegelt nicht den aktuellen Systemstatus wider, sodass die Ausgabe bereits entfernte Pakete enthält und einige Pakete mehrfach enthalten sind, da sie mehrfach installiert wurden, und es sind auch einige Pakete enthalten, die zufällig gleichzeitig aktualisiert wurden Zeitraum. Also muss ich immer noch alle Pakete einzeln überprüfen, was ich vermeiden möchte.
AlexD
Weitere Informationen und eine bessere Möglichkeit, mit Ihrem Szenario umzugehen, wurden hinzugefügt. HTH.
Mat
Dank ist der direkte Zugang zu /var/pkg/dbviel besser. Ich habe Ihr Skript so geändert, dass equery dependses Pakete überspringt, von denen alles abhängt, damit ich eine Liste der Pakete erhalten kann, die sicher entfernt werden können, ohne andere Pakete zu beschädigen. Sets ist eine interessante Funktion, konnte jedoch den Anwendungsfall nicht lösen, wenn das im Set enthaltene Paket auch von einem anderen Paket verwendet wird, das nicht im Set enthalten ist. Wenn Sie also das Set entfernen, wird dieses andere Paket beschädigt.
AlexD
Beim Auflösen eines Sets entfernt portage keine Pakete, es sei denn, sie sind speziell im Set aufgeführt. Im Allgemeinen sind Pakete, die in eine Gruppe aufgenommen werden, nicht von anderen Paketen in derselben Gruppe abhängig. Zum Beispiel www-clients/firefoxzieht eine Reihe von Abhängigkeiten ein, aber nur sehr wenige Pakete hängen davon ab. Wenn www-clients/firefoxund media-libs/mesaim selben Satz sind, können Sie einfach fortfahren und entfernen media-libs/mesa. Wenn Sie die eingestellte Mesa entfernen, wird sie nicht entfernt. Nur wenn Sie es ausführen emerge --depclean, wird es entfernt und nur, wenn keine andere Welt oder Set-Pakete es benötigen.
Hololeap
Wenn Sie Gentoo weiterhin verwenden, erfahren Sie, wann Sie das --oneshotFlag verwenden müssen, um zu vermeiden, dass Pakete in das "Welt" -Set eingefügt werden (was effektiv bedeutet, dass sie beim nächsten Ausführen entfernt werden emerge --depclean), wann Sie benutzerdefinierte Sets verwenden und wann Sie Ihre eigenen Ebuilds schreiben für inoffizielle Software (damit Sie alle Bibliotheksabhängigkeiten dauerhaft installieren können, ohne sie dem "Welt" -Satz hinzuzufügen).
Hololeap
0

Dieses Skript emerged-afterlistet alle Pakete auf, die nach einem bestimmten Datum veröffentlicht wurden

#!/bin/bash
etime=`date -d $1 +%s`
eix '-I*' --format '<installedversions:DATESORT>' | cut -f1,3 | cat <(cat -) <(echo $etime) | sort -nr | sed -e/$etime/q | sed -e'/[0-9]*\t*/s///'

Sie müssen eixinstalliert haben (wenn nicht dann emerge eix && eix-update) und dann zbash emerged-after 31/12/2016

Rattenfänger
quelle