如何禁止安装特定的包?

Iva*_*van 34 package-management apt

我可以将 Ubuntu 配置为从不安装特定的软件包,即使我安装的另一个软件包需要它吗?

Tak*_*kat 34

作为Debian中,我们可以使用的apt-钉扎的版本和安装控制在Ubuntu了。

为了阻止给定软件包的安装,我们可以将以下几行放入 /etc/apt/preferences

Package: <nameofpackage>
Pin: origin ""
Pin-Priority: -1
Run Code Online (Sandbox Code Playgroud)

通过给这个 pin 一个负面的优先级,我们将阻止安装<nameofpackage>来自未进一步指定的来源,即我们的本地存储库。当然,我们可以使用 apt-pinning 来固定某个包版本或特定来源。

在您继续之前,强烈建议阅读上面给出的文档和apt_preferences的联机帮助页,因为 apt 不会检查这些文件中的错误,如果它们发生可能会破坏您的包管理。

对于替代方案,并防止更新给定的包,请参阅:

  • 在 Ubuntu 16.04 中,`Pin: origin ""` 对我不起作用,但 `Pin: release *` 可以。 (11认同)
  • 在`Package:`行中,可以列出多个用空格分隔的包,如下所示:Package: metacity metacity-common libmetacity-private0a。(看起来像 Package: metacity* 这样的模式也是可能的) (3认同)
  • 在 Ubuntu 20.04 中,这似乎是阻止安装软件包的唯一方法。其他地方描述的 `apt-mark hold` 解决方案并不完全按预期工作:有时它会工作 _once_(即用于 _next_ 升级),但随后“hold”被“释放”并且 `apt` 将尝试再次安装它... 唯一似乎始终如一的工作是在 `/etc/apt/preferences.d` 中添加文件,并使用 `Pin: release *`。值得阅读手册页:文件名有严重限制;并且您可以在同一个配置文件中使用多个包以及使用通配符。 (3认同)

小智 5

我有一个包不断潜入并破坏 git

sudo apt-mark hold libgnutls-deb0-28
Run Code Online (Sandbox Code Playgroud)

应该阻止安装该软件包


man*_*k13 2

在 debian 中,您可以阻止某个软件包,该软件包将不再升级

# echo name_of_package hold | dpkg --set-selections
Run Code Online (Sandbox Code Playgroud)

但我不确定你是否可以禁止