如何在 dnf (Fedora) 中固定一个包

Mat*_*ann 9 dnf

我有一个临时情况,我正在使用预发布的 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 searchdnf 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)详细信息,请参阅手册页。