Was bedeutet das '@' vor dem Repo-Namen in der 'dnf-Liste'?

10

Wenn ich installierte Pakete auflisten möchte, mache ich das normalerweise auf zwei Arten.

Die altmodische Art verwendet rpm -qa | grep <whatever I look for>, und das ist es.

Aber vor kurzem wollte ich eine umfassendere Darstellung meiner Pakete, und von nun an habe ich verwendet dnf list --installed <whatever I look for>.

Wenn ich mir das Ergebnis anschaue, gibt es jedoch einige Dinge, die ich nicht verstehe.

Betrachten Sie dieses Beispiel:

# 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

(Leerzeichen im tatsächlichen Ausdruck sind breiter)

Die resultierenden Einträge sind also: «Paket» «Version» «Repo».

In meinem Beispiel ist das:

  • Paket: zsh.x86_64
  • Version: 5.2-5.fc24
  • Repo: @@ Kommandozeile

Bisher ist die resultierende Tabelle verständlich, aber ich bin verwirrt, was die beiden "@@" vor dem Repo-Namen bedeuten.

Außerdem bedeutet "Befehlszeile", dass das Paket über die Befehlszeile installiert wurde (Herunterladen des RPM und anschließende Ausführung dnf install whatever.rpm in der Befehlszeile usw.). Ich bin mir jedoch ziemlich sicher, dass ich zshüber installiert habe dnf install zsh.

Aber das ist nicht alles.

Ich habe mehrere Pakete auf meinem System aus dem Repo installiert @System, @fedora(allerdings gibt es auch fedoraohne das @) und solche Sachen @@commandline.

Also , was bedeutet , dass @oder @@genau vor dem Repo - Namen bedeuten?

Und warum habe ich so viele prominente Pakete installiert, @@commandlineobwohl ich mehr als sicher bin, dass ich sie von den Repos installiert habe?

Polemon
quelle

Antworten:

2

Lassen Sie mich einen Ziegelstein werfen, um hier etwas Jade anzuziehen.

dnf list all | lesszeigt alle Pakete (einschließlich installierter und verfügbarer Pakete). Die Ausgabe besteht aus zwei Abschnitten: "Installierte Pakete" und "Verfügbare Pakete". Allen "Installierten Paketen" geht ein @ -Zeichen voraus, "Verfügbare Pakete" jedoch nicht. Ich glaube also, dass die @Schilder zeigen, dass die Pakete installiert sind. Wenn ein Paket installiert ist, aber sein ursprüngliches Repo gelöscht wurde, wird ein @@Zeichen gegeben.

Der dnf-Quellcode wird unter https://github.com/rpm-software-management/dnf gehostet . Führen Sie nach dem Herunterladen des src-Codes a grep commandline -ri .im Verzeichnis aus, und es wird nichts zurückgegeben. Die Github-Seite erwähnt dies jedoch:

Die Paketverwaltung erfolgt über RPM-, libsolv- und Hawkey-Bibliotheken.

Also schaue ich mir Hawkey an, das unter demselben Projekt gehostet wird, unter https://github.com/rpm-software-management/hawkey . Betrachtet man den Code von grep -ri commandline ., zeigt es einige Ergebnisse.

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

So commandlinekommt von hawkeyPaket. In Bezug auf die Frage, warum @comandlineim dnf listBefehl angezeigt wird , ist meine wilde Vermutung, dass dnfCode nicht hawkeyrichtig verwendet wird.

JohnKoch
quelle
Es scheint, dass die Manpage von dnfdarüber unglaublich still ist. Angenommen, '@' bezeichnet ein installiertes Paket. Bedeutet '@@' dann, dass es möglicherweise manuell von einer Nicht-Repo-Quelle installiert wird? Ich würde mir wirklich wünschen, jemand würde das klarstellen.
Polemon
1
"Lass mich einen Ziegelstein werfen, um hier etwas Jade anzuziehen." ... Ich habe absolut keine Ahnung, was dieser großartige und unverständliche Ausdruck bedeutet, und ich denke, ich liebe ihn. 😍 "
FeRD
1

(Haftungsausschluss: Ich kann keine Quellen dafür bereitstellen, da ich noch nie eine Dokumentation gesehen habe, in der diese Dinge tatsächlich besprochen werden. Die folgenden Informationen sind lediglich das, was ich durch Inspektion, Blackbox-Experimente und Zufall herausfinden konnte Versuch und Irrtum und einfache alte Vermutungen. Außerdem, faire Warnung, ist es überbelagert, bis es zu lange dauert .)

DNF fügt ein @ den Repo ein bezeichnen installierte Paket installiert wurde aus , in dnf listZusammenhang. Wie Sie bemerkt haben:

Ich habe mehrere Pakete auf meinem System vom Repo @System, @fedora (es gibt jedoch auch Fedora ohne das @) und Dinge wie @@ Befehlszeile installiert.

In Wirklichkeit wird jedoch niemals ein Paket fedoraauf der installierten Liste angezeigt, da jedes Paket dort ein @ -repo als Quelle anzeigt. (Sie können dies durch Ausführen sudo dnf list installedund Überprüfen überprüfen . Es sind keine Repos ohne mindestens ein @ -Zeichen aufgeführt.) Wenn Sie die Informationen eines Pakets mit anzeigen dnf info, wird im From repo:Feld " " dieser Reponame ohne das angezeigt @. (Also " From repo: fedora" ist absolut möglich und entspricht @fedorader installierten Liste.)

Aber einige repos sind benannt mit einem @Schild an der Vorderseite. Wie JohnKoch in den Hawkey-Quellen feststellte, ist "@commandline" als "Repo-Name" für "das Kommandozeilen-Repo" definiert. Also, @@commandlinein der dnf listlediglich die Auflistung zeigt ein installiertes Paket From repo: @commandline, ein Repo , die zum Verwechseln einen Namen an , beginnt mit seinem eigenen gegeben wurden @ -Zeichen.

dnf infoAuf jedem installierten Paket wird angezeigt Repository: @System, welches das andere @benannte virtuelle Repo ist. Es scheint, dass dies @Systemdas virtuelle Repo ist, das die aktuell installierten Pakete enthält, und @commandlinedas virtuelle Quell-Repo, von dem ein Paket stammt, wenn es nicht von einem Repo stammt.

Die Bedeutung von @commandlineund @Systemund ihre Beziehung zueinander scheinen sich geändert zu haben, seit ich diese Antwort zum ersten Mal geschrieben habe. In gewisser Weise ist es konsistenter und geht auf einige meiner früheren Einwände gegen die @commandlineVerwendung ein. Ich sehe keine installierten Pakete mehr als von @@System, und Out-of-Band-Installationen werden tatsächlich jetzt angezeigt From repo: @commandline( @@commandlineim Listenkontext). dnf infoAuf einem außerhalb des Band installierten Pakets wird normalerweise Folgendes angezeigt:

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

Wenn ich ein tun dnf reinstall remi-release(weil das Paket ist in der remiRepo - Geschäfte), ändert sich an:

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

Eine andere Sache über Quell-Repos: Die im From repo:Feld aufgelisteten Repos sind immer Repos, die im aktuellen Repo-Kontext existieren . Mit anderen Worten, die Installationsquelle eines Pakets ist nicht nur eine Zeichenfolge, die den Reponamen enthält. Installierte Pakete sind mit der Identität des bereitstellenden Repos verknüpft, wie es im System vorhanden ist (oder vorhanden war).

Da die meisten Repos eine Distributionsversion haben, werden sie mit jeder neuen Fedora-Version neu definiert. (Zum Beispiel wird das " fedora" Repo zu einem Satz von Paketen, aus denen die neue Version besteht, ein völlig anderes Repo als das " fedora", das in der vorherigen Version vorhanden war.) Wenn also ein System-Upgrade durchgeführt wird, viele alte Repo-Identitäten ungültig gemacht werden.

DNF (oder Hawkey) wird verwendet, um Pakete zu verweisen, die von Repos installiert wurden, die nicht mehr @commandlineals Quell-Repo vorhanden sind. Ich sage "gewohnt", weil das (zum Glück) nicht mehr gemacht wird. Installierte Pakete, die von einem nicht mehr vorhandenen Repo stammen, zeigen ihre Quelle nicht mehr als @@commandline/ an From repo: @commandline. In der Tat dnf infozeigt , dass sie nicht mehr jede Quelle Repo. Zum Beispiel sitecopywar ein Fedora-Paket, das seitdem in den Ruhestand gegangen ist. Ich habe es vor 7 oder 8 Releases von fedoraoder updatesrepo installiert und habe es immer noch installiert:

$ 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

Es ist kein " From repo:" aufgeführt.

Dies bedeutet zum Verwechseln dass dnf list installedzeigen , dass die Verpackung (und andere wie es) mit @System(einer @) aufgeführt daneben. In gewissem Sinne haben wir nur eine Inkonsistenz gegen eine andere ausgetauscht, da diese Spalte nicht mehr immer das Quell-Repo mit @vorangestelltem ist. Trotzdem bevorzuge ich den aktuellen Stand der Dinge.

Fußnoten

  1. "... die angezeigte ..."
    (Manchmal angezeigt. "Verfügbare Pakete" werden nicht unbedingt bei jedem dnf listLauf angezeigt : Wenn die installierte Version eines Pakets die beste verfügbare Version ist, wird sie unter "Installierte Pakete" aufgeführt. Daher wäre es überflüssig, es auch unter "Verfügbare Pakete" aufzulisten. Wenn Sie "verwenden, --showduplicateswird ein Abschnitt" Verfügbare Pakete "erzwungen, der alle bekannten Instanzen enthält, unabhängig von der Version, ob installiert oder herunterladbar.)
FeRD
quelle
Ich habe diese Antwort mit einigen beobachteten Änderungen in F30 im Vergleich zu F28 (als es ursprünglich geschrieben wurde) aktualisiert und auch, um die bei dieser doppelten Frage aufgeworfenen Fragen anzusprechen .
FeRD