不允许在Debian的/ etc / apt / preferences中使用虚拟软件包

我知道我可以通过附加/etc/apt/preferences来禁止Debian中的特定软件包:

 Package: *x11* Pin: release Pin-Priority: -1 

但是我怎样才能做到像httpd这样的虚拟包? 我想不允许安装所有提供这个虚拟httpd但是我select的包。 有一个(简单)的方法来做到这一点?

原因是:最近,一个自动apt-get dist-upgrade删除了nginx并安装了lighttpd ,因为其他一些软件包( phppgadmin AFAIR )依赖于httpd ,而nginx根据那个更新启动的东西是不可安装的。 在这种情况下,我真的希望整个升级失败,而不是放下http服务。 另外:是否有可能使一个包“可卸载”? 这也是一个很好的解决scheme。

我宁愿build立一个微小的元包与equivs根据Conflicts ,也许Depends 。 这样可以更精细地控制需要安装哪些软件包,哪些可能未安装。

固定更适合挑选正确版本的软件包(直到最近,虚拟软件包才能有版本),而不是安装一个或另一个软件包 – 尽pipe理论上这应该是可能的。

另一种可能性是使用一个工具来保持所有的软件包安装或卸载,例如aptitude-robot 。 (可能有其他的,但是aptitude-robot是我用的。)aptitude-robot虽然只是用来configuration软件包列表,但是它不适用于普通的aptitudeapt-get运行。

如果你只使用aptitude ,第三种可能性就是在你的例子中使用Aptitude的forbid-version (Shift-F)function。 这个虽然不适用,如果你以后再使用apt-get