Que signifie le «@» devant le nom du référentiel dans la «liste dnf»?

10

Lorsque je veux répertorier les packages installés, je le fais généralement de deux manières.

L'ancienne façon est d'utiliser rpm -qa | grep <whatever I look for>, et c'est tout.

Mais récemment, je voulais un affichage plus complet de mes packages, et désormais, j'ai utilisé dnf list --installed <whatever I look for>.

Cependant, en regardant le résultat, il y a quelques choses que je ne comprends pas.

Considérez cet exemple:

# dnf list --installed zsh                  
Last metadata expiration check: 0:13:25 ago on Mon Jul 11 05:48:04 2016.
Installed Packages
zsh.x86_64            5.2-5.fc24            @@commandline

(les espaces dans l'impression réelle sont plus larges)

Ainsi, les entrées résultantes sont: «package» «version» «repo».

Dans mon exemple, c'est:

  • paquet: zsh.x86_64
  • version: 5.2-5.fc24
  • repo: @@ commandline

Jusqu'à présent, le tableau résultant est compréhensible, mais je ne comprends pas ce que les deux «@@» signifient devant le nom du référentiel.

En outre, la "ligne de commande" suggère que le package a été installé à partir de la ligne de commande (téléchargement du RPM, puis exécution dnf install whatever.rpm dans la ligne de commande , etc.). Cependant, je suis presque sûr d'avoir installé zshvia dnf install zsh.

Mais ce n'est pas tout.

J'ai plusieurs packages sur mon système installés à partir du dépôt @System, @fedora(mais il y en a aussi fedorasans @) et des choses comme @@commandline.

Alors qu'est - ce que @ou @@dire exactement en face du nom de pension?

Et comment se fait-il que j'aie installé autant de packages importants @@commandlinebien que je sois plus que sûr de les avoir installés à partir des dépôts?

polémon
la source

Réponses:

2

Permettez-moi de jeter une brique pour attirer du jade ici.

dnf list all | lessaffiche tous les packages (y compris les packages installés et disponibles). La sortie comporte deux sections: "Packages installés" et "Packages disponibles". Tous les "packages installés" sont précédés du signe @, contrairement aux "packages disponibles". Je pense donc que les @panneaux indiquent que les packages sont installés. Si un paquet est installé mais que son dépôt d'origine a été supprimé, je suppose que le @@signe est donné.

Le code source dnf est hébergé sur https://github.com/rpm-software-management/dnf . Après avoir téléchargé le code src, faites un grep commandline -ri .dans le répertoire et il ne renvoie rien. Cependant, sa page github le mentionne,

Il gère les packages à l'aide des bibliothèques RPM, libsolv et hawkey.

Je regarde donc hawkey, qui est hébergé dans le même projet, à https://github.com/rpm-software-management/hawkey . En regardant son code grep -ri commandline ., il montre des résultats.

./src/types.h:#define HY_CMDLINE_REPO_NAME "@commandline"
./hawkey.spec:- fix: commandline RPMs do not provide their files (RhBug:1112810) (Ales Kozumplik)

commandlineVient donc de l' hawkeyemballage. Quant à savoir pourquoi @comandlineest affiché dans la dnf listcommande, je suppose que le dnfcode ne parvient pas à utiliser hawkeycorrectement.

JohnKoch
la source
Il semble que la page de manuel de dnfsoit incroyablement silencieuse à ce sujet. Supposons que «@» désigne un package installé, «@@» signifie-t-il alors qu'il est installé manuellement à partir d'une source non repo, peut-être? J'aimerais vraiment que quelqu'un clarifie.
polemon
1
"Laisse-moi jeter une brique pour attirer du jade ici." ... Je n'ai absolument aucune idée de ce que signifie cette expression impressionnante et incompréhensible, et je pense que j'adore ça. 😍 "
FeRD
1

(Avertissement: je ne peux pas fournir de sources pour tout cela, parce que je n'ai jamais vu de documentation qui traite réellement de ces choses. essais et erreurs, et conjectures simples. En outre, juste avertissement, c'est surexpositif au point d'être waaaay trop long.)

DNF ajoute un @ pour désigner le repo un installé paquet a été installé à partir , dans le dnf listcontexte. Comme vous l'avez noté:

J'ai plusieurs packages sur mon système installés à partir du référentiel @System, @fedora (mais il y a aussi Fedora sans @) et des choses comme @@ commandline.

Mais en réalité, vous ne verrez jamais de paquet provenant de fedorala liste installée , car chaque paquet montre la source de @ -repo. (Vous pouvez le vérifier en exécutant sudo dnf list installedet en inspectant; aucun référentiel n'est répertorié sans au moins un signe @.) Lorsque vous affichez les informations d'un package avec dnf info, le From repo:champ " " affiche ce nom de référentiel sans le @. (" From repo: fedora" Est donc tout à fait possible, et équivalent à @fedorala liste installée.)

Mais certains repos sont nommés avec un @signe à l'avant. Comme JohnKoch l'a découvert dans les sources hawkey, "@commandline" est défini comme le "nom du dépôt" pour "le dépôt en ligne de commande". Ainsi, @@commandlinedans la dnf listliste indique simplement un paquet installé From repo: @commandline, un dépôt qui a été confus donné un nom qui commence par son propre @ -sign.

dnf infosur n'importe quel package installé s'affichera Repository: @System, qui est l'autre @référentiel virtuel. Il semble que ce @Systemsoit le référentiel virtuel qui contient l'ensemble des packages actuellement installés, et @commandlinele référentiel source virtuel d'où provient un package, alors qu'il ne provenait d'aucun référentiel.

Le sens de @commandlineet @System, et leur relation les uns avec les autres, semble avoir changé depuis que j'ai écrit cette réponse pour la première fois. À certains égards, il est plus cohérent et répond à certaines de mes objections précédentes sur la façon dont il @commandlineest utilisé. Je ne vois plus aucun package installé répertorié comme provenant de @@System, et les installations hors bande s'affichent désormais From repo: @commandline( @@commandlinedans le contexte de la liste). dnf infosur un package installé hors bande affiche généralement quelque chose comme ceci:

$ dnf info remi-release
Installed Packages
Name         : remi-release
---✀---
Repository   : @System
From repo    : @commandline

Si je fais un dnf reinstall remi-release(car le package est dans le remirepo), il se transforme en:

$ dnf info remi-release
Installed Packages
Name         : remi-release
---✀---
Repository   : @System
From repo    : remi

Une autre chose à propos des référentiels source: les référentiels répertoriés dans le From repo:champ sont toujours des référentiels qui existent dans le contexte de référentiel actuel . En d'autres termes, la source d'installation d'un package n'est pas simplement une chaîne contenant le nom du référentiel; les packages installés sont liés à l' identité du référentiel fournisseur tel qu'il existe (ou existait) dans le système.

Étant donné que la plupart des référentiels sont distribués en versions, ils sont redéfinis à chaque nouvelle version de Fedora. (Comme par exemple le fedorarepo " " devient l'ensemble des packages qui composent la nouvelle version, un repo complètement différent du " fedora" qui existait sous la version précédente.) Ainsi, chaque fois qu'une mise à niveau du système est effectuée, beaucoup d'anciennes identités de repo être invalidé.

DNF (ou hawkey) utilisé pour reléguer les packages installés à partir de référentiels qui n'existent plus @commandlinecomme référentiel source. Je dis «l'habitude», car cela n'est (heureusement) plus fait. Les packages installés provenant d'un dépôt qui n'existe plus ne montreront plus leur source sous @@commandline/ From repo: @commandline. En fait, cela dnf infomontre qu'ils n'ont plus de repo source. Par exemple, sitecopyétait un package Fedora qui a depuis été retiré. Je l' ai installé du fedoraou updatesrepo 7 ou 8 il y a des rejets, et ont encore installé:

$ dnf info sitecopy
Installed Packages
Name         : sitecopy
Version      : 0.16.6
Release      : 14.fc22
Architecture : x86_64
Size         : 373 k
Source       : sitecopy-0.16.6-14.fc22.src.rpm
Repository   : @System

Il n'y a pas de " From repo:" répertorié.

Cela signifie de manière confuse que dnf list installedcela montrera ce paquet (et d'autres comme ça) avec @System(un @) listé à côté de lui. Donc, dans un sens, nous venons d'échanger une incohérence pour une autre, car cette colonne n'est plus toujours le dépôt source avec @pré-ajouté. Pourtant, je préfère l'état actuel des choses.

Notes de bas de page

  1. "... celui qui est affiché ..."
    (Parfois affiché. "Packages disponibles" n'apparaîtra pas nécessairement à chaque dnf listexécution: si la version installée d'un package est la meilleure version disponible, elle est répertoriée sous "Packages installés" il serait donc redondant de le répertorier également sous "Packages disponibles". L'utilisation --showduplicatesforcera une section "Packages disponibles" qui comprend toutes les instances connues, quelle que soit la version, qu'elles soient installées ou téléchargeables.)
FeRD
la source
J'ai mis à jour cette réponse avec quelques changements observés dans F30 par rapport à F28 (quand il a été écrit à l'origine), et aussi pour répondre aux questions soulevées à cette question en double .
FeRD