我遇到了一种临时情况,我正在使用预发布的 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 search
、dnf 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.*