インストール済みのパッケージを一覧表示する場合、通常は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
(実際のプリントアウトのスペースは広いです)
したがって、結果のエントリは次のようになります。"パッケージ""バージョン""リポジトリ"。
私の例では、それは次のとおりです。
これまでのところ、結果のテーブルは理解できますが、リポジトリ名の前にある2つの「@@」の意味がわかりません。
また、「commandline」は、パッケージがコマンドラインからインストールされたことを示します(RPMをダウンロードしてから、dnf install whatever.rpm
コマンドラインでなどを実行します)。ただし、dnf install zsh
を使用してzsh
をインストールしたことは確かです。
しかし、それだけではありません。
システムにいくつかのパッケージをリポジトリ@System
、@Fedora
(ただし、@
なしのFedora
もあります)および@@commandline
などからインストールしました。
では、その@
または@@
は、レポ名の前で正確に何を意味するのでしょうか。
そして、なぜ私は@@commandline
からこれほど多くの著名なパッケージをインストールしたのですか?
ここに翡翠を引き付けるためにレンガを投げましょう。
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)
したがって、commandline
はhawkey
パッケージから取得されます。なぜ@comandline
がdnf list
コマンドに表示されるのかという疑問については、dnf
コードがhawkey
を適切に使用できないと思います。
(免責事項:これらのことを実際に説明しているドキュメントを見たことがないため、これらのソースを提供することはできません。以下の情報は、検査、ブラックボックスの実験、無計画を通じて私が推測できたものにすぎません。試行錯誤、そして昔ながらの当て推量。また、公正な警告ですが、それは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つの_@
_)が表示されることを混乱させます。したがって、ある意味では、ある不整合を別の不整合と交換しただけです。その列は、_@
_が先頭に付いたソースリポジトリであるとは限らないためです。それでも、私は現状を好みます。
dnf list
_の実行ごとに表示されるとは限りません。インストールされているパッケージのバージョンが使用可能な最良のバージョンである場合は、「インストールされているパッケージ」の下に表示されるため、 「Available Packages」の下にリストすることは冗長になります。_--showduplicates
_を使用すると、「Available Packages」セクションが強制的にインストールされます。これには、バージョンに関係なく、インストールされているかダウンロード可能かに関わらず、すべての既知のインスタンスが含まれます。