dnf list中的回购名称前面的“ @”是什么意思?


10

当我要列出已安装的软件包时,通常以两种方式之一进行。

老式的方法是使用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»«版本»«repo»。

在我的示例中是:

  • 包:zsh.x86_64
  • 版本:5.2-5.fc24
  • 回购:@@ commandline

到目前为止,结果表是可以理解的,但是我对存储库名称前面的两个“ @@”的含义感到困惑。

另外,“命令行”建议从命令行安装软件包(下载RPM,然后dnf install whatever.rpm 在命令行中进行安装,等等)。但是我很确定我已经zsh通过安装了dnf install zsh

但这还不是全部。

我从回购安装我的系统上几个包@System@fedora(但有也fedora没有@)之类的东西@@commandline

那么,在回购名称前面@或那@@到底意味着什么?

@@commandline尽管我确信已从存储库中安装了很多杰出的软件包,但为什么我又安装了这么多杰出的软件包呢?

Answers:


2

让我扔一块砖块来吸引一些玉石。

dnf list all | less显示所有软件包(包括已安装和可用的软件包)。输出分为两部分:“已安装的软件包”和“可用的软件包”。所有“已安装的软件包”前面都带有@符号,而“ Available Packages”则没有。因此,我相信@迹象表明软件包已安装。如果安装了一个软件包,但是删除了它的原始仓库,我想@@给出了迹象。

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 list命令中显示,我的猜测是dnf代码无法hawkey正确使用。


似乎的手册页dnf对此无言以对。假设“ @”表示已安装的软件包,那么“ @@”是否意味着它是从非回购源手动安装的?我真希望有人能澄清一下。
polemon '16

1
“让我扔一块砖块来吸引一些玉石。” ...我绝对不知道那种令人敬畏和难以理解的表达是什么意思,我想我喜欢它。😍 “成语!”
FeRD

1

(免责声明:我无法提供任何相关资源,因为我从未见过任何实际讨论这些事情的文档。要遵循的信息只是我通过检查,黑匣子实验,偶然发现所能提供的信息)反复试验和简单的旧猜测。此外,公平警告,这太夸张了太长。)

DNF 在上下文中添加一个@表示从中安装了已安装软件包的存储库。如您所述:dnf list

我在系统上从回购@ System,@ fedora(不过也有没有@的软呢帽)和@@ commandline之类的系统上安装了几个软件包。

但是实际上,您永远不会fedora安装的列表中看到任何软件包,因为那里的每个软件包都显示一些@ -repo作为其源。(您可以通过运行sudo dnf list installed和检查来验证;没有至少一个@符号的情况下,没有列出任何存储库。)当您使用来查看软件包的信息时dnf info,“ From repo:”字段将显示该存储库名称,而无需使用@。(因此“ From repo: fedora”是绝对可能的,并且等效@fedora于已安装的列表。)

但是,一些回购的命名@在前面的迹象。正如JohnKoch在Hawkey来源中发现的那样,“ @ commandline”被定义为“ commandline repo”的“ repo name”。因此,@@commandlinednf list简单地列出表示已安装的软件包From repo: @commandline,它混淆的被赋予的名称开始有自己的@ -sign回购。

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

关于源存储库的另一件事:From repo:字段中列出的存储库始终是当前存储库上下文中存在的存储库。换句话说,软件包的安装源不仅是包含存储库名称的字符串,还包括存储库。已安装的软件包链接到身份系统中存在(或存在)的提供库。

由于大多数存储库都是发行版本,因此在每个新的Fedora版本中都会对其进行重新定义。(例如,“ fedora”回购成为构成新版本的一组软件包,这与“fedora与先前版本中存在 ”。)因此,每当进行系统升级时,都会有许多旧的repo身份变得无效。

DNF(或hawkey)用于从不再存在的存储库中释放已安装的软件包@commandline作为源存储库。我说“用于”是因为(幸好)不再这样做了。来自不再存在的仓库的已安装软件包将不再以@@commandline/形式显示其源From repo: @commandline。事实上,dnf info表明他们不再有任何来源的回购。例如,sitecopy一个Fedora软件包从那以后就被淘汰了。我从fedoraupdatesrepo 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. “ ...显示的内容...”
    (有时显示。“可用软件包”不一定会在每次dnf list运行时都显示:如果软件包的安装版本是最佳可用版本,则将其列在“已安装的软件包”下因此,将其也列在“可用软件包”下将是多余的。使用 --showduplicates将强制执行“可用软件包”部分,其中包括所有已知实例,无论版本如何(安装或可下载)。

我已经用与F28(最初编写时)相比在F30中观察到的一些变化来更新了此答案,并且还解决了这个重复问题中提出的问题
FeRD
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.