「dnf list」で倉庫名の前の「@」とはどういう意味ですか?

「dnf list」で倉庫名の前の「@」とはどういう意味ですか?

インストールされているパッケージを一覧表示するには、通常、2つのうちの1つを実行します。

昔ながらの方法はrpm -qa | grep <whatever I look for>それを使うことです。

しかし、最近はパッケージをもっと完璧に見せたいので今からdnf list --installed <whatever I look for>

ところで、結果を見ると、いくつか理解できない部分があります。

次の例を考えてみましょう。

# 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

(実際の印刷物のスペースは広いです。)

したがって、結果項目は「パッケージ」「バージョン」「repo」です。

私の場合は、次のようになります。

  • パッケージ:zsh.x86_64
  • バージョン: 5.2-5.fc24
  • 倉庫:@@コマンドライン

結果表はここまで理解していますが、リポジトリ名の前にある「@@」2つがどういう意味か混乱します。

また、「commandline」は、パッケージがコマンドラインからインストールされたことを示します(RPMをダウンロードして実行)。dnf install whatever.rpm コマンドラインから、等。 )。しかし、zshインストールが完了したと確信していますdnf install zsh

しかし、それはすべてではありません。

システムのリポジトリに複数のパッケージがインストールされていますが@System(インストールされていない場合もあります@fedora)、同様のエントリがあります。fedora@@@commandline

それでは、リポジトリ名の前またはこの単語は@正確に何を意味しますか?@@

@@commandlineリポジトリからインストールしたと確信していますが、なぜそれほど多くの重要なパッケージをインストールしましたか?

答え1

ここに少し光を投げてみましょう。

dnf list all | lessすべてのパッケージ(インストール済みパッケージと利用可能なパッケージの両方)を表示します。出力には、「インストール済みパッケージ」と「使用可能パッケージ」の2つの部分があります。すべての「インストール済みパッケージ」の前には@記号が付いていますが、「利用可能なパッケージ」はそうではありません。そのため、@パッケージがインストールされているという印があると思います。パッケージがインストールされたが元のリポジトリが削除された場合は、@@フラグが提供されると思います。

dnf ソースコードは以下でホストされています。https://github.com/rpm-software-management/dnf。 srcコードをダウンロードした後にディレクトリからgrep commandline -ri .aを実行すると、何も返されません。しかし、githubページにはこれに関する言及があります。

パッケージ管理には、RPM、libsolv、および Hawkey ライブラリを使用します。

だからHawkeyを見てみると、次の場所にある同じプロジェクトでホストされます。https://github.com/rpm-software-management/hawkey。コードを見ると、grep -ri commandline .いくつかの結果が表示されます。

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

だからパッケージcommandlineから。コマンドに表示されるhawkey理由は、コードが正しく機能していないようです。@comandlinednf listdnfhawkey

答え2

(免責事項:実際にこれらの事項を議論する文書を見たことがないため、このコンテンツのソースを提供することはできません。 、そして単に推測です。わあああ長すぎます。 )

DNFはリポジトリを表すために@を追加します。インストール済みパッケージがインストールされました~からdnf listコンテキスト。あなたが指摘したように:

私のシステムには、@System、@fedora(ただし@を持たないfedoraもあります)、@@commandlineなどのいくつかのパッケージがインストールされています。

しかし、実際には何も見えないでしょうfedoraインストール済みリスト内のすべてのパッケージには@-repoがソースとしてマークされているためです。 (実行し、チェックして使用してストレージ。sudo dnf list installedこれを確認するインストール済みリストの値と同じです。dnf infoFrom repo:@From repo: fedora@fedora

しかし、一部の買戻契約は名前付き@前にサインがあります。 JohnKochがHawkeyソースで見つけたように、「@commandline」は「コマンドラインストア」の「ストア名」として定義されます。したがって、インストールされているパッケージは1つだけリストに表示されます@@commandline。名前が独自の@記号で始まる混乱したリポジトリです。dnf listFrom repo: @commandline

dnf infoインストールされたパッケージに表示されるRepository: @Systemこれは@という別の仮想ストレージです。これは、@System現在インストールされているパッケージセットと@commandline仮想ストレージを保持する仮想ストレージのようです。ソースコードリポジトリパッケージはどこかから来ましたが、どの倉庫でも来ません。

@commandlineこの回答を最初に書いて以来、andの意味@Systemとそれらの間の関係が変わったようです。いくつかの点ではより一貫性があり、@commandline使用方法に関する以前の反対意見をいくつか解決します。もう見られないどの一覧表示されたインストール済みパッケージは で提供され、帯域@@System外インストールが表示されますFrom repo: @commandline@@commandlineリストのコンテキストで)。dnf info帯域外にインストールされたパッケージは通常、次のように表示されます。

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

私はdnf reinstall remi-release(なぜならパッケージを作るならはいremiリポジトリから)次のように変更しました。

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

2020年以降の変更の更新

パッケージソースコードストアに慣れる現在、パッケージデータベースの既存のリポジトリに依存していますが、幸いなことにこれが変更されました。今DNF履歴データベースの問合せ、現在のパッケージストアセットの代わりにインストールされているパッケージに関する情報を取得します。したがって、システムのアップグレード中にソースリポジトリの名前が保持されます。

以前、現在は役に立たない情報

ソース・リポジトリーに関するその他の点:From repo:このフィールドにリストされているリポジトリーは、常に存在するリポジトリーです。現在のストレージコンテキストで。つまり、パッケージのインストールソースには、リポジトリ名を含む文字列ではなく、リポジトリ名を含む文字列も含まれます。インストールされたパッケージは次にリンクされます。アイデンティティシステムに存在する(またはすでに存在する)プロビジョニングストアに関する情報。

ほとんどのリポジトリはディストリビューションによって異なるため、新しいFedoraバージョンごとに上書きされます。 (たとえば、fedoraリポジトリは新しいバージョンを構成するパッケージのセットになり、fedora以前のバージョンに存在していたリポジトリとはまったく異なります。したがって、システムのアップグレードが完了するたびに以前のバージョンの多くはリポジトリIDが無効なくなります。

DNF (または hawkey) は、存在しなくなったリポジトリからソースリポジトリとしてインストールされた@commandlineパッケージをダウングレードするために使用されます。 (ありがたいことに) もうそんなことが起こらないので「おなじみだ」と言います。存在しなくなったリポジトリにインストールされたパッケージは、もはやソースを@@commandline/としてマークしませんFrom repo: @commandline。実際、dnf infoこれは彼らがもはや持っていないことを意味します。どのソースコードストア。たとえば、sitecopyFedora パッケージは廃止されました。 7または8より前のfedoraリポジトリからupdatesインストールされていますが、まだインストールされています。

$ 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

From repo:" "はリストにありません。

これは混乱しても、次のものが表示されるdnf list installedことを意味します。それパッケージ(および他の同様のパッケージ)@Systemの横に(1つ)がリストされています。@したがって、ある意味では、ある不一致を別の不一致と交換することです。なぜなら、列はもはや常に@ソースストアの前に付いていないからです。それでも私は今の状況が良いです。

脚注

  1. 「...表示されています...」
    (時々表示されます。「利用可能なパッケージ」が実行されるたびに必ず表示されるわけではありませんdnf list。 「利用可能なパッケージ」(以下は重複しています)を使用すると、 --showduplicatesバージョン、インストールの有無、ダウンロード可能に関係なく、「利用可能なパッケージ」セクションに既知のすべてのインスタンスが含まれます。)

関連情報