SDB:DNF
建言或参与施工请至这篇文章的讨论页面
请注意,这篇文章很快就会移动到 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/