我有一个临时情况,我正在使用预发布的 F27,并且需要将一个包保留为特定(工作)版本,并且在后续版本停止破坏某些内容之前不升级。我一般知道“你真的不想这样做”,但正如我所说,这是对 pre-rel 系统的临时处理。您可以使用 apt 系统“固定”软件包,但我找不到与 dnf 等效的任何内容。
war*_*rdw 20
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
Run Code Online (Sandbox Code Playgroud)
从事务中排除包
sudo dnf upgrade --exclude=packagename
Run Code Online (Sandbox Code Playgroud)
或添加到/etc/dnf/dnf.conf
excludepkgs=package-name // See `man dnf.conf` for more
Run Code Online (Sandbox Code Playgroud)
排除和固定(dnf:)之间的区别在于versionlock
,排除包是指dnf
完全忽略事务中的包,而版本锁定包是识别该包,但明确请求将其保留在特定版本。这种区别很重要,因为排除包也适用于dnf search
、dnf repoquery
等,并且可以有效地进行操作,就好像该包不存在一样。
因此对于这个问题:
您可能想要这样做,versionlock
因为这正是您想要的。这也将有助于提醒您,您已经固定了一个软件包,因为您可以dnf updateinfo --list
并且仍然看到更高版本可用,如果它已被exclude
编辑,则情况并非如此。另外: adnf check-update
不会显示固定(或排除)的包,因为从字面上看,没有什么可以更新的。
相反,“exclude
包”是一个更广泛的声明 - 也许您(或您的系统管理员)根本不想接触一组包,或者只是因为您出于某种原因想在某些事务集期间忽略包。
例如,exclude
同样适用于
dnf search <keywords> --exclude=packagename
Run Code Online (Sandbox Code Playgroud)
最后,请注意,上述内容直接适用于给定的package-name
,与其依赖关系无关。然而,我观察到 adnf update
仍然会正确地拒绝更新任何由于保留的软件包而损坏的软件包(并且会帮助您告诉您这些软件包正在被跳过)。
Ign*_*ams 12
中的excludepkgs
配置选项dnf.conf
列出了dnf
不应尝试安装或升级的软件包;在 repo 部分,它只影响那个 repo,在[main]
所有 repo 中都会受到影响。有关dnf.conf(5)
详细信息,请参阅手册页。