![防止在 Debian 中安装特定软件包](https://linux22.com/image/483919/%E9%98%B2%E6%AD%A2%E5%9C%A8%20Debian%20%E4%B8%AD%E5%AE%89%E8%A3%85%E7%89%B9%E5%AE%9A%E8%BD%AF%E4%BB%B6%E5%8C%85.png)
我有几个 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-control
和equivs-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
:
软件包:xserver-xorg* 引脚优先级:-100
应防止安装所有 xserver-xorg* 包。