我想使用 从安装中排除特定包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
和,后者在这种最小配置下安装时缺少适当的字体。uxterm
mate-terminal
假设我觉得 3 个终端程序太多了,我想安装xorg
并mate-core
没有 xterm
和mate-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-terminal
是
sudo 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