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
So, mate-core depends on
mate-desktop-environment-core
which in turn depends onmate-terminal
. A depend cannot be broken easily. Norapt-get
noraptitude
supports a--without
or--exclude
option and "holding" the packages won't help: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:Now
mate-core
should be able to install w/omate-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.If you use
aptitude
or a graphical package manager (Synaptic, etc.), then you can unselect which packages should be installed as long as it doesn't cause a dependency issue.In the case of
aptitude
, before installing a package (in the graphical view), it will show you why a dependent package is being installed. In my case, I use KDE, and so don't have any MATE packages. If I tell it to installmate-core
, I get the following:Notice that
mate-core
is marked as being manually installed, and many other packages are being installed. For themate-terminal
package, in the bottom, it says, "mate-desktop-environment-core
[universe] depends onmate-terminal
(>= 1.0.0)". Going over to the entry formate-desktop-environment-core
,"
mate-core
[universe] depends onmate-desktop-environment-core
(>= 1.8.0+9)". This is whymate-terminal
is being installed.If, instead, a recommended package is being installed (rather than something that is dependent on another package),
aptitude
will tell you so, and you can tell it not to install that package without any broken dependencies. For example:There's a special
apt
syntax for scenarios like this: appending a hyphen (minus sign) to a package will remove/not install it, so the closest to yoursudo apt-get install xorg mate-core --without xterm mate-terminal
issudo apt-get install xorg mate-core xterm- mate-terminal-
(spotted on https://askubuntu.com/a/1011439/182923)It will not help in this case, as you will run into
but it seems to be the answer to your specific question. So for reference, this cross-post.
Another method
Download main package which depend on the other. Extract the package, remove the unwanted dependencies, repack it. Now open the new package with gdebi package installer. It will install new dependencies for you.