本文介绍RPM包解释:RPM(最小的软件单位)、依赖、解决RPM依赖关系、库、安装依赖项、DnfDragora(DNF的图形界面)。
RPM:最小的软件单位
用户可以选择的Fedora版本有很多,如spins/labs/silverblue,它们都是由各种混合和匹配的软件组成,可以很好地协同工作,它们之间的区别在于每个工具的确切列表,该选择取决于他们所针对的用例,所有这些的基本单元是RPM包文件。
RPM文件是与ZIP文件或tarball类似的存档,实际上,他们使用压缩来减小存档的大小,但是,与文件一起,RPM存档还包含有关包的元数据,可以使用rpm工具查询:
$ rpm -q fpaste
fpaste-0.3.9.2-2.fc30.noarch
$ rpm -qi fpaste
Name: fpaste
Version: 0.3.9.2
安装RPM软件包时,rpm工具确切地知道添加到系统的文件,因此,删除程序包也会删除这些文件,并使系统保持一致状态,这就是为什么使用rpm安装软件比从源安装软件更受欢迎的原因。
依赖
如今,软件完全独立是很少见的,即使是fpaste,一个简单的单文件Python脚本,也需要安装Python解释器,因此,如果系统没有安装Python(参考:在Fedora 29系统中安装Python 3.8 alpha的方法),则无法使用fpaste,在打包行话中,我们说“Python是fpaste的运行时依赖”。
构建RPM包时(本文中未讨论构建RPM的过程),生成的存档包含所有这些元数据,这样,与RPM包存档交互的工具知道必须安装的其他内容,以便fpaste正常工作:
$ rpm -q --requires fpaste
/usr/bin/python3
python3
$ rpm -q --provides fpaste
fpaste = 0.3.9.2-2.fc30
$ rpm -qi python3
Name: python3
Version: 3.7.3
$ rpm -q --provides python3
python(abi) = 3.7
python3 = 3.7.3-3.fc30
解决RPM依赖关系
虽然rpm知道每个存档所需的依赖关系,但它不知道在哪里找到它们,这是设计使然:rpm仅适用于本地文件,必须准确告知它们的位置,因此,如果你尝试安装单个RPM软件包,如果rpm无法找到软件包的运行时依赖项,则会出现错误,此示例尝试安装从Fedora包集下载的包:
$ ls
python3-elephant-0.6.2-3.fc30.noarch.rpm
$ rpm -qpi python3-elephant-0.6.2-3.fc30.noarch.rpm
$ rpm -qp --requires python3-elephant-0.6.2-3.fc30.noarch.rpm
$ sudo rpm -i ./python3-elephant-0.6.2-3.fc30.noarch.rpm
理论上,可以下载python3-elephant所需的所有软件包,并告诉rpm它们都在哪里,但这不方便,如果python3-neo和python3-quantity有其他运行时要求等等怎么办?依赖链可能变得非常复杂。
库
幸运的是,dnf可以帮助解决这个问题,与rpm不同,dnf知道存储库,存储库是包的集合,其元数据告诉dnf这些存储库包含哪些内容,所有Fedora系统都默认启用默认的Fedora存储库:
$ sudo dnf repolist
dnf可用于查询存储库以获取有关其包含的包的信息,它还可以搜索它们的软件,或者从它们安装/卸载/升级包:
$ sudo dnf search elephant
$ sudo dnf list elephant
安装依赖项
现在使用dnf安装软件包时,它会解析所有必需的依赖项,然后调用rpm来执行事务:
$ sudo dnf install python3-elephant
注意,dnf甚至安装了python3-igor,它不是python3-elephant的直接依赖。
DnfDragora:DNF的图形界面
虽然技术用户可能会发现dnf直接使用,但并不适合所有人,Dnfdragora通过为dnf提供图形前端来解决此问题,dnfdragora提供了所有dnf的主要功能。
以上为:dnfdragora(Fedora 30上的1.1.1-2版)列出了系统上安装的所有软件包。
同时Fedora中还有其他工具也可以管理包,GNOME软件和Discover是两个例子,GNOME软件仅专注于图形应用程序,你无法使用图形前端安装命令行或终端工具,如htop或weechat,但是,GNOME软件确实支持安装Flatpaks和Snap应用程序(参考:在Fedora 29/Fedora 28上安装Snapd和Snap应用程序),而dnf则没有,因此,它们是具有不同目标受众的不同工具,因此提供不同的功能。