Cosa significa "@" davanti al nome del repository in "elenco dnf"?


10

Quando voglio elencare i pacchetti installati, lo faccio di solito in due modi.

Il vecchio stile sta usando rpm -qa | grep <whatever I look for>, e basta.

Ma recentemente ho voluto una visualizzazione più completa dei miei pacchetti e, d'ora in poi, ho usato dnf list --installed <whatever I look for>.

Tuttavia, guardando il risultato ci sono un paio di cose che non capisco.

Considera questo esempio:

# 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

(gli spazi nella stampa effettiva sono più ampi)

Quindi le voci risultanti sono: «pacchetto» «versione» «repo».

Nel mio esempio questo è:

  • pacchetto: zsh.x86_64
  • versione: 5.2-5.fc24
  • repo: riga di comando @@

Finora la tabella risultante è comprensibile, ma sono confuso sul significato dei due "@@" davanti al nome del repository.

Inoltre, "commandline" suggerisce che il pacchetto è stato installato dalla riga di comando (scaricando l'RPM e quindi eseguendolo dnf install whatever.rpm nella riga di comando , ecc.). Tuttavia sono abbastanza sicuro di averlo installato zshtramite dnf install zsh.

Ma non è tutto.

Ho diversi pacchetti sul mio sistema installati dal repository @System, @fedora(comunque ce ne sono anche fedorasenza @) e cose del genere @@commandline.

Cosa significa esattamente @o @@esattamente di fronte al nome del repository?

E come mai ho installato così tanti pacchetti importanti, @@commandlineanche se sono più che sicuro di averli installati dai repository?

Risposte:


2

Lasciami gettare un mattone per attirare un po 'di giada qui.

dnf list all | lessmostra tutti i pacchetti (compresi i pacchetti installati e disponibili). L'output ha due sezioni: "Pacchetti installati" e "Pacchetti disponibili". Tutti i "Pacchetti installati" sono preceduti dal segno @, mentre i "Pacchetti disponibili" non lo sono. Quindi credo che i @segni mostrino che i pacchetti sono installati. Se un pacchetto è installato ma il suo repository originale è stato eliminato, suppongo @@che sia stato dato il segno.

il codice sorgente dnf è ospitato su https://github.com/rpm-software-management/dnf . Dopo aver scaricato il codice src, esegui a grep commandline -ri .nella directory e non restituisce nulla. Tuttavia, la sua pagina github menziona questo,

Gestisce i pacchetti usando le librerie RPM, libsolv e hawkey.

Quindi guardo hawkey, che è ospitato nello stesso progetto, su https://github.com/rpm-software-management/hawkey . Guardando il suo codice grep -ri commandline ., mostra alcuni risultati.

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

Quindi commandlineviene dal hawkeypacchetto. Per quanto riguarda il motivo per cui @comandlineviene mostrato nel dnf listcomando, la mia ipotesi è che il dnfcodice non riesca a utilizzare hawkeycorrettamente.


Sembra che la pagina man di dnfsia incredibilmente silenziosa al riguardo. Supponiamo che "@" indichi un pacchetto installato, "@@" significa che è installato manualmente da una fonte non repo, forse? Vorrei davvero che qualcuno chiarisse.
polemon

1
"Lasciami gettare un mattone per attirare un po 'di giada qui." ... Non ho assolutamente idea di cosa significhi quell'espressione fantastica e incomprensibile, e penso di amarla. 😍 "Idiomi!"
FeRD

1

(Dichiarazione di non responsabilità: non posso fornire fonti per nulla di tutto ciò, perché non ho mai visto alcuna documentazione che discuti effettivamente di queste cose. Le informazioni da seguire sono semplicemente quelle che sono stato in grado di scoprire attraverso l'ispezione, la sperimentazione di blackbox, a casaccio tentativi ed errori, e pianura vecchio congetture. Inoltre, fair warning, è overexpository al punto di essere troppo sopravvalutato troppo a lungo.)

DNF aggiunge un @ per indicare il repo un installato il pacchetto è stato installato da , nel dnf listcontesto. Come hai notato:

Ho diversi pacchetti sul mio sistema installati dal repository @System, @fedora (tuttavia c'è anche fedora senza il @) e cose come @@ commandline.

Ma in realtà, non vedrai mai qualsiasi pacchetto proveniente dal fedorasul installato lista, come ogni pacchetto ci mostra alcuni @ -repo come la sua fonte. (È possibile verificarlo eseguendo sudo dnf list installede ispezionando; non ci sono repository elencati senza almeno un segno @.) Quando si visualizzano le informazioni di un pacchetto con dnf info, il From repo:campo " " mostrerà quel nome di repository senza il @. (Quindi " From repo: fedora" è assolutamente possibile ed equivale a @fedoranell'elenco installato.)

Ma alcuni repository sono denominati con un @segno nella parte anteriore. Come ha scoperto JohnKoch nelle fonti di hawkey, "@commandline" è definito come "nome repository" per "repository commandline". Quindi, @@commandlinenella dnf listlista indica semplicemente un pacchetto installatoFrom repo: @commandline , un repository a cui è stato confuso un nome che inizia con il proprio @ -sign.

dnf infosu qualsiasi pacchetto installato mostrerà Repository: @System, che è il @repository virtuale con altri nomi. Sembra che @Systemsia il repository virtuale che contiene l'insieme dei pacchetti attualmente installati e @commandlineil repository di origine virtuale da cui proviene un pacchetto, quando non proviene da nessun repository.

Il significato di @commandlinee @System, e la loro relazione reciproca, sembra essere cambiato da quando ho scritto questa risposta per la prima volta. In un certo senso è più coerente e affronta alcune delle mie precedenti obiezioni su come @commandlineviene utilizzato. Non vedo più alcun pacchetto installato elencato come originario @@Systeme le installazioni fuori banda ora verranno mostrate From repo: @commandline( @@commandlinenel contesto dell'elenco). dnf infosu un pacchetto installato fuori banda in genere mostra qualcosa di simile al seguente:

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

Se faccio un dnf reinstall remi-release(perché il pacchetto è nel remirepository), cambia in:

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

Un'altra cosa sui repository di origine: i repository elencati nel From repo:campo sono sempre repository che esistono nel contesto di repository corrente . In altre parole, l'origine dell'installazione di un pacchetto non è semplicemente una stringa contenente il nome del repository; i pacchetti installati sono collegati a all'identità del repository di fornitura così come esiste (o esisteva) nel sistema.

Poiché la maggior parte dei repository sono distro-versionati, vengono ridefiniti con ogni nuova versione di Fedora. (Ad esempio, il " fedora" repository diventa il set di pacchetti che compongono la nuova versione, un repository completamente diverso dal "fedora " esistente nella versione precedente. Quindi, ogni volta che viene eseguito un aggiornamento del sistema, molte vecchie identità repository essere invalidato.

DNF (o hawkey) utilizzato per relegare i pacchetti installati dai repository che non esistono più @commandlinecome repository di origine. Dico "abituato", perché (per fortuna) non è più fatto. I pacchetti installati che provengono da un repository che non esiste più non mostreranno più la loro fonte come @@commandline/ From repo: @commandline. In effetti, dnf infodimostra che non hanno più alcun repository di origine. Ad esempio, sitecopyera un pacchetto Fedora che da allora è stato ritirato. L'ho installato dalle versioni fedorao updatesrepo 7 o 8 fa e l'ho ancora installato:

$ 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

Non è From repo:elencato " ".

Questo significa confusamente che dnf list installedmostrerà quel pacchetto (e altri simili) con @System(uno @) elencato accanto ad esso. Quindi, in un certo senso, abbiamo appena scambiato un'incoerenza con un'altra, poiché quella colonna non è più sempre il repository di origine con @anteposto. Preferisco tuttavia lo stato attuale delle cose.

Le note

  1. "... quello mostrato ..."
    (A volte mostrato. "Pacchetti disponibili" non compariranno necessariamente ad ogni dnf listesecuzione: se la versione installata di un pacchetto è la migliore versione disponibile, è elencata sotto "Pacchetti installati" pertanto sarebbe ridondante elencarlo anche in "Pacchetti disponibili". L'uso --showduplicatesimporrà una sezione "Pacchetti disponibili" che include tutte le istanze note, indipendentemente dalla versione, installata o scaricabile.)

Ho aggiornato questa risposta con alcune modifiche osservate in F30 rispetto a F28 (quando è stato originariamente scritto), e anche per affrontare le questioni sollevate in questa duplice domanda .
FeRD
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.