web-dev-qa-db-ja.com

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

インストール済みのパッケージを一覧表示する場合、通常は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

(実際のプリントアウトのスペースは広いです)

したがって、結果のエントリは次のようになります。"パッケージ""バージョン""リポジトリ"。

私の例では、それは次のとおりです。

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

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

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

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

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

では、その@または@@は、レポ名の前で正確に何を意味するのでしょうか。

そして、なぜ私は@@commandlineからこれほど多くの著名なパッケージをインストールしたのですか?

10
polemon

ここに翡翠を引き付けるためにレンガを投げましょう。

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

dnfソースコードは https://github.com/rpm-software-management/dnf でホストされています。 srcコードをダウンロードした後、ディレクトリでgrep commandline -ri .を実行すると、何も返されません。ただし、その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)

したがって、commandlinehawkeyパッケージから取得されます。なぜ@comandlinednf listコマンドに表示されるのかという疑問については、dnfコードがhawkeyを適切に使用できないと思います。

2
JohnKoch

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

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

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

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

ただし、一部のリポジトリはnamedであり、先頭に_@_記号が付いています。 JohnKochがタカの情報源で発見したように、「@ commandline」は、「コマンドラインリポジトリ」の「リポジトリ名」として定義されています。したがって、_@@commandline_リストの_dnf list_は、インストールされたパッケージ_From repo: @commandline_を示しているだけです。これは、紛らわしいことに、独自の@記号で始まる名前が付けられたリポジトリです。

インストールされているパッケージの_dnf info_には、_Repository: @System_が表示されます。これは、他の_@_という名前の仮想リポジトリです。 _@System_は現在インストールされているパッケージのセットを保持する仮想リポジトリであり、_@commandline_は仮想パッケージsource repoがパッケージが来たときから来ていないときのようです任意のレポから。

_@commandline_と_@System_の意味、およびそれらの相互関係は、最初にこの回答を書いてから変わったようです。いくつかの点で、より一貫性があり、_@commandline_の使用方法に関する以前の反対意見のいくつかに対処しています。 __anyインストールされたパッケージが_@@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リポジトリのパッケージisであるため)、次のように変更されます。

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

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

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

DNF(またはhawkey)は、存在しないリポジトリからインストールされたパッケージをソースリポジトリとして_@commandline_に委任するために使用されていました。私は「慣れている」と言います。なぜなら、それは(ありがたいことに)もう行われていないからです。存在しないレポジトリからインストールされたパッケージは、ソースを_@@commandline_/_From repo: @commandline_として表示しなくなります。実際、_dnf info_は、ソースリポジトリがなくなったことを示していますanyソースリポジトリ。たとえば、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_がthatパッケージ(およびそのような他のパッケージ)を表示し、その横に_@System_(1つの_@_)が表示されることを混乱させます。したがって、ある意味では、ある不整合を別の不整合と交換しただけです。その列は、_@_が先頭に付いたソースリポジトリであるとは限らないためです。それでも、私は現状を好みます。

脚注

  1. 「...表示されているもの...」
    (表示される場合があります。「使用可能なパッケージ」は、_dnf list_の実行ごとに表示されるとは限りません。インストールされているパッケージのバージョンが使用可能な最良のバージョンである場合は、「インストールされているパッケージ」の下に表示されるため、 「Available Packages」の下にリストすることは冗長になります。_--showduplicates_を使用すると、「Available Packages」セクションが強制的にインストールされます。これには、バージョンに関係なく、インストールされているかダウンロード可能かに関わらず、すべての既知のインスタンスが含まれます。
1
FeRD