Depuis Fedora 26, la repoquery
sous-commande Dnf prend en charge une nouvelle option pour répertorier tous les packages installés par l'utilisateur:
$ dnf repoquery --qf '%{name}' --userinstalled \
| grep -v -- '-debuginfo$' \
| grep -v '^\(kernel-modules\|kernel\|kernel-core\|kernel-devel\)$' > pkgs_a.lst
Contrairement à d'autres méthodes, il répertorie également tous les packages debuginfo. Le grep supplémentaire dans l'exemple ci-dessus les filtre.
Pour installer la liste sur l'hôte B:
$ < pkgs_a.lst xargs dnf -y install
API Dnf
Avec les versions récentes de Dnf (par exemple Fedora> = 23), la base de données de packages peut être interrogée pour les noms de packages installés par l'utilisateur via 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
Par défaut, dnf install
abandonne si un ou plusieurs packages ne sont plus disponibles. Alternativement, dnf peut être forcé d'installer tous les autres:
# dnf install --setopt=strict=0 $(cat pkgs_a.lst) # on host_b
PS: Mettez le code ci-dessus et plus encore user-installed.py
qui prend également en charge d'autres distributions.
historique installé par l'utilisateur
Sur Fedora 23 et versions ultérieures, Dnf fournit le
# dnf history userinstalled
commande qui répertorie tous les packages installés par l'utilisateur. Depuis 2016-11, son utilité est limitée car il n'y a aucun moyen de contrôler sa sortie et il imprime des packages entièrement qualifiés (c'est-à-dire y compris les informations de version).
Limitations installées par l'utilisateur
Notez que le marquage des packages comme installés par l'utilisateur a certaines limitations sur certaines versions de Fedora, pour les systèmes de l'ère Fedora 23 (à partir de 2015-11), les problèmes suivants sont pertinents):
Repoquery
Sur les anciens systèmes Fedora, où Dnf, l'API Dnf et dnf history userinstalled
ne sont pas disponibles, on peut utiliser le repoquery à la place, par exemple:
$ 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 deuxième condition awk est utilisée pour exclure les packages qui ont été installés par le programme d'installation. L'ID utilisateur de l'installateur était apparemment stocké sous le numéro 4294967295 - vous pouvez également écrire quelque chose comme ($3 == 0 || $3 == your-user-id)
.
Notez que cette commande fonctionne sur Fedora jusqu'à la version 21 - mais par exemple pas sur la version 23, car la commande a repoquery
été remplacée par dnf repoquery
. Et dnf repoquery
ne comprend pas la %{yumdb_info.reason}
balise.
repoquery ...
: "Mot de requête yumdb non valide 'raison' pour le paquet installé: HandBrake-cli-0.9.5-1.fc14.x86_64"