(Diese Frage ist 10458 sehr ähnlich . Es wurde vorgeschlagen, dass Fedora und Ubuntu / Debian unterschiedlich genug sind, um unterschiedliche Antworten zu rechtfertigen.)
Da ich jedes Ubuntu-Setup verwende, installiere ich nach und nach eine Reihe von Paketen über die Grundinstallation hinaus. Wenn ich eine Neuinstallation vornehme oder einen neuen Computer installieren muss, möchte ich in der Regel diese spezifischen Pakete neu installieren und dies schnell erledigen, um mit minimalem Aufwand wieder arbeiten zu können. Soweit ich gesehen habe apt-get
, können mir alle Paketmanager ( aptitude
und synaptic
) mitteilen, welche Pakete installiert sind, und sie haben alle Protokolle (wenn auch für jedes Tool unterschiedliche, was ein Aufwand ist). Aber keiner von ihnen kann mir sagen, welche Pakete ich habeinstalliert, im Gegensatz zu ihren Abhängigkeiten oder System-Updates. Sogar die Protokolle sind schwierig, da ich nicht ganz sicher bin, was ich daraus extrahieren oder wie ich sie integrieren soll (im Fall der verschiedenen Tools der apt-Familie). Dies bedeutet, dass ich nicht sicher bin, wie ich diese Liste bei jeder Neuinstallation oder auch nur bei einem Backup neu erstellen soll.
Ich erwarte nicht unbedingt, dass eines der Tools dies für mich erledigt, aber wenn dies nicht der Fall ist, suche ich nach Problemumgehungen. Sogar nach Mustern zu suchen, nach guten Faustregeln oder einer klaren Vorstellung davon, was genau protokolliert wird, wäre nützlich. Vielleicht gibt es hier keine "beste Antwort", aber gute wären sehr hilfreich.
Die meisten der folgenden Antworten geben einen ungefähren Überblick über das, wonach ich suche, und sind bis zu einem gewissen Grad nützlich. Das gewählte ist dasjenige, das einer halbwegs automatischen Neuinstallation meiner Werkzeuge auf einem neuen System am nächsten kommt, selbst mit all seinen Vorbehalten.
Antworten:
Auf jedem Debian-basierten Rechner ist dies eine übliche Methode, um einen Paketsatz zu duplizieren. Auf der alten Maschine:
Kopieren Sie die Datei
my_favorite_packages
auf den neuen Computer (ein USB-Stick ist eine gute Option,scp
funktioniert aber auch einwandfrei). Führen Sie dann diese Sequenz aus (mit Root-Rechten):Dadurch erhalten Sie nicht nur die Pakete, die Sie installiert haben. Es werden auch ihre Abhängigkeiten usw. angezeigt. Wenn die Repositorys zwischen den beiden Computern unterschiedlich sind, sind alle Wetten deaktiviert.
Was die Protokolle angeht,
apt-get
behalten Sie ein Protokoll bei/var/log/apt/history.log
(danke an Tshepang für die Aktualisierung in einem Kommentar).dpkg
does (at/var/log/dpkg.log
), aber es ist bekanntermaßen schwer zu analysieren und kann nur mit root-Rechten gelesen werden.aptitude
hat eine an/var/log/aptitude
und Sie können mit regulären Benutzerrechten darin blättern.Soweit ich das beurteilen kann, haben Sie Recht, dass keines dieser Protokolle genau nachverfolgt, was Sie im Gegensatz zu automatisch installierten Abhängigkeiten installiert haben. Sie können diese Informationen jedoch aus einer
aptitude
Suche abrufen. Suchen Sie nach allen installierten Paketen, die ebenfalls automatisch installiert wurden:Wenn Sie nur die von Ihnen installierten (nicht die automatischen Abhängigkeiten) möchten , negieren Sie Folgendes
~M
:Wenn Sie dies so formatieren möchten, dass Sie nur die Namen der Pakete und das Wort "install" haben,
aptitude
können Sie dies auch tun. Auf diese Weise erhalten Sie eine Liste, an die Sie füttern könnendpkg --get-selections
:(Ich habe nichts auf RedHat- oder RedHat-basierten Systemen. Entschuldigung. Es gibt wirklich keine Antwort für Linux per se, da die Paketverwaltung einen großen Teil dessen ausmacht, was verschiedene Distributionen unterscheidet .)
quelle
apt-get
,synaptic
undaptitude
(soweit ich gesehen habe). Dies ist seit Anfang 2010.dpkg.log
Aussagen scheinen in Ubuntu 14.04 nicht wahr zu sein, da jeder Benutzer meine Auswahl leicht treffen kann, nicht trivial, aber nicht zu schwierig.awk '$3 != "install" { next } ; { gsub(/:.+/, "", $4) ; print $4 }' /var/log/dpkg.log | sort | uniq
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
tut.Verwenden Sie
dpkg -l '*' > jaunty.original
alle installierten Pakete auf einem frisch installierten System remeber.Nachdem Sie alle Ihre zusätzlichen Pakete installiert haben, tun
dpkg -l '*' > mysystem.2009017
.Die zusätzlichen Pakete sind nur der Unterschied:
diff jaunty.original mysystem.2009017
quelle
Aptitude kann das eigentlich ganz gut. Aptitude weiß, wann etwas von Hand oder in Abhängigkeit installiert wurde, und Sie können es anweisen, Dinge zu entfernen, die nicht mehr benötigt werden und nur installiert wurden, weil etwas anderes davon abhing, und Ihr System so klein wie möglich zu halten.
Es gibt eine Handvoll Pakete, die eine Ubuntu-Installation ausmachen, Ubuntu-Minimal, Ubuntu-Desktop, Ubuntu-Server und so weiter. Wenn Sie Aptitude anweisen, diese als manuell installiert zu markieren und alles andere zu entfernen, erhalten Sie die geringstmögliche Anzahl an Paketen.
Ich erkläre , wie das alles in meinem Blog in zwei Beiträgen zu tun: ein Debian GNU / Linux Bereinigen und ein Debian GNU / Linux Aufräumen (oder Ubuntu), Reprise . Kurz gesagt, die Antwort, die Sie suchen, lautet:
Als ich das letzte Mal damit gearbeitet habe, wenn Sie apt-get verwendet haben, hat es nicht funktioniert. Deshalb empfehle ich aptitude immer und so weit ich weiß, lehnt Debian apt-get zugunsten von aptitude ab.
Ich weiß nicht, wie ich das mit Fedora machen soll, und Sie sollten sich wahrscheinlich in eine andere Frage unterteilen. Fedora und Ubuntu sind unterschiedliche Betriebssysteme und sollten als solche behandelt werden (auch wenn sie ihren Kernel und einige andere Dinge teilen).
quelle
grep
:aptitude search '~i !~M'
sollten den Trick machen.apt-get
ist nicht veraltet. Debian empfiehltaptitude
für die Paketverwaltung auf der Kommandozeile, aber das ist alles andere als veraltetapt-get
.Unter debian zeigt apt-show-versions die Versionen der installierten Pakete an.
quelle
Schauen Sie auf apt-basierten Systemen unter /var/log/apt/term.log nach. Für mich gibt es eine ziemlich klare Linie, wo die Installation endete und wo meine Installationen begannen.
quelle
Von
man aptitude-create-state-bundle
:Auf diese Weise bleiben dieselben Informationen erhalten,
aptitude
auf denen Pakete manuell installiert wurden.Es soll verwendet werden mit
aptitude-run-state-bundle
:quelle
Wenn Sie nur verwenden
dpkg
, wissen Sie nicht, ob das Paket manuell vom Benutzer oder automatisch (als Abhängigkeit oder während der Erstinstallation des Betriebssystems) installiert wurde. Wenn Sie diese Informationen beibehalten möchten, müssen Sie nur eine Liste der Pakete abrufen, die tatsächlich manuell installiert wurden.Dafür können Sie einen dieser beiden Einzeiler verwenden. Beide liefern auf meiner Maschine exakt die gleiche Leistung und sind präziser als alle bisher in dieser Frage vorgeschlagenen Lösungen. Sie sind eine Kombination der beiden Antworten (1) und (2) . Beachten Sie, dass ich diese Antwort ursprünglich hier gepostet habe .
Verwenden von
apt-mark
:Verwenden von
aptitude
:Nur sehr wenige Pakete noch die Risse durchfallen, obwohl ich diese vermuten , sind tatsächlich vom Benutzer installiert, entweder direkt nach der Installation durch die Sprachlokalisierung Setup oder zB durch den Totem - Codec Installer. Auch die Linux-Header-Versionen scheinen sich zu häufen, obwohl ich nur das nicht versionsspezifische Metapaket installiert habe. Beispiele:
Wie funktioniert es
sed
Leerzeichen am Ende der Zeile.Andere Möglichkeiten funktionieren nicht so gut:
ubuntu-14.04-desktop-amd64.manifest
Datei ( hier für Ubuntu 14.04) anstelle von/var/log/installer/initial-status.gz
. Weitere Pakete werden als manuell installiert angezeigt, obwohl dies nicht der Fall ist.apt-mark showauto
anstelle von/var/log/installer/initial-status.gz
.apt-mark
Beispiel: Enthält nicht das Paket xserver-xorg, während dies in der anderen Datei der Fall ist.Beide Listen enthalten mehr Pakete als die oben genannte Lösung.
quelle
Ich bin voreingenommen und die Lösung, die ich präsentiere, ist nicht immer möglich, aber ich habe diese Situation satt. Das Ergebnis ist, dass ich mit den Update / Package Manager-Tools nichts mehr installiere.
Ich bin allerdings einen ziemlich schwierigen Weg gegangen (ich hatte strenge Anforderungen an die Versionen). Ich habe ein riesiges Makefile erstellt, das jedes Paket (Programm, Bibliothek, was auch immer), das ich brauche, herunterlädt, kompiliert und in meinem Home-Verzeichnis installiert. Ich habe es Stück für Stück schrittweise weiterentwickelt. Das Makefile lädt und kompiliert alles, auch die Compiler.
Wenn ich auf ein neues System umsteige oder neu installiere, kopiere ich einfach das Makefile (plus einige unterstützende Dinge), starte make world und komme am nächsten Tag wieder.
Für einige Programme, die ich entwickle (damit ich die Kontrolle darüber habe), verwende ich ein von mir programmiertes Tool, den Kastanienpaket-Manager . So ähnlich wie .app Ordner unter MacOSX. Alles ist im Paket enthalten, sodass ich jederzeit weiß, was installiert ist, und weiß, dass es eigenständig und autark ist (mit Ausnahme der Systembibliotheken).
quelle