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"yum localinstall ...
. J'avais cependant pas mal de colis qui tombaient dans ce camp.repoquery --installed --qf '%{n} - %{yumdb_info.reason}' --all 2>&1|grep -v "user$"|grep -v "dep$" |wc -l
retourné 90 colis.La façon la plus simple et qui a fonctionné pendant longtemps est:
... qui fonctionne un peu comme la commande get / set selections dpkg, AIUI. Notez également que si vous relisez l'historique, vous pouvez utiliser:
... au lieu d'avoir à l'analyser vous-même.
la source
Inspiré par slm de réponse , je suis venu avec la suite
yum history
solution:Obtenez tout l'historique détaillé de toutes les transactions d'installation yum (c.-à-d. Aucune mise à niveau), à l'exception de celles exécutées dans le cadre des actions initiales du programme d'installation (transactions 1 et 2 sur mon système, attribuées à l'utilisateur «Système»):
Filtrez les packages installés explicitement et coupez les préfixes de version.
L'expression régulière laide est nécessaire de telle sorte que toutes sortes de suffixes de version correspondent.
Les résultats semblent assez bien sur mon système.
Une comparaison avec le repoquery ansatz (sur mon système):
(J'ai canalisé les résultats du repoquery via sort -u)
Pourquoi y a-t-il des différences? Parce que le repoquery inclut tous les packages des transactions 1 et 2, c'est-à-dire tous les packages qui ont été installés par le programme d'installation de Fedora. Cela explique pourquoi le repoquery inclut les packages mentionnés xorg-x11- drv-mga et amis.
La comparaison de repoquery-2nd et yum-history montre que repoquery-2nd est plus précis - il n'inclut pas certains packages déjà supprimés. De plus, il inclut quelques packages (2 sur mon système) à partir des opérations «yum update», semble-t-il.
avertissement
La méthode basée sur l'historique ci-dessus répertorie uniquement tous les packages installés explicitement pendant toute la durée de vie du système. Il n'équilibre pas les packages qui ont été supprimés lors d'une transaction ultérieure. Ainsi, cette méthode nécessite une conservation manuelle des résultats et ne doit être utilisée que sur les systèmes où elle
repoquery
n'est pas disponible.la source
J'ai une ancienne version de Fedora (14), donc mon yum inclut une version moins riche en fonctionnalités de
yum
, mais vous voudrez peut-être jeter un œil à layum history
fonctionnalité. Je crois que vous pouvez obtenir les informations que vous recherchez à partir de cette commande.liste historique
Vous pouvez revenir à la toute première transaction en passant une liste de numéros à
yum history list
:info historique
Ce qui suit vous montrera ce qui a été installé dans le cadre de la première transaction yum:
Remarquez comment yum indique si un package a été explicitement installé ou installé car il était nécessaire à une dépendance. Vous pouvez analyser ces informations et obtenir votre liste de packages qui ont été explicitement installés.
la source
yum history
idée, elle compare également les résultats avec larepoquery
méthode basée. Comme effet secondaire, j'ai étendu ma réponse au repoquery.la source
--userinstalled
commutateur vient d'être ajouté à dnf en mai . Je l'ai testé et il donne des résultats précis. Modulez les paquets kernel / kernel-core / kernel-modules qui ne sont pas vraiment installés par l'utilisateur. Il contient également tous les*-debuginfo
packages, mais ils peuvent être facilement filtrés si nécessaire.Pour lister les packages que vous avez installés, essayez ce one-liner :
Résultat:
PS1: il ne montre pas de dépendances
PS2: il est trié par ordre alphabétique
PS3: il ne s'affiche pas si vous avez supprimé le package plus tard
la source
Ce que j'ai fait (j'ai oublié les détails, et je suis un clochard paresseux, alors ...
Obtenez tous les packages installés:
rpm -qa > file
Utilisez
sed(1)
pour vous débarrasser des numéros de version et autres (conservez l'architecture, si nécessaire). Cela a nécessité quelques itérations pour bien faire les choses, vous voulez remplacer le dernier tronçon de-[0-9.]-[0-9].fc23
ou similaire par rien, mais il y a aussi des "numéros" drôles de version.Après l'installation comme d'habitude, faites un
yum -y install $(< file)
(oudnf
, si nécessaire).Vous obtiendrez des retombées de packages qui n'existent plus, ou changé de nom, ou ont été remplacés par d'autres.
la source