如何在 dnf (Fedora) 中固定包

如何在 dnf (Fedora) 中固定包

我遇到了一种临时情况,我正在使用预发布的 F27,并且需要将一个包保留为特定(工作)版本,并且在后续版本停止破坏某些内容之前不要升级。我知道一般来说“你并不是真的想这样做”,但正如我所说,这是对 pre-rel 系统的临时处理。您可以使用 apt 系统“固定”软件包,但我找不到 dnf 的任何等效项。

答案1

Fedora 文档现在有一个快速文档来解答这个问题。在这里总结一下:

别针一个包,该versionlock插件作为包的一部分提供dnf-plugins-core。看man dnf-versionlock

sudo dnf install 'dnf-command(versionlock)'

sudo dnf versionlock add <package-name-spec>
sudo dnf versionlock delete <package-name-spec>
sudo dnf versionlock list
sudo dnf versionlock clear    # Removes all versionlocks
sudo dnf versionlock exclude  # Also possible here

排除来自交易的包

sudo dnf upgrade --exclude=packagename   

或添加到/etc/dnf/dnf.conf

excludepkgs=package-name   // See `man dnf.conf` for more

和...之间的不同排除固定(dnf: versionlock) 是为了排除包是告诉dnf完全忽略事务中的包,而版本锁包是识别该包但明确请求将其保留在特定版本。这种区别很重要,因为排除包也适用于dnf searchdnf repoquery等,并且可以有效地进行操作,就好像该包不存在一样。

因此对于这个问题:

  • 您可能想要这样做,versionlock因为这正是您想要的。这也将有助于提醒您,您已经固定了一个软件包,因为您可以dnf updateinfo --list并且仍然看到更高版本可用,如果它已被编辑,则情况并非如此exclude。另外: adnf check-update不会显示固定(或排除)的包,因为从字面上看,没有什么可以更新的。

  • 相反,“exclude包”是一个更广泛的声明 - 也许您(或您的系统管理员)根本不想接触一组包,或者只是因为您出于某种原因想在某些事务集期间忽略包。

    例如,exclude同样适用于

      dnf search <keywords> --exclude=packagename 
    

最后,请注意,上述内容直接适用于给定的package-name,与其依赖关系无关。然而,我观察到 adnf update仍然会正确地拒绝更新任何由于保留的软件包而损坏的软件包(并且会帮助您告诉您这些软件包正在被跳过)。

答案2

excludepkgs中的配置选项列出了永远不应该尝试安装或升级的dnf.conf软件包;dnf在回购部分中,它仅影响该回购,[main]所有回购都受到影响。有关详细信息,请参阅dnf.conf(5)手册页。

答案3

排除也可以使用 获得--exclude=package,但“排除”和“固定”是不同的操作,因此固定的正确解决方案是使用:

python3-dnf-plugin-versionlock

它取代了:

yum-plugin-versionlock

yum 和 dnf 之间的配置文件工作方式有所不同我对 dnf 没有正确的答案(我还没有查看手册页)。因此,我不会添加进一步的详细信息。似乎它颠倒了用于指定包和 epoc 编号的顺序。 dnf 手册页没有提及“epoc”(您可以查看此手册页的旧系统)。

在百胜是:

"${epoch}:${pkg_name}-${pkg_version}.*"

在dnf中是:

"${pkg_name}-${epoch}:${pkg_version}.*"

要理解这意味着什么,您可以运行例如:

dnf versionlock add bash

并检查文件的内容:

cat /etc/dnf/plugins/versionlock.list

# Added locks on Fri Aug 28 17:30:58 2020
bash-0:4.4.19-10.el8.*

相关内容