SDB:DNF

跳转至: 导航, 搜索
Icon-construction.png
本页面正在建设!
建言或参与施工请至这篇文章的讨论页面


Icon-warning.png 请注意,这篇文章很快就会移动到 https://opensuse.github.io/openSUSE-docs-revamped-temp/index.html

DNF 包管理器

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


安装

DNF 已经处于 Leap 15.3 和 Tumbleweed 的官方软件仓库中,不需要添加额外的第三方库。

使用命令行安装

# zypper install dnf rpm-repos-openSUSE

使用 YaST2

启动 YaST2 ,选择 “软件管理” 并搜索 DNF 。选择 DNF 和 rpm-repos-openSUSE ,然后将它们标记为安装,再点击 “接受” 。

使用 DNF 作为 Packagekit 的后端

如果你想使用 DNF 作为 Packagekit 的后端,运行下列命令:

# 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 (UID)和名称。 “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:控制与运行内核版本相对应的包是否被保护不被移除。 默认值为真。

插件

DNF 与 OpenSUSE 没有相同集成,因为 zypper 没有额外插件

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

 # python3-dnf*

有关插件的最新信息,请参阅上游文档:

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