如何使用 apt-get 从安装中排除特定的软件包?

如何使用 apt-get 从安装中排除特定的软件包?

我想使用 从安装中排除特定包apt-get,即安装不包含特定包列表的元包,最好调用一次apt-get

例如,在 Ubuntu 14.04 LTS 命令行中,我正在安装 MATE 桌面环境。在 14.04 LTS 中,MATE 不是官方版本,因此我添加了一个 PPA:

sudo apt-get install software-properties-common # need them for 'apt-add-repository'
sudo apt-add-repository ppa:ubuntu-mate-dev/ppa
sudo apt-add-repository ppa:ubuntu-mate-dev/trusty-mate
sudo apt-get update

然后安装:

sudo apt-get install xorg mate-core --no-install-recommends

即使没有推荐的附加功能,也会mate-core安装 3 个终端仿真器:xterm,后者在这种最小配置下安装时缺少适当的字体。uxtermmate-terminal

假设我觉得 3 个终端程序太多了,我想安装xorgmate-core 没有 xtermmate-terminal。我可以做

sudo apt-get install xorg mate-core --no-install-recommends
sudo apt-get purge xterm mate-terminal

但可以一次性完成吗?有没有类似这样的语法

sudo apt-get install xorg mate-core --without xterm mate-terminal

答案1

所以,Mate-核心 依靠反过来mate-desktop-environment-core依靠mate-terminal。一个依靠不容易被破坏。也不apt-get支持aptitude--without选项--exclude,并且“保留”软件包不会有帮助:

$ echo“mate-terminal hold”| sudo dpkg --set-selections
$ sudo apt-get 安装 mate-core
[...]
某些软件包无法安装...
以下软件包具有未满足的依赖关系:

当然,可以用来dpkg --force-depends安装包,但这可能不是您想要的。

一种可能性是Depends:使用虚拟包来实现该标志:

$ sudo apt-get 安装 equivs
$ equivs-control mate-terminal
$ vi mate 终端
部分:杂项
优先级:可选
标准版本:3.9.2
软件包:mate-terminal
版本:1.8.0
描述:mate-terminal 的虚拟包
:X

$ equivs-build mate-terminal
$ sudo dpkg -i mate-terminal_1.8.0_all.deb

现在mate-core应该能够安装 w/o 了mate-terminal。对要排除的其他包重复相同的操作。

不可否认,这是一项艰巨的努力,如果--without有选择就好了。也许愿望清单错误可以开放以在将来提供这样的功能,但我有点怀疑这是否会实现。

然而,一个更现实的选择是向PPA 所有者为 MATE 提供另一个具有较少Depends软件包的元包。

答案2

对于这样的场景,有一个特殊的apt语法:在包后面添加连字符(减号)将删除/不安装它,因此最接近你的sudo apt-get install xorg mate-core --without xterm mate-terminalsudo apt-get install xorg mate-core xterm- mate-terminal- (在https://askubuntu.com/a/1011439/182923

在这种情况下,它不会有帮助,因为你会遇到

The following packages have unmet dependencies:
 mate-desktop-environment-core : Depends: mate-terminal (>= 1.20) but it is not going to be installed                                                                        
E: Unable to correct problems, you have held broken packages.

但这似乎是对你特定问题的答案。因此,作为参考,转贴如下。

答案3

如果你使用aptitude或图形包管理器(Synaptic 等),那么你可以取消选择应该安装哪些包只要它不会引起依赖问题。

在 的情况下aptitude,在安装软件包之前(在图形视图中),它会向您显示安装依赖软件包的原因。就我而言,我使用 KDE,因此没有任何 MATE 软件包。如果我告诉它安装mate-core,我会得到以下内容:

在此处输入图片描述

请注意,mate-core标记为手动安装,并且正在安装许多其他软件包。对于软件包mate-terminal,在底部,它显示“ mate-desktop-environment-core[universe] 依赖于mate-terminal(>= 1.0.0)”。转到 的条目mate-desktop-environment-core

在此处输入图片描述

mate-core[universe] 依赖于mate-desktop-environment-core(>= 1.8.0+9)”。这就是mate-terminal安装的原因。

相反,如果正在安装推荐的软件包(而不是依赖于另一个软件包的软件包),aptitude则会告诉您,并且您可以告诉它不要安装该软件包,而不会破坏任何依赖关系。例如:

在此处输入图片描述

答案4

另一种方法

下载依赖其他包的主包。提取包,删除不需要的依赖项,重新打包。现在使用以下命令打开新包格德比软件包安装程序。它将为您安装新的依赖项。

  • 依赖项列表可以在以下位置找到德比安/控制-> 依靠
  • 有关重新安排 deb 的帮助,请参阅我的回答如何创建 PPA

相关内容