A partire da Fedora 26, il repoquery
sottocomando Dnf supporta 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 recenti di Dnf (ad es. Fedora> = 23), è possibile eseguire una 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
interrompe se uno o più pacchetti non sono più disponibili. In alternativa, dnf può essere costretto 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
quello che supporta anche altre distribuzioni.
cronologia installata dall'utente
Su Fedora 23 e successive, Dnf fornisce il
# dnf history userinstalled
comando che elenca tutti i pacchetti installati dall'utente. A partire dall'11 / 2016/2016, la sua utilità è limitata perché non c'è modo di controllarne l'output e stampa pacchetti completamente qualificati (cioè includendo informazioni sulla versione).
Limitazioni installate dall'utente
Nota che la marcatura dei pacchetti come installati dall'utente ha alcune limitazioni su alcune versioni di Fedora, per i sistemi Fedora dell'era 23 (circa 2015-11) sono rilevanti i seguenti problemi:
repoquery
Sui vecchi sistemi Fedora, dove Dnf, l'API Dnf e dnf history userinstalled
non sono disponibili, è possibile utilizzare invece il repoquery , ad esempio:
$ 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 dell'installatore era apparentemente memorizzato come 4294967295 - in alternativa puoi scrivere qualcosa del genere ($3 == 0 || $3 == your-user-id)
.
Nota che questo comando funziona su Fedora fino alla versione 21, ma ad esempio non sulla versione 23, perché il comando è repoquery
stato sostituito con dnf repoquery
. E dnf repoquery
non capisce il %{yumdb_info.reason}
tag.
repoquery ...
: "Querytag yumdb 'reason' non valido per pkg installato: HandBrake-cli-0.9.5-1.fc14.x86_64"