Ubuntu – How to exclude specific packages from installation with apt-get

aptmetapackagespackage-management

I would like to exclude specific packages from installation with apt-get, that is, install a metapackage without the list of specific packages, preferably with one invocation of apt-get.

For example, in Ubuntu 14.04 LTS command-line, I am installing MATE desktop environment. In 14.04 LTS MATE is not an official flavour, so I'm adding a 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

then installing:

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

Even without the recommended extras, mate-core installs 3 terminal emulators: xterm, uxterm and mate-terminal , the latter lacking proper fonts while installed in this minimal configuration.

Suppose I decide that 3 terminal programs would be too many and I'd like to install xorg and mate-core without xterm and mate-terminal. I could do

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

but is it possible to do this in one go? Is there some syntax like

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

Best Answer

So, mate-core depends on mate-desktop-environment-core which in turn depends on mate-terminal. A depend cannot be broken easily. Nor apt-get nor aptitude supports a --without or --exclude option and "holding" the packages won't help:

$ echo "mate-terminal hold" | sudo dpkg --set-selections
$ sudo apt-get install mate-core
[...]
Some packages could not be installed...
The following packages have unmet dependencies:

Sure, one can use dpkg --force-depends to install a package, but that's maybe not what you want.

A possibility would be to fullfill the Depends: flag with a dummy package:

$ sudo apt-get install equivs
$ equivs-control mate-terminal
$ vi mate-terminal
Section: misc
Priority: optional
Standards-Version: 3.9.2
Package: mate-terminal
Version: 1.8.0
Description: Dummy package for mate-terminal
:x

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

Now mate-core should be able to install w/o mate-terminal. Repeat the same for other packages to be excluded.

Admittedly this is quite an effort and a --without option would be nice. Maybe a wishlist bug can be opened to provide such functionality in the future, but I somehow doubt that this will be implemented.

However, a more realistic option would be to petition the PPA owner to provide another meta package for MATE with lesser Depends packages set.

Related Question