防止在 Debian 中安装特定软件包

防止在 Debian 中安装特定软件包

我有几个 Debian 服务器,我想确保永远不会在这些服务器上安装 X 服务器。有时,当我安装软件包时,它具有包含 X 的依赖项。有什么好方法可以确保永远不会安装 X 服务器?我更希望 X11 库也不会安装,因为永远不应该启用 X 转发。

答案1

Raphael Herzog 的提示已经很不错了,但是解决方案有一个问题。aptitude 不关心任何保留,因此无论如何都会删除冲突的 fake-package。为了防止这种情况,可以在 fake-package 的包控制文件中添加删除脚本(请参阅https://stackoverflow.com/questions/40800577/how-to-forbid-apt-to-remove-certain-package-during-dist-upgrade如果用户没有明确确认要删除冲突的 fake-package,则此脚本(名称:my-prerm)会失败,从而导致软件包的删除被中止。

#!/bin/sh -e

if [ "$1" != remove ]; then
    exit 0
fi

echo "are you sure about removing your essential package? (y/N)"
read i
if [ "x$i" = "xy" ]; then
   exit 0
fi

false

控制文件应该包含一个条目:Prerm:my-prerm

答案2

暂停某个软件包并不能(很好地)实现这一点。它不能令人满意地涵盖所有工具。例如,命令行上的 aptitude 完全忽略了之前的调用aptitude hold somepackage,安装软件包也会安装依赖项,即使它们处于暂停状态。

我认为最好的方法是创建一个假包(例如命名为“unwanted-pkg”),该包与您不想要的所有包冲突,然后安装它(使用dpkg -i)。然后您将此包搁置,以避免其被删除。

您可以使用“equivs”之类的工具轻松创建伪造的软件包。请参阅equivs-controlequivs-build。冲突字段如下所示:

Conflicts: xserver-xorg-video-2, xserver-xorg-core

您可以与所有不需要的软件包所共有的低级依赖关系发生冲突,以避免列出每个单独的软件包(或使用像 xserver-xorg-video-2 这样的虚拟包)。

请注意,固定无法解决此问题。如果您这样做,aptitude install xorg它将安装许多 xserver-xorg-* 软件包,尽管进行了负面固定。顺便说一句,为了让 apt 识别固定(使用 检查apt-cache policy <package>),您必须使用如下语法:

$ cat /etc/apt/preferences
Package: xserver-xorg-video-vga
Pin: version *
Pin-Priority: -100
$ LANG=C apt-cache policy xserver-xorg-video-vga
xserver-xorg-video-vga:
  Installed: (none)
  Candidate: 1:4.1.0-8
  Package pin: 1:4.1.0-8
  Version table:
     1:4.1.0-8 -100
        500 http://localhost lenny/main Packages

在 Package 字段中使用正则表达式不起作用(单独使用“*”除外,在这种情况下,您在 Pin 字段中有一些其他要求)。

答案3

http://www.debian.org/doc/FAQ/ch-pkg_basics.en.html

请参阅第 7.12 节“如何暂停包裹?”

如果您“保留”当前未安装的软件包,它将永远不会被安装。

答案4

您可以使用 apt pinning 来阻止安装某些软件包。尝试输入以下内容/etc/apt/preferences

软件包:xser​​ver-xorg*
引脚优先级:-100

应防止安装所有 xserver-xorg* 包。

相关内容