GNU/Linux >> Linux Esercitazione >  >> Fedora

Fedora:come replicare la selezione del pacchetto installato da un'istanza Fedora all'altra?

Ho un sistema Fedora (A) in cui ho installato alcuni pacchetti nel tempo. Ora voglio installare Fedora su un altro computer (B) e voglio installare gli stessi pacchetti su di esso.

In termini Debian voglio realizzare qualcosa del genere:

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

Ma ad essere onesto, voglio davvero un metodo migliore per selezionare gli stessi pacchetti sul nuovo sistema Fedora 19 (B):voglio solo installare i pacchetti dal sistema A che sono stati esplicitamente menzionati su un dnf install (o yum install ) riga di comando – e non quelli che sono stati installati come dipendenze!

Come mai? Perché forse le dipendenze sono cambiate e non voglio installare dipendenze obsolete sul nuovo sistema. Inoltre, quando rimuovo i pacchetti, voglio rimuovere anche le (possibilmente) dipendenze installate automaticamente non necessarie (cioè orfane).

Ho trovato dnf list installed – ma non viene visualizzato se un pacchetto è stato selezionato in modo esplicito o semplicemente installato a causa di una dipendenza.

Come ottengo queste informazioni su Fedora?

Qual è il modo Fedora/dnf per replicare le selezioni dei pacchetti?

Risposta accettata:

Da Fedora 26, il Dnf repoquery Subcommand Supports ha una nuova opzione per elencare tutti i pacchetti installati dall'utente:

$ dnf repoquery --qf '%{name}' --userinstalled 
 | grep -v -- '-debuginfo$' 
 | grep -v '^(kernel-modules|kernel|kernel-core|kernel-devel)$' > pkgs_a.lst

A differenza di altri metodi, elenca anche tutti i pacchetti debuginfo. Il grep aggiuntivo nell'esempio sopra li filtra.

Per installare l'elenco sull'host B:

$ < pkgs_a.lst xargs dnf -y install

API DNF

Con le versioni Dnf recenti (ad es. Fedora>=23), è possibile eseguire query sul database dei pacchetti per i nomi dei pacchetti installati dall'utente tramite l'API Dnf Python:

$ 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

Per impostazione predefinita, dnf install si interrompe se uno o più pacchetti non sono più disponibili. In alternativa, dnf può essere forzato a installare tutti quelli rimanenti:

# dnf install --setopt=strict=0 $(cat pkgs_a.lst) # on host_b

PS: Inserisci il codice sopra e altro in user-installed.py che supporta anche altre distribuzioni.

cronologia utente installati

Su Fedora 23 e versioni successive, Dnf fornisce il

# dnf history userinstalled

comando che elenca tutti i pacchetti installati dall'utente. A partire dal 2016-11, la sua utilità è limitata perché non c'è modo di controllarne l'output e stampa pacchetti completamente qualificati (ovvero includendo le informazioni sulla versione).

Limitazioni installate dall'utente

Nota che il contrassegno dei pacchetti come installati dall'utente ha alcune limitazioni su alcune versioni di Fedora, per i sistemi dell'era Fedora 23-ish (dal 2015-11 circa) i seguenti problemi sono rilevanti):

  • I pacchetti installati tramite la GUI non sono inclusi
  • I pacchetti installati tramite il gestore command-not-found non sono inclusi
  • sono inclusi alcuni pacchetti installati di default (da anaconda)
Correlati:intervallo di bus illegale o nome per la funzione logica, ad esempio "instMyAdder" di tipo 4 Bit Adder?

Recupero

Sui vecchi sistemi Fedora, dove Dnf, l'API Dnf e dnf history userinstalled non sono disponibili, è invece possibile utilizzare repoquery, ad es.:

$ 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

La seconda condizione awk viene utilizzata per escludere i pacchetti installati dal programma di installazione. L'ID utente del programma di installazione è stato apparentemente memorizzato come 4294967295 – in alternativa puoi scrivere qualcosa come ($3 == 0 || $3 == your-user-id) .

Nota che questo comando funziona su Fedora fino al rilascio 21, ma ad es. non nella versione 23, perché il comando repoquery è stato sostituito con dnf repoquery . E dnf repoquery non comprende il %{yumdb_info.reason} tag.


Fedora
  1. Come creare pacchetti dal sorgente utilizzando CheckInstall

  2. Come rimuovere i pacchetti installati da un repository specifico in CentOS, Fedora

  3. Come aggiornare Fedora 34 da Fedora 33 usando DNF

  4. Debian:come replicare le selezioni di pacchetti installati da un sistema Debian a un altro? (Debian Wheezy)?

  5. Come imballare e trasferire immagini Docker da un server all'altro

Come creare pacchetti Debian dal sorgente

Come aggiornare da Fedora 32 a Fedora 33

Come aggiornare Fedora 23 a Fedora 24 usando DNF

Come aggiornare Fedora 24 a Fedora 25 usando DNF

Come aggiornare Fedora 25 a Fedora 26 usando DNF

Come aggiornare a Fedora 35 da Fedora 34