「dnfリスト」のリポジトリ名の前にある「@」はどういう意味ですか?


10

インストール済みのパッケージを一覧表示する場合、通常は2つの方法のいずれかで行います。

昔ながらの方法ではを使用していますが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

(実際の印刷ではスペースが広くなります)

したがって、結果のエントリは«package»«version»«repo»です。

私の例では:

  • パッケージ:zsh.x86_64
  • バージョン:5.2-5.fc24
  • リポジトリ:@@ commandline

これまでのところ、結果のテーブルは理解できますが、リポジトリ名の前にある2つの「@@」の意味がわかりません。

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

しかし、それだけではありません。

私はいくつかのレポからインストールした私のシステムでパッケージしました@System@fedora(ただしもありますfedoraせず@)とのようなものを@@commandline

それでは、レポ名の前で@それは何を@@意味するのでしょうか。

そして、どうして私は@@commandlineリポジトリからそれらのパッケージをインストールしたと確信していますが、そこから非常に多くの著名なパッケージをインストールしたのですか?

回答:


2

ここに玉を引き寄せるためにレンガを投げましょう。

dnf list all | lessすべてのパッケージを表示します(インストール済みパッケージと使用可能なパッケージを含む)。出力には、「インストール済みパッケージ」と「利用可能なパッケージ」の2つのセクションがあります。すべての「インストール済みパッケージ」の前には@記号が付いていますが、「使用可能なパッケージ」の前にはありません。したがって@、パッケージがインストールされていることを示す兆候だと思います。パッケージがインストールされているが、元のリポジトリが削除されている場合は、@@サインが表示されていると思います。

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

RPM、libsolv、hawkeyライブラリを使用してパッケージ管理を行います。

そこで、https://github.com/rpm-software-management/hawkeyにある同じプロジェクトでホストされている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ます。なぜコマンドに@comandline表示されるのかという疑問についてはdnf listdnfコードがhawkey適切に使用されていないのではないかと思います。


のmanページはdnfこれについて信じられないほど沈黙しているようです。'@'がインストール済みのパッケージを示しているとしますが、 '@@'は非リポジトリソースから手動でインストールされたということですか?私は誰かが明確にしてくれることを本当に望みます。
ポールモン

1
「れんがを投げて翡翠をここに引き寄せましょう。」...私はその驚くほどわかりにくい表現が何を意味するのかまったくわかりません。私はそれが好きだと思います。😍 「イディオム!」
FeRD 2019年

1

(免責事項:これらの情報を提供することはできません。これらのことを実際に説明するドキュメントを私は見たことがないためです。従うべき情報は、検査、ブラックボックスの実験、無計画で推測できたことにすぎません。試行錯誤、そして昔ながらの当て推量。また、公正な警告、それは長すぎることを説明するのに過度の説明です。)

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

私のシステムには、リポジトリ@ System、@ fedora(ただし、@なしのfedoraもあります)、および@@ commandlineなどのパッケージからインストールしたパッケージがいくつかあります。

しかし実際には、すべてのパッケージがソースとして@ -repoを表示fedoraしているため、インストール済みリストにパッケージが含まれることはありません。(実行sudo dnf list installedして検査することで確認できます。@記号が1つもないリポジトリは表示されません。)を使用してパッケージの情報を表示するとdnf info、「From repo:」フィールドには、を使用しないリポジトリ名が表示され@ます。(したがって、「From repo: fedora」は絶対に可能であり@fedora、インストール済みリストと同等です。)

ただし、一部のリポジトリには、正面に記号が付いてい@ます。JohnKochがホークソースで発見したように、「@ commandline」は「commandline repo」の「repo name」として定義されています。そのため@@commandlinednf listリストでは単にインストールされたパッケージを示していますFrom repo: @commandline。紛らわしいことに、独自の@記号で始まる名前が付けられたリポジトリです。

dnf infoインストールされているすべてのパッケージでが表示されます。Repository: @Systemこれは、別の@名前の仮想リポジトリです。@System現在インストールされているパッケージのセットを保持する仮想リポジトリと、パッケージがどこから来たのか、どのリポジトリからも来なかっ@commandlineた仮想ソースのリポジトリと思われます。

意味@commandline@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

ソースリポジトリに関するもう1つのこと:From repo:フィールドにリストされているリポジトリは、常に現在のリポジトリコンテキストに存在するリポジトリです。つまり、パッケージのインストールソースは、リポジトリ名を含む文字列だけではありません。インストールされたパッケージは、システムに存在する(または存在した)提供リポジトリのIDにリンクされます。

ほとんどのリポジトリはバージョン管理されているため、Fedoraの新しいリリースごとに再定義されます。(たとえば、 " fedora"リポジトリは新しいリリースを構成するパッケージのセットになるためfedora、以前のリリースで存在していた " "とは完全に異なるリポジトリです。)したがって、システムのアップグレードが行われるたびに、多くの古いリポジトリのID無効になります。

@commandlineソースリポジトリとして存在しなくなったリポジトリからインストールされたパッケージを委任するために使用されるDNF(またはhawkey)。「ありがたい」と言います。これは(ありがたいことに)もう行われていないためです。存在しないレポジトリからインストールされたインストール済みパッケージでは、ソースが@@commandline/ として表示されなくなりFrom repo: @commandlineます。実際には、dnf info彼らはもはや持っていることを示して任意のソースレポを。たとえば、sitecopy廃止されたFedoraパッケージでした。私はからそれをインストールしfedoraたりupdates、レポ7つのまたは8のリリース前に、まだそれがインストールされています:

$ 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すると、インストールされているかダウンロード可能かに関係なく、バージョンに関係なく、すべての既知のインスタンスを含む「利用可能なパッケージ」セクションが強制されます。

私はこの回答を更新し、F28と比較してF30でいくつかの観察された変更(それが最初に書かれたとき)と、この重複した質問で提起された問題に対処するために更新しました。
FeRD
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.