GNU/Linux >> LINUX-Kenntnisse >  >> Fedora

Fedora – Wie repliziert man die installierte Paketauswahl von einer Fedora-Instanz zu einer anderen?

Ich habe ein Fedora-System (A), auf dem ich im Laufe der Zeit einige Pakete installiert habe. Jetzt möchte ich Fedora auf einem anderen Computer (B) installieren und möchte die gleichen Pakete darauf installieren.

In Debian-Begriffen möchte ich so etwas erreichen:

$ dpkg --get-selections > pkg_sel_host_a  # on host_a
$ dpkg --set-selections < pkg_sel_host_a  # on host_b

Aber um ehrlich zu sein, möchte ich wirklich eine bessere Methode, um dieselben Pakete auf dem neuen Fedora 19-System (B) auszuwählen:Ich möchte nur die Pakete von System A installieren, die explizit auf einer dnf-Installation (oder yum install ) Kommandozeile – und nicht die, die als Abhängigkeiten installiert wurden!

Wieso den? Denn vielleicht haben sich Abhängigkeiten geändert – und ich möchte keine veralteten Abhängigkeiten auf dem neuen System installieren. Außerdem möchte ich beim Entfernen von Paketen auch die (möglicherweise) dann nicht benötigten automatisch installierten Abhängigkeiten (dh verwaiste) entfernen.

Ich habe dnf list installiert gefunden – aber es wird nicht angezeigt, ob ein Paket explizit ausgewählt oder nur wegen einer Abhängigkeit installiert wurde.

Wie bekomme ich diese Informationen auf Fedora?

Wie repliziert Fedora/dnf Paketauswahlen?

Akzeptierte Antwort:

Seit Fedora 26 ist das Dnf repoquery Der Unterbefehl unterstützt hat eine neue Option zum Auflisten aller 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 listet es auch alle Debuginfo-Pakete auf. 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 nach vom Benutzer installierten Paketnamen über die Dnf-Python-API 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 dnf install bricht ab, 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: Fügen Sie den obigen Code und mehr in user-installed.py ein die auch andere Distributionen unterstützt.

Geschichte vom Benutzer installiert

Auf Fedora 23 und höher stellt Dnf die Datei

bereit
# dnf history userinstalled

Befehl, der alle vom Benutzer installierten Pakete auflistet. Ab 2016-11 ist seine Nützlichkeit begrenzt, da es keine Möglichkeit gibt, seine Ausgabe zu kontrollieren, und es gibt Pakete vollständig qualifiziert aus (d. h. einschließlich Versionsinformationen).

vom Benutzer installierte Einschränkungen

Beachten Sie, dass die Markierung von Paketen als vom Benutzer installiert einige Einschränkungen bei einigen Fedora-Versionen hat, für Fedora-23-Ära-Systeme (von etwa 2015-11) sind die folgenden Probleme relevant):

  • Pakete, die über die GUI installiert werden, sind nicht enthalten
  • Pakete, die über den Command-not-found-Handler installiert wurden, sind nicht enthalten
  • Einige Pakete, die standardmäßig (von Anaconda) installiert werden, sind enthalten
Verwandt:Unzulässiger Busbereich oder Name für Logikfunktion zum Beispiel „instMyAdder“ vom Typ 4 Bit Adder?

Wiederherstellung

Auf älteren Fedora-Systemen, auf denen Dnf, die Dnf-API und dnf history userinstalliert nicht verfügbar sind, kann man stattdessen Repoquery verwenden, z. B.:

$ 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 wird verwendet, um Pakete auszuschließen, die vom Installer installiert wurden. Die Benutzer-ID des Installers wurde anscheinend als 4294967295 gespeichert – alternativ können Sie auch etwas schreiben wie ($3 ==0 || $3 ==your-user-id) .

Beachten Sie, dass dieser Befehl auf Fedora bis Release 21 funktioniert – aber z. nicht auf Release 23, da der Befehl repoquery wurde durch dnf repoquery ersetzt . Und dnf repoquery versteht den %{yumdb_info.reason} nicht Tag.


Fedora
  1. So erstellen Sie Pakete aus der Quelle mit CheckInstall

  2. So entfernen Sie installierte Pakete aus einem bestimmten Repository in CentOS, Fedora

  3. So aktualisieren Sie Fedora 34 von Fedora 33 mit DNF

  4. Debian – Wie repliziert man installierte Paketauswahlen von einem Debian-System auf ein anderes? (Debian Wheezy)?

  5. So packen und übertragen Sie Docker-Images von einem Server auf einen anderen

Wie man Debian-Pakete aus den Quellen erstellt

So aktualisieren Sie von Fedora 32 auf Fedora 33

So aktualisieren Sie Fedora 23 auf Fedora 24 mit DNF

So aktualisieren Sie Fedora 24 auf Fedora 25 mit DNF

So aktualisieren Sie Fedora 25 auf Fedora 26 mit DNF

So aktualisieren Sie von Fedora 34 auf Fedora 35