SDB:DNF

跳转到:导航搜索



DNF 包管理器

DNF 是一个用于 RPM 系统的包管理器,用于安装、更新和删除软件包。DNF 是从 Yum 分叉出来的。在众多改进中,它使用 libsolv 作为依赖关系解决器。DNF 支持插件 - 可以用来扩展 DNF 的核心功能 -、自动更新和并行软件包下载。


安装

在 Leap 15.3 和 Tumbleweed 上,DNF 可从官方仓库获得,无需添加其他仓库即可安装。

在命令行

# zypper install dnf rpm-repos-openSUSE-Tumbleweed

注意:

rpm-repos-openSUSE-Tumbleweed 会将官方 openSUSE-Tumbleweed 仓库添加到 /etc/yum.repos.d/,即使你已经在 /etc/zypp/repos.d/ 下有它们。如果你更喜欢使用你已经拥有的仓库,包括非官方仓库,你可以选择

# zypper install dnf libdnf-repo-config-zypp

这个软件包会为你在 /etc/zypp/repos.d/ 中拥有的每个仓库文件创建一个符号链接。

使用 YaST2

启动 YaST2,选择“软件管理”并搜索 DNF。选择 DNF 和 rpm-repos-openSUSE 或 libdnf-repo-config-zypp 并标记它们以进行安装,然后按“接受”。

将 DNF 作为 PackageKit 后端使用

如果你想将 DNF 作为 PackageKit 的后端,首先应该安装这个软件包

# zypper in PackageKit-backend-dnf

或者直接使用 DNF

# dnf install PackageKit-backend-dnf

现在你只需要使用这个命令

# dnf swap PackageKit-backend-zypp PackageKit-backend-dnf

DNF 用法

刷新仓库

# dnf makecache

安装软件包

# dnf install packagename

搜索仓库中的软件包类型

# dnf search packagename

删除软件包

# dnf remove packagename

其他常用的 DNF 命令包括

autoremove - 删除作为依赖项安装的不再由当前安装的程序需要的软件包。

check-update - 检查更新,但不下载或安装软件包。

downgrade - 降级到软件包的先前版本。

info - 提供有关软件包的基本信息,包括名称、版本、发布版和描述。

reinstall - 重新安装当前安装的软件包。

upgrade - 检查仓库中是否有较新的软件包并更新它们。

exclude - 从事务中排除软件包。

例如,要更新 Tumbleweed 安装

# dnf makecache
# dnf distro-sync

要更新 Leap 安装

# dnf makecache
# dnf upgrade

这相当于

# zypper refresh 
# zypper dist-upgrade

# zypper refresh 
# zypper update

openSUSE 风格的 DNF

openSUSE 上的 DNF 还提供了一些别名来模拟 zypper 命令。可以列出这些别名

# dnf alias

这将输出类似以下内容

Alias dup='distro-sync'
Alias dist-upgrade='distro-sync'
Alias ref='makecache'
Alias refresh='makecache'
Alias ri='reinstall'

使用这些别名,可以像在 zypper 中一样更新系统或刷新仓库

# dnf ref
# dnf dup

它们相当于

# zypper ref
# zypper dup 

要添加一个新的别名,例如用于删除

# dnf alias add rm=remove

管理仓库

添加仓库

在这方面,DNF 与 zypper 非常相似,因为它必须指向 .repo 文件。命令

# dnf config-manager --add-repo URL

要从 OBS 添加仓库,你必须将 zypper addrepo 部分替换为 dnf config-manager --add-repo,并将 url 放在末尾。

# dnf config-manager --add-repo https://download.opensuse.org/repositories/devel:languages:python/openSUSE_Tumbleweed/devel:languages:python.repo

列出仓库

# dnf repolist

# dnf repolist all

这些命令将列出唯一的 ID 和可用仓库的名称。dnf repolist all 会在每个列出的仓库之后添加一个额外的状态字段,指示仓库是启用还是禁用。

启用/禁用仓库

在启用或禁用仓库之前,最好先列出所有仓库及其当前状态

# dnf repolist all

然后使用你想要启用的仓库的 id

# dnf config-manager --set-enabled repo_id

或者禁用

# dnf config-manager --set-disabled repo_id

故障排除

DNF dup 无法更新内核

目前,DNF 正在将内核软件包标记为受保护,并且在内核更新(在 Tumbleweed 上相当频繁)的情况下,它将拒绝更新。要解决此问题,请禁用正在运行的内核保护

 # dnf --setopt=protect_running_kernel=False --refresh distro-sync 

protect_running_kernel:控制是否保护与正在运行的内核版本对应的软件包免于删除。默认值为 True。

你可以通过将 protect_running_kernel=False 添加到 /etc/dnf/dnf.conf 来使此更改永久生效。

插件

DNF 没有像 zypper 那样与 openSUSE 的相同集成,没有额外的插件

默认情况下启用 zypper 的特定功能,在使用 DNF 时,如果没有额外安装插件,则无法重现。例如“受保护”软件包和 snapper 集成需要使用插件。要查看可用插件列表,请搜索

 # python3-dnf*

请参阅上游文档以获取有关插件的最新信息。

https://dnf-plugins-core.readthedocs.io/en/latest/
https://dnf-plugins-extras.readthedocs.io/en/latest/