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


12

我想从特定的软件包中排除特定的软件包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个终端仿真器:xtermuxtermmate-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

您确定可以删除xtermmate-terminal?在15.04中,mate-terminal是的硬依赖性mate-desktop-environment-core,而在中是的硬依赖性mate-core,我想PPA mate-terminal不提供x-terminal-emulator(15.04中的软件包提供了)。
muru

也许您是对的,除非软件包名称旁边的星号表示此处有特殊含义。而且,令人惊讶的是,几乎没有空间可以释放。无论如何,我的问题是关于删除所有可以删除的内容,例如(XTerm也许UXTerm我不确定后者的软件包名称是什么)
Nickolai Leschov 2015年


@Seth不太:我希望是否有类似的语法sudo apt-get install xorg mate-core --without xterm mate-terminal
Nickolai Leschov,2015年

如果使用aptitude(或某些图形软件包管理器),则可以(取消)选择要安装的软件包,并且如果一个软件包导致依赖性破坏,则通常将给出解释。
saiarcot895

Answers:


7

所以,队友核心 依赖mate-desktop-environment-core后者又取决于mate-terminal。一个依赖不能轻易打破。也不是apt-get也不aptitude支持--without--exclude选项和“持有”的程序包将无法帮助:

$ echo“伙伴终端保持” | sudo dpkg-设置选择
$ sudo apt-get install mate-core
[...]
某些软件包无法安装...
以下软件包具有未满足的依赖性:

当然,可以使用它dpkg --force-depends来安装软件包,但这也许不是您想要的。

一种可能性是Depends:用虚拟包来充满标志:

$ sudo apt-get install equivs
$ equivs-control mate-terminal
$ vi mate-terminal
部分:杂项
优先级:可选
标准版:3.9.2
包装:伴侣端子
版本:1.8.0
说明:用于终端的虚拟包装
: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设置较少的数据包。


4

如果使用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则会告诉您,您可以告诉它在没有任何依赖关系的情况下不要安装该软件包。例如:

在此处输入图片说明


2

另一种方法

下载依赖于其他程序的主程序包。解压缩软件包,删除不需要的依赖项,然后重新打包。现在,使用gdebi软件包安装程序打开新软件包。它将为您安装新的依赖项。

  • 依赖关系列表可以在DEBIAN / 控制 -> 取决于
  • 有关恢复deb的帮助,请参阅我关于如何创建PPA的答案

0

apt对于这种情况,有一种特殊的语法:在软件包中附加连字符(减号)会删除/不安装它,因此与您的软件包最接近的sudo apt-get install xorg mate-core --without xterm mate-terminalsudo apt-get install xorg mate-core xterm- mate-terminal- (发现于/ubuntu//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.

但这似乎是您特定问题的答案。因此供参考,此交叉发布。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.