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/