Ich habe hier keine Lösung für mich gesehen, ich habe einige Deb-Pakete mit dpkg installiert und einige der Dinge, nach denen ich besonders gesucht habe, fehlten.
Ein ziemlich langer Einzeiler, der sich aber bequem kopieren und einfügen lässt, wäre:
export DPKG_INITIAL=$(mktemp) DPKG_INSTALLED=$(mktemp) DPKG_CUSTOM=$(mktemp) DPKG_DEPS=$(mktemp) zgrep -E '^Package' /var/log/installer/initial-status.gz | awk '{ print $2 }' > $DPKG_INITIAL ; awk '$3 !~ /install|remove|purge/ { next } { gsub(/remove|purge/, "uninstall", $3) ; gsub(/:.+/, "", $4) ; a[$4]=$3 } END { for (p in a) { if (a[p] == "install") { print p } } }' /var/log/dpkg.log | sort -u > $DPKG_INSTALLED ; comm -23 installed initial > $DPKG_CUSTOM ; function rdep() { apt-cache rdepends $1 | tail -n +3 | sed -e 's/^ //' -e '/^ /d' | cut -d':' -f1 | sort -u; } ; echo "$(for i in $(cat custom) ; do rdep $i ; done)" | sort -u > $DPKG_DEPS ; comm -23 custom deps > my-packages ; rm $DPKG_INITIAL $DPKG_INSTALLED $DPKG_CUSTOM $DPKG_DEPS
Der obige Befehl speichert eine Liste von Paketen in einer Datei in Ihrem aktuellen Arbeitsverzeichnis mit dem Namen my-packages.
Erläuterung
Ich habe zuerst eine Liste von Paketen erstellt, die die Grundlinie der während der Installation ausgewählten Pakete bilden.
zgrep -E '^Package' /var/log/installer/initial-status.gz | awk '{ print $2 }' > initial
Gefolgt von einer langen Liste von Elementen, die im Allgemeinen installiert sind.
awk '$3 !~ /install|remove|purge/ { next } { gsub(/remove|purge/, "uninstall", $3) ; gsub(/:.+/, "", $4) ; a[$4]=$3 } END { for (p in a) { if (a[p] == "install") { print p } } }' /var/log/dpkg.log | sort -u > installed
Ich verglich dann die zwei Akten initialund installedlistete nur die Einzelteile auf, die zum installierten einzigartig sind.
comm -23 installed initial > custom
Von dort wollte ich die Abhängigkeiten herausfiltern, hier kann es vorkommen, dass bei dieser Methode einige gewünschte Pakete fehlen, es sind keine Abhängigkeiten bekannt, die auch explizit installiert werden.
Ich habe eine schnelle Bash-Funktion geschrieben, um diese Schritte bei der Verarbeitung dieser Elemente zu verkürzen.
function rdep() { apt-cache rdepends $1 | tail -n +3 | sed -e 's/^ //' -e '/^ /d' | cut -d':' -f1 | sort -u; }
Danach habe ich jede Zeile aus meiner Datei customin diese Funktion mit übergeben xargs.
echo "$(for i in $(cat custom) ; do rdep $i ; done)" | sort -u > deps
Sobald ich die lange Liste aller möglichen Abhängigkeiten hatte (nicht sicher bei jeder möglichen Anweisung), bekam ich wieder die Zeilen, die für eine einzelne Datei eindeutig waren.
comm -23 custom deps > manual
Und meine fertige Paketliste ist jetzt in einer Datei mit dem Namen manualverfügbar, die ich überprüfen kann.
somethingund nichtsomething-commonso gut.