Seit Fedora 26, die Dnf repoquery
subcommand Träger hat eine neue Option für die Auflistung alle vom Benutzer installierten Pakete:
$ dnf repoquery --qf '%{name}' --userinstalled \
| grep -v -- '-debuginfo$' \
| grep -v '^\(kernel-modules\|kernel\|kernel-core\|kernel-devel\)$' > pkgs_a.lst
Im Gegensatz zu anderen Methoden werden auch alle debuginfo-Pakete aufgelistet. Das zusätzliche grep im obigen Beispiel filtert sie heraus.
So installieren Sie die Liste auf Host B:
$ < pkgs_a.lst xargs dnf -y install
DNF API
Bei neueren Dnf-Versionen (z. B. Fedora> = 23) kann die Paketdatenbank über die Dnf-Python-API nach vom Benutzer installierten Paketnamen abgefragt werden:
$ python3 -c 'import dnf; b = dnf.Base(); b.fill_sack(); \
l = sorted(set(x.name for x in b.iter_userinstalled() \
if not x.name.endswith("-debuginfo") \
and x.name not in \
["kernel-modules", "kernel", "kernel-core", "kernel-devel"] )); \
print("\n".join(l)) ' > pkgs_a.lst
# dnf install $(cat pkgs_a.lst) # on host_b
Standardmäßig wird dnf install
abgebrochen, wenn ein oder mehrere Pakete nicht mehr verfügbar sind. Alternativ kann dnf gezwungen werden , alle verbleibenden zu installieren:
# dnf install --setopt=strict=0 $(cat pkgs_a.lst) # on host_b
PS: Gib den obigen Code ein und vieles mehr user-installed.py
, das auch andere Distributionen unterstützt.
Verlauf vom Benutzer installiert
Auf Fedora 23 und höher bietet DNF die
# dnf history userinstalled
Befehl, der alle vom Benutzer installierten Pakete auflistet. Ab 2016-11 ist seine Nützlichkeit eingeschränkt, da es keine Möglichkeit gibt, seine Ausgabe zu steuern, und es druckt vollständig qualifizierte Pakete (dh einschließlich Versionsinformationen).
benutzerinstallierte Einschränkungen
Beachten Sie, dass die Kennzeichnung von Paketen als vom Benutzer installiert bei einigen Fedora-Versionen einige Einschränkungen aufweist.
Repoquery
Auf älteren Fedora-Systemen, auf denen Dnf, die Dnf-API, dnf history userinstalled
nicht verfügbar ist, kann stattdessen Repoquery verwendet werden, z.
$ repoquery --installed \
--qf '%{n} | %{yumdb_info.reason} | %{yumdb_info.installed_by}' --all \
| awk -F'|' ' $2 ~ /user/ && ($3 != 4294967295) { print $1 }' \
| sort -u > pkgs_a.lst
Die zweite awk-Bedingung dient zum Ausschließen von Paketen, die vom Installationsprogramm installiert wurden. Die Benutzer-ID des Installateurs wurde anscheinend als 4294967295 gespeichert - alternativ können Sie so etwas schreiben ($3 == 0 || $3 == your-user-id)
.
Beachten Sie, dass dieser Befehl auf Fedora bis Release 21 funktioniert - aber z. B. nicht auf Release 23, da der Befehl repoquery
durch ersetzt wurde dnf repoquery
. Und dnf repoquery
versteht das %{yumdb_info.reason}
Tag nicht.
repoquery ...
Folgendes auf meinem System, als ich lief : "Ungültiger yumdb querytag 'Grund' für installiertes pkg: HandBrake-cli-0.9.5-1.fc14.x86_64"yum localinstall ...
. Ich hatte eine ganze Menge Pakete, die in dieses Lager fielen.repoquery --installed --qf '%{n} - %{yumdb_info.reason}' --all 2>&1|grep -v "user$"|grep -v "dep$" |wc -l
90 Pakete zurückgegeben.Der einfachste Weg, und es hat lange funktioniert, ist:
... was ähnlich funktioniert wie der Befehl get / set selections dpkg, AIUI. Beachten Sie auch, dass Sie bei der Wiedergabe des Verlaufs Folgendes verwenden können:
... anstatt es selbst analysieren zu müssen.
quelle
Inspiriert von der Antwort von slm habe ich folgende Lösung gefunden:
yum history
Erhalten Sie den gesamten detaillierten Verlauf aller YUM-Installationstransaktionen (dh keine Upgrades), mit Ausnahme derjenigen, die im Rahmen der anfänglichen Installationsaktionen (Transaktionen 1 und 2 auf meinem System, die dem Benutzer "System" zugeordnet sind) ausgeführt werden:
Filtern Sie explizit installierte Pakete und schneiden Sie Versionspräfixe ab.
Der hässliche reguläre Ausdruck wird benötigt, damit alle Arten von Versionssuffixen übereinstimmen.
Die Ergebnisse sehen auf meinem System ganz gut aus.
Ein Vergleich mit dem Repoquery- Ansatz (auf meinem System):
(Ich habe die Repoquery-Ergebnisse durch sort -u geleitet.)
Warum gibt es Unterschiede? Denn repoquery beinhaltet alle Pakete aus den Transaktionen 1 und 2, also alle Pakete, die vom Fedora-Installer installiert wurden. Dies erklärt, warum die Repoquery die genannten Pakete xorg-x11-drv-mga und friends enthält.
Der Vergleich von repoquery-2nd und yum-history zeigt, dass repoquery-2nd genauer ist - einige bereits entfernte Pakete sind nicht enthalten. Außerdem enthält es anscheinend ein paar (2 auf meinem System) Pakete aus 'yum update'-Operationen.
Warnung
Die obige auf dem Verlauf basierende Methode listet nur alle explizit installierten Pakete über die gesamte Lebensdauer des Systems auf. Pakete, die in einer späteren Transaktion entfernt wurden, werden nicht ausgeglichen. Diese Methode erfordert daher eine manuelle Kuratierung der Ergebnisse und sollte nur auf Systemen angewendet werden, auf denen dies
repoquery
nicht möglich ist.quelle
Ich habe eine ältere Version von Fedora (14), daher enthält mein Yum eine weniger funktionsreiche Version von
yum
, aber vielleicht möchten Sie sich dieyum history
Funktion ansehen . Ich glaube, Sie können die Informationen, die Sie suchen, von diesem Befehl erhalten.Verlaufsliste
Sie können zur allerersten Transaktion zurückkehren, indem Sie eine Liste mit Zahlen übergeben an
yum history list
:Geschichtsinfo
Das Folgende zeigt Ihnen, was im Rahmen der ersten yum-Transaktion installiert wurde:
Beachten Sie, wie yum meldet, ob ein Paket explizit installiert oder installiert wurde, weil es von einer Abhängigkeit benötigt wurde. Sie können diese Informationen analysieren und eine Liste der Pakete abrufen, die explizit installiert wurden.
quelle
yum history
Ideerepoquery
basiert. Sie vergleicht auch die Ergebnisse mit der basierten Methode. Als Nebeneffekt habe ich meine Repoquery-Antwort erweitert.quelle
--userinstalled
Schalter wurde erst im Mai zu dnf hinzugefügt . Ich habe es getestet und es gibt genaue Ergebnisse. Modulo die Kernel / Kernel-Core / Kernel-Module-Pakete, die nicht wirklich vom Benutzer installiert sind. Es enthält auch alle*-debuginfo
Pakete - sie können jedoch bei Bedarf einfach herausgefiltert werden.Versuchen Sie Folgendes, um die von Ihnen installierten Pakete aufzulisten :
Ergebnis:
PS1: Es werden keine Abhängigkeiten angezeigt
PS2: Es ist alphabetisch sortiert
PS3: Es wird nicht angezeigt, wenn Sie das Paket später entfernt haben
quelle
Was ich getan habe (die Details vergessen, und ich bin ein fauler Penner, also ...
Holen Sie sich alle installierten Pakete:
rpm -qa > file
Verwenden Sie
sed(1)
diese Option, um Versionsnummern und ähnliches zu entfernen (behalten Sie die Architektur bei, falls erforderlich). Dies erforderte ein paar Iterationen, um es richtig zu machen, man wollte den letzten Abschnitt von-[0-9.]-[0-9].fc23
oder ähnlichem durch nichts ersetzen , aber es gibt auch lustige "Versionsnummern".Führen Sie nach der normalen Installation einen der Schritte
yum -y install $(< file)
(oderdnf
) aus.Sie erhalten einige Ausfälle von Paketen, die nicht mehr existieren oder deren Namen geändert wurden oder die durch andere ersetzt wurden.
quelle