云网牛站
所在位置:首页 > Linux教程 > RPM包解释:依赖、解决RPM依赖关系、库、安装依赖项、DnfDragora

RPM包解释:依赖、解决RPM依赖关系、库、安装依赖项、DnfDragora

2019-06-29 16:04:32作者:晴弈稿源:云网牛站

本文介绍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依赖关系、库、安装依赖项、DnfDragora

安装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依赖关系、库、安装依赖项、DnfDragora

 

解决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

RPM包解释:依赖、解决RPM依赖关系、库、安装依赖项、DnfDragora

理论上,可以下载python3-elephant所需的所有软件包,并告诉rpm它们都在哪里,但这不方便,如果python3-neo和python3-quantity有其他运行时要求等等怎么办?依赖链可能变得非常复杂。

 

幸运的是,dnf可以帮助解决这个问题,与rpm不同,dnf知道存储库,存储库是包的集合,其元数据告诉dnf这些存储库包含哪些内容,所有Fedora系统都默认启用默认的Fedora存储库:

$ sudo dnf repolist

RPM包解释:依赖、解决RPM依赖关系、库、安装依赖项、DnfDragora

dnf可用于查询存储库以获取有关其包含的包的信息,它还可以搜索它们的软件,或者从它们安装/卸载/升级包:

$ sudo dnf search elephant

$ sudo dnf list *elephant*

RPM包解释:依赖、解决RPM依赖关系、库、安装依赖项、DnfDragora

 

安装依赖项

现在使用dnf安装软件包时,它会解析所有必需的依赖项,然后调用rpm来执行事务:

$ sudo dnf install python3-elephant

RPM包解释:依赖、解决RPM依赖关系、库、安装依赖项、DnfDragora

RPM包解释:依赖、解决RPM依赖关系、库、安装依赖项、DnfDragora

注意,dnf甚至安装了python3-igor,它不是python3-elephant的直接依赖。

 

DnfDragora:DNF的图形界面

虽然技术用户可能会发现dnf直接使用,但并不适合所有人,Dnfdragora通过为dnf提供图形前端来解决此问题,dnfdragora提供了所有dnf的主要功能。

RPM包解释:依赖、解决RPM依赖关系、库、安装依赖项、DnfDragora

以上为:dnfdragora(Fedora 30上的1.1.1-2版)列出了系统上安装的所有软件包。

同时Fedora中还有其他工具也可以管理包,GNOME软件和Discover是两个例子,GNOME软件仅专注于图形应用程序,你无法使用图形前端安装命令行或终端工具,如htop或weechat,但是,GNOME软件确实支持安装Flatpaks和Snap应用程序(参考:在Fedora 29/Fedora 28上安装Snapd和Snap应用程序),而dnf则没有,因此,它们是具有不同目标受众的不同工具,因此提供不同的功能。

 

相关主题

dnf命令_Linux dnf命令使用详解:新一代的RPM软件包管理器

精选文章
热门文章