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

Cra*_*hek 4 debian installation apt

我有几台 Debian 服务器,我想确保永远不会在它们上面安装 X 服务器。有时当我安装一个包时,它有包含 X 的依赖项。有什么好的方法可以确保 X 服务器永远不会被安装?我希望也不要安装 X11 库,因为永远不应启用 X 转发。

Rap*_*zog 9

暂停包裹并不能(非常好)实现这一目标。它没有以令人满意的方式涵盖所有工具。例如,命令行上的 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
Run Code Online (Sandbox Code Playgroud)

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


Tim*_*ück 1

Raphael Herzog 的建议已经相当不错,但解决方案存在一个问题。aptitude 不关心任何保留,因此无论如何都会删除冲突的假包。为了防止这种情况,可以在 fake-package 的包控制文件中添加删除脚本(请参阅/sf/ask/2856040421/在远程升级期间)。如果用户没有明确确认他想要删除冲突的假包,则此脚本(名称: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
Run Code Online (Sandbox Code Playgroud)

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