【dnf5文档】新一代RedHat自动化包管理器

news2024/12/22 23:05:55

前言

HI,CSDN的码友们,距离上一次我发文章已经过去了半年的时间,现在我又来介绍自己新发现和探究的开源技术了。计算机的发展总是飞速的,当我在写这篇文章的时候,Fedora rawhide已经进入了40版本、默认采用的自动化包管理器为dnf5,并且发布了稳定运行的GNOME45 beta。以下是部分图片,记录下来留作纪念吧。

Fedora rawhide
本文的信息来源和依据:
dnf5文档
dnf文档
dnf5GitHub项目
dnf5速度对比
dnf插件


简介

这回我要介绍的是RedHat系Linux发行版的新一代包管理器dnf5。由于我使用了Fedora rawhide默认的yum源只收录最新的rpm软件包,所以我总是能够接触到最新的Linux内核、驱动与软件包。现在服务器上部署的 rpm系Linux可能大多还是CentOS,也就是使用yum作为包管理器,甚至可能还没有使用上dnf,更不用说最新的dnf5。也许企业基于稳定的考量,不会使用最新且可能有bug的技术,不过作为个人电脑桌面Linux来说,使用最新的软件包拿来体验应该是完全没有问题的。我就把我自己的使用体验和经验分享一下吧。本文的信息和依据主要来自官方文档,可以说是对文档的翻译说明。虽然文章讲述的是dnf5,但是包管理器前端命令的选项都是大同小异,这些选项和前辈包管理器其实差不多,大家也可以拿来看一看。

我首先介绍一下RPM系Linux包管理器和它们的发展过程与特点。

  1. RPM (Red Hat Package Manager): RPM是最早的版本,首次发布于1997年。它包含了一组核心实用程序,用于管理.rpm文件,这些文件是软件包的预编译二进制版本或者源代码。RPM的主要特点包括:可以查询包数据库以获取有关已安装的包的信息;可以升级包,同时自动处理依赖关系;可以验证包的完整性等。

  2. YUM (Yellowdog Updater, Modified): YUM是在RPM的基础上开发的,首次发布于2000年。它是第一个能自动解决软件包依赖问题的RPM系包管理器。YUM的主要特点是:自动下载RPM包并解决依赖关系;提供了一个简单的命令行接口;可以自动安装和升级软件包;支持多个仓库等。

  3. DNF (Dandified YUM): DNF是在YUM的基础上开发的,首次发布于2012年。DNF的主要改进是在包管理器的内部结构和依赖解析算法上。DNF的主要特点包括:提供了更好的依赖关系解决方案;提供了更好的API;改进了性能;增加了新的特性,如快照和回滚等。

  4. DNF 5: 在DNF的基础上,DNF 5进一步改进了包管理器的性能和可用性。DNF 5的主要特点包括:支持并行下载;改进了软件包的安装和升级过程;提供了更好的交互式命令行接口;增强了插件系统等。

可以看到DNF这个包管理器已经是第5个版本了,说明RedHat以及Fedora社区开发者、个人贡献者对于包管理器可以说是非常重视了,只是可能它的开发比较低调。一点点去修改,也不会在发行版上突然就默认使用最新的包管理器。我在Fedora rawhide(Fedora的试验田)上的dnf5也是自己安装的,并不是说rawhide就会自带dnf5.dnf5最大的亮点可能是使用了C++编写,速度比使用Python编写的dnf要快,并且也不容易出现依赖问题。


正文

DNF5是一个命令行包管理器,可以以一致的方式自动执行安卓、升级、配置和删除计算机程序的过程。

libdnf5是包管理库。现在发展成为了一个多功能库,通过它来构建加载存储库、查询包、解析依赖项和安装包的自定义工具。

它由libsolv提供支持,并使用易于使用的编程接口进行包装。libsolv 的功能使得软件包管理器能够更好地处理依赖关系,并确保软件包的安装和升级过程更加可靠和一致。许多流行的 Linux 发行版使用 libsolv 或基于 libsolv 开发自己的依赖关系解析器。
三个软件包
DNF5对外有开发接口,因此开源开发者也可以根据自己的想法和开放的接口自己做一个基于DNF5的包管理器并且带上自己特色,比如加上图形界面、加入deb包名转rpm包名的能力等。以下是DNF5对于几种编程语言的绑定情况:

Languagesupport
C++完全支持
Python3完全支持
Perl5部分功能支持
Ruby部分功能支持
Go暂不考虑支持(寻找GO开发志愿者)
C语言不支持(选择C++即可)

安装dnf5

sudo dnf install dnf5

当然这么做的前提是你已经使用dnf作为包管理器,如果你现在的包管理器是yum,也就使用yum就好了。
那么dnf5软件包对于的命令就是dnf5,如果你觉得dnf5这个命令看起来敲起来很难受,你可以使用软连接指定过去。

sudo ln -s /usr/bin/dnf5 /usr/bin/dnf

建立元数据缓存命令

sudo dnf5 makecache

这其实就是在dnf5 update之前将源中的元数据(版本信息)等缓存起来,但是有时候缓存可能会失效(元数据太老旧)可以先清理再缓存。这个缓存的问题呢,对于不同执行的用户来说可能有自己的缓存,所以比如你习惯了使用sudo dnf5那么你就一直sudo这种形式就好;如果你习惯先切换到root用户再更新或建立缓存,那就继续保持。不然的话,可能会为不同用户各自建立缓存,这样会占用更多的磁盘空间。

sudo dnf5 clean all && sudo dnf5 makecache

安装和更新命令
模板:

sudo dnf5 install [options] <package-name>
sudo dnf5 upgrade/update [options] <package-name>

这里的package-name可以是远程的包或者命令的名字也可以是本地的rpm包。由于安装和更新其实本质都是一样的所以就放到一起了。我也不知道为什么,在dnf5强调了upgrade的存在,在这之前都是使用update,不过在当前版本的dnf5.这二者没有什么差别;如果你的要求是更新所有软件包,可以选择upgrade.

选项:
–allowerasing:
允许删除已安装的软件包以解决任何潜在的依赖性问题。

–minimal:
仅将软件包更新到提供错误修复、增强功能或安全问题修复的最低可用版本

–best:
当多个软件包出现冲突问题的时候,会根据综合情况(版本、稳定性等)自动选择最合适的那个软件包。

–skip-broken:
当出现软件包依赖问题无法解决的时候,出问题的软件包不安装(跳过)

–forcearch=x86_64/aarch64
指定待安装软件包的CPU架构(无视你的主机系统的架构情况)

–advisory-severities=[critical/important/medium/low/none]
仅考虑具有指定严重性的建议中包含的内容

常见的安全公告严重级别:
Critical(严重):指示严重的漏洞,可能导致系统受到远程攻击并完全受损。
Important(重要):指示较为重要的漏洞,可能导致系统受到攻击并有一定的风险。
Moderate(中等):指示中等风险的漏洞,可能导致系统遭受某些攻击或数据泄露。
Low(低):指示较低的风险漏洞,可能对系统的影响较小。
None(无):指示没有特定的严重级别要求。
使用 --advisory-severities 选项,你可以将这些严重级别中的一个或多个作为参数传递给 dnf update 命令来仅更新满足指定严重级别要求的安全公告。这有助于根据你的需求选择性地安装或更新具有特定安全级别的软件包,从而确保系统的安全性和稳定性。


降级命令

降级命令可以说是非常重要了,在更新到最新的软件包后完全有可能出现一堆bug,这时候就需要降级命令来回退rpm包的版本。

sudo dnf5 downgrade [options] <package-name>

例子:

sudo dnf5 downgrade nano-0:6.0-2.fc36

当然了,话又说回来,自动化包管理器毕竟是依靠源里面的软件包index工作的,无论是升级还是降级,都需要你的源里面有对应的软件包,也就是说你的源里必须有低版本的软件包才能够降级。

交换命令

sudo dnf5 [options] <remove-name> <install-name>

这其实就是先卸载旧的软件包再安装新的软件包
例子:

sudo dnf5 swap mlocate plocate
sudo dnf5 swap nano vim

包搜索命令

sudo dnf5 search [options] <pattern>

通过将用户给定的关键字与各种元数据进行匹配来搜索包,不区分大小写。

–all:
至少选出一个软件包来,会从包名、说明、摘要等信息中搜查,属于模糊搜索、搜索范围特别大。


包移除命令

sudo dnf5 remove <package-name>

从系统中删除指定的已安装的包,如果想仅删除这个包但是保留这个包的依赖项,可以使用clean_requirements_on_remove=False.

可以搭配rpm命令一起使用,rpm命令负责查询待删除的包,dnf命令用于安装或移除包。以下是一个非常常见的例子:
内核包移除前
批量移除包包移除后

由于Fedora的内核非常新,每个一两天就会更新一次,这些内核会堆积在/boot里,但/boot分配的空间肯定是相对较少的,所以需要在更新内核后把旧的内核给删除,而旧的内核软件包的数量是较多的,这样就可以根据包名的相同部分批量删除rpm包。当然,这里要注意下,当你使用*等通配符去匹配字符串的时候请无比加上一对"".

自动移除命令

sudo dnf5 autoremove

这个命令是用于删除多于的rpm包,dnf会自动查找rpm数据库,寻找没有被依赖的软件包并删除,执行这个命令前一定要小心,虽然有的软件包没有被依赖,但是也是可能会出错的,因此我会在执行这条命令之前重构rpm依赖数据库,避免dnf分析错误。

sudo rpm --rebuilddb

清理命令

sudo dnf clean [cache-types]

这个命令前面已经讲到了,用于删除元数据或将缓存标记为过期。比如说当你认为你应该可以更新某个包的新版本但是直接更新却提示说已经是最新版本了,那么很有可能就是你的包缓存过期了还没更新包index,也许缓存中是昨天的信息,导致你无法获取今天刚发布的新rpm包,这时候你就可以先清理再缓存/更新。

cache-types含义
all所有存储库缓存的数据
packages所有缓存的包
dbcachedbcache元数据

以上都是非常常用的命令,下面是一些不太常用的命令,大家可以略过这部分


发行版同步命令

sudo dnf5 distro-sync

其中distro是Linux发行版的意思,sync是同步的意思。当你执行完update/upgrade时,使用最新的软件包可能是会破坏依赖的,那么这个命令其实就是使用尽可能新的软件包(在不会破坏依赖性的前提下)。

dnf distro-sync是一个用于系统包管理的命令,它用于解决软件包之间的依赖关系冲突。当你运行dnf distro-sync命令时,它会根据系统中已安装的软件包的版本和依赖关系,升级、降级或删除软件包,以确保系统中的软件包保持一致和可用。

与dnf upgrade命令相比,dnf distro-sync更加强大和细粒度。dnf upgrade主要用于升级系统中的所有软件包到其最新可用版本,而不考虑依赖关系。它会尝试将所有软件包升级到最新版本,但如果存在依赖关系问题,可能会导致一些软件包无法升级或出现冲突。

dnf distro-sync更注重系统中软件包的一致性和依赖关系。它会检查系统中所有软件包的版本和依赖关系,并尝试通过升级、降级或删除软件包来解决任何冲突。它可以确保系统中的软件包与系统发布版本或存储库中的软件包保持一致。

因此,如果你想要确保系统中的软件包与系统发布版本或存储库保持一致,包括解决依赖关系冲突,你可以使用dnf distro-sync命令。如果你只想简单地将系统中的软件包升级到它们的最新版本,而不考虑依赖关系,你可以使用dnf upgrade命令。

组管理

sudo dnf5 group <subcommamd> [options] [<group-name>]

dnf5命令和前几代dnf命令前端最大的不同可能就是重新定义了子命令,将命令和子命令区分开来。

command作用
list列出当前系统的组情况
info打印指定组的相关信息
install安装指定组
remove移除指定组
options作用
–avaliable仅显示可用组
–install仅显示已安装的组
–hidden显示隐藏的组
–contains-pkgs仅显示包含具有指定名称的组
–with-options与install子命令一起使用,包含组中的可选包

例子:

sudo dnf5 group list --hidden #显示所有组的列表,包括隐藏的组
sudo dnf5 info "*xfce*"  #显示与xfce桌面相关的所有组的详细信息
sudo dnf5 group install mysql --with-options  #安装mysal包含可选软件包的组

环境管理

sudo dnf5 environment <subcommand> [options] [<environment-name>]

sudo dnf5 environment list
sudo dnf5 environment info "KDE Plasma Workspaaces"

dnf5 environment用于管理软件包环境,即一组预定义的软件包集合,而dnf5 group用于管理软件包组,即一组相关的软件包。两者都可以方便地安装、管理和删除软件包集合,但它们的操作对象和功能略有不同。
subcommand:list/info
options:–avaliable/–installed
这个命令使用场景实在比较少,这里不再赘述了。

在dnf5命令的文档里还有一些其他命令,大家可以自行去了解。


下面是对dnf的插件的讲解

dnf插件也是以软件包的形式发布和安装,可以通过dnf包管理器直接安装,它们通常以dnf-plugin或dnf-plugins开头。

sudo dnf5 install dnf-plugins-core                    #提供了一些核心插件
sudo dnf5 install dnf-plugin-system-upgrade   #用于系统升级的插件
sudo dnf5 install dnf-plugin-protectbase          #允许你保护特定存储库的软件包,以防止被其他存储库中的软件包覆盖
sudo dnf5 install dnf-plugin-versionlock           #允许你锁定特定软件包的版本,放置其被升级或降级

dnf额外插件

# Ferdora Linux版本升级
sudo dnf upgrade --refresh               # 刷新软件包缓存
sudo dnf system-upgrade download --releasever=38   # 下载指定Fedora发行版的软件包
sudo dnf system-upgrade reboot     # 重启并安装新操作系统

更新Fedora Linux的官方文档


未完待续…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/861930.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亚马逊推出新卖家论坛!提供多种新功能!

亚马逊欧洲站发布公告称新推出的亚马逊卖家论坛新论坛提供更简单的导航和搜索&#xff0c;高级过滤功能&#xff0c;投票功能以及个性化设置&#xff0c;以下是公告内容&#xff1a; 我们推出了新的亚马逊卖家论坛体验&#xff0c;卖家每天都可以在这里寻找答案&#xff0c;帮…

560. 和为 K 的子数组

思路 本题的主要思路为创建一个哈希表记录每个0~i的和&#xff0c;在遍历这个数组的时候查询有没有sum-k的值在哈希表中&#xff0c;如果有&#xff0c;说明有个位置到当前位置的和为k。   有可能不止一个&#xff0c;哈希表负责记录有几个sum-k&#xff0c;将和记录下来。这…

网络远程USB共享 VirtualHere USB Server v4.5.8 Crack

VirtualHere 允许通过网络远程使用 USB 设备&#xff0c;就像本地连接一样&#xff01; 传统上&#xff0c;USB 设备需要直接插入计算机才能使用。有了 VirtualHere&#xff0c;这不再是必需的&#xff0c;网络本身变成了传输 USB 信号的电缆&#xff08;也称为 USB over IP、U…

勘探开发人工智能技术:机器学习(2)

0 提纲 3.1 k k k 近邻算法 3.2 决策树 3.3 k k kMeans 3.4 如何定义机器学习问题 3.5 线性回归 1 k k k 近邻算法 开卷考试, 在桌上堆的资料越多, 越是 “见多识广”. 1.1 核心思想 具有讽刺意味的是: 机器学习最基本的算法居然是不学习, 也称为惰性学习 (lazy learni…

Blazor简单教程(1.1):Razor基础语法

文章目录 前言语法介绍生命C#代码控件绑定简单绑定双向绑定带参数的函数绑定 前言 Blazor最重要的是Razor组件和cshtml页面。两个最大的区别就是cshtml是完整的html,Razor是不完整的html 微软Razor 语法官方文档 我的Blazor基础语法个人总结 语法介绍 生命C#代码控件 code…

Stable Diffusion - 幻想 (Fantasy) 风格与糖果世界 (Candy Land) 的人物图像提示词配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132212193 图像由 DreamShaper8 模型生成&#xff0c;融合糖果世界。 幻想 (Fantasy) 风格图像是一种以想象力为主导的艺术形式&#xff0c;创造了…

UDS诊断笔记

文章目录 常见缩写简介UDS寻址模式1. 物理寻址&#xff08;点对点、一对一&#xff09;2. 功能寻址&#xff08;广播、一对多&#xff09;3. 功能寻址使用场景举例 UDS报文格式UDS协议栈网络层网络层功能网络层协议1. 单帧 SF&#xff08;Single Frame&#xff09;2. 首帧 FC&a…

matplotlib笔记:bar barh

1 bar 绘制垂直方向的条形图 x条形的 x 坐标height 条形的高度 width 条形的宽度 &#xff08;浮点数或类数组&#xff09; bottom 条形的底部的 y 坐标 &#xff08;浮点数或类数组&#xff09; align 控制条形对齐方式 center&#xff1a;将基线居中于 x 位置。ed…

cpu的cacheline对程序效率影响

什么是cpu cacheline CPU的缓存行&#xff08;Cache Line&#xff09;是存储器层次结构中的一部分&#xff0c;用于在CPU缓存和主存之间传输数据。缓存行是缓存的最小单位&#xff0c;也是处理器从主存中读取数据到缓存或将数据从缓存写回主存的最小数据块。 缓存行的大小是由…

C语言 指针与内存之间的关系

一、内存与字节 一个内存单元一个字节一个地址 整型 int 类型中int类型的字节数是4 且一个字节表示八个bite位 一个二进制数位有着32个bite 所以又可以表示为&#xff1a;一个字节 8个比特位 32位数的二进制数位的八分之一 例如&#xff1a; int a 10&#xff1b; 该表达式…

编程基础与脚本规范

编程基础与脚本规范 一.编程基础1.1程序组成1.2.编程风格1.3 编程语言的分类 二.shell脚本基础2.1shell脚本的用途和应用场景2.2常见的shell解释器2.3shell脚本基本结构2.4shell规范脚本2.5脚本的执行方式2.6脚本错误调试 三.重定向与管道符3.1标准输入去输出3.2重定向3.3 管道…

TypeError: Plain typing.NoReturn is not valid as type argument解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【C语言】初阶指针详解

目录 一、什么是指针&#xff1f; 1.指针变量 2.指针大小 二、指针类型 三、野指针 四、指针运算 1.指针-整数 2.指针-指针 3.指针的关系运算 五、指针和数组 六、二级指针 七、指针数组 一、什么是指针&#xff1f; 指针是内存中一个最小单元的编号&#xff0c;…

MySQL_数据库的DDL语句(表的创建与修改)

DDL 数据库操作 查看当前有哪些数据库 SHOW databases;#查看哪些数据库查询当前数据库 SELECT database();创建数据库 create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序 规则 ] ;创建一个sycoder数据库, 使用数据库默认的字符集 CREATE…

retrofit-helper 简洁的封装retrofit,优雅的取消请求

retrofit-helper Retrofit是很多android开发者都在使用的Http请求库&#xff01;他负责网络请求接口的封装,底层实现是OkHttp,它的一个特点是包含了特别多注解&#xff0c;方便简化你的代码量,CallAdapter.Factory 和Converter.Factory可以很灵活的扩展你的请求。我们在使用的…

“崩溃”漏洞会影响英特尔 CPU 的使用寿命,可能会泄露加密密钥等

对于 CPU 安全漏洞来说&#xff0c;本周是重要的一周。昨天&#xff0c;不同的安全研究人员发布了两个不同漏洞的详细信息&#xff0c;一个影响多代英特尔处理器&#xff0c;另一个影响最新的 AMD CPU。“ Downfall ”和“ Inception ”&#xff08;分别&#xff09;是不同的错…

CEC2013(MATLAB):能量谷优化算法EVO求解CEC2013的28个函数

一、能量谷优化算法EVO 能量谷优化算法&#xff08;Energy valley optimizer&#xff0c;EVO&#xff09;是MahdiAzizi等人于2023年提出的一种新颖的元启发式算法&#xff0c;其灵感来自关于稳定性和不同粒子衰变模式的物理原理。能量谷优化算法&#xff08;Energy valley opt…

AI时代的较量,MixTrust能否略胜一筹?

人工智能的能力正在迅速接近人类&#xff0c;而在许多细分领域&#xff0c;已经超越了人类。虽然短期内这个突破是否会导致人工通用智能&#xff08;AGI&#xff09;还不清楚&#xff0c;但我们现在有的模型被训练成在数字交互中完美地模仿高能人类。尽管AGI仍不确定&#xff0…

时序预测 | MATLAB实现CNN-BiGRU-Attention时间序列预测

时序预测 | MATLAB实现CNN-BiGRU-Attention时间序列预测 目录 时序预测 | MATLAB实现CNN-BiGRU-Attention时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现CNN-BiGRU-Attention时间序列预测&#xff0c;CNN-BiGRU-Attention结合注意力机制时…

Java课题笔记~ Request请求

1.请求消息格式 客户端发送一个HTTP请求到服务器的请求消息包括以下格式&#xff1a; 请求行&#xff08;request line&#xff09;、请求头部&#xff08;header&#xff09;、空行和请求数据四个部分组成。下图给出了请求报文的一般格式。 GET请求&#xff1a; POST请求&am…