GNU/Linux >> Tutoriels Linux >  >> Fedora

Fedora - Comment répliquer la sélection de packages installés d'une instance Fedora à une autre ?

J'ai un système Fedora (A) sur lequel j'ai installé des packages au fil du temps. Maintenant, je veux installer Fedora sur un autre ordinateur (B) et je veux y installer les mêmes packages.

En termes Debian, je veux accomplir quelque chose comme ceci :

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

Mais pour être honnête, je veux vraiment une meilleure méthode pour sélectionner les mêmes packages sur le nouveau système Fedora 19 (B) :je veux juste installer les packages du système A qui ont été explicitement mentionnés sur une installation dnf install (ou yum install ) en ligne de commande - et non celles qui ont été installées en tant que dépendances !

Pourquoi? Parce que peut-être que les dépendances ont changé - et je ne veux pas installer de dépendances obsolètes sur le nouveau système. De plus, lorsque je supprime des packages, je souhaite également supprimer les dépendances installées automatiquement (éventuellement) alors inutiles (c'est-à-dire les orphelins).

J'ai trouvé la dnf list installed - mais il ne s'affiche pas si un package a été explicitement sélectionné ou simplement installé en raison d'une dépendance.

Comment puis-je obtenir ces informations sur Fedora ?

Quelle est la méthode Fedora/dnf pour répliquer les sélections de packages ?

Réponse acceptée :

Depuis Fedora 26, le Dnf repoquery la sous-commande 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 aux 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 s'interrompt si un ou plusieurs packages ne sont plus disponibles. Alternativement, dnf peut être forcé d'installer tous ceux qui restent :

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

PS : Mettez le code ci-dessus et plus dans 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. À partir de 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 incluant 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 d'environ 2015-11), les problèmes suivants sont pertinents :

  • les packages installés via l'interface graphique ne sont pas inclus
  • les packages installés via le gestionnaire command-not-found ne sont pas inclus
  • certains packages installés par défaut (par anaconda) sont inclus
En relation :plage de bus illégale ou nom de la fonction logique, par exemple "instMyAdder" de type 4 Bit Adder ?

Repoquery

Sur les anciens systèmes Fedora, où Dnf, l'API Dnf et dnf history userinstalled ne sont pas disponibles, on peut utiliser le dépôt à 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 nom 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 ex. pas sur la version 23, car la commande repoquery a été remplacé par dnf repoquery . Et dnf repoquery ne comprend pas le %{yumdb_info.reason} balise.


Fedora
  1. Comment créer des packages à partir de la source à l'aide de CheckInstall

  2. Comment supprimer des packages installés d'un référentiel spécifique dans CentOS, Fedora

  3. Comment mettre à niveau Fedora 34 à partir de Fedora 33 en utilisant DNF

  4. Debian – Comment répliquer les sélections de paquets installés d'un système Debian à un autre ? (debian Wheezy) ?

  5. Comment empaqueter et transférer des images Docker d'un serveur à un autre

Comment construire des paquets Debian à partir de la source

Comment passer de Fedora 32 à Fedora 33

Comment mettre à niveau Fedora 23 vers Fedora 24 en utilisant DNF

Comment mettre à niveau Fedora 24 vers Fedora 25 en utilisant DNF

Comment mettre à niveau Fedora 25 vers Fedora 26 en utilisant DNF

Comment mettre à niveau vers Fedora 35 à partir de Fedora 34