Ask Ubuntu is a question and answer site for Ubuntu users and developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Suppose I have a list of packages:

foo
libfoo
bar
baz
quux

And suppose foo requires libfoo and bar, and baz requires quux.

I want a way to put in that list, and get out this list:

foo
baz

I.e. - I want the minimal list of packages to install which would - after dependency resolution - cause the entire list of packages to be installed.

share|improve this question
    
apt-cache depends <packagename> shows the package along with it's dependencies. – Avinash Raj Feb 18 '14 at 18:06
    
How do you make the first list? – DK Bose Feb 18 '14 at 18:08
    
may this help you dmd askubuntu.com/questions/128524/… – Raja Feb 18 '14 at 18:13
    
The initial list is the result of my predecessor being dumb and installing a bunch of packages we need for a product, but then giving me a list of the diffs between a base ubuntu install and the install after he did those package installs. He no longer knows which were specifically selected. – dmd Feb 18 '14 at 18:14

I created a script that does exactly what you want: https://gist.github.com/kotarou3/2b311fb7b79ae6b682246b32acf0b7e9

python3-apt and python3-networkx are the dependencies. It uses the apt package cache as the source of package information.

Package names themselves are output one per line to stdout, while any comments about them (such as if they are part of a cycle) are to stderr

Example:

$ ./find-top-level-packages.py nginx nginx-core zlib1g firefox
firefox
nginx
$ ./find-top-level-package.py -h
usage: find-top-level-packages.py [-h] [--root-dir dir]
                                  [--follow-unspecified-packages]
                                  [--no-use-recommends]
                                  [--show-missing-recommends]
                                  [package [package ...]]

Find top-level packages of the dependency graph

positional arguments:
  package               package names to use (default: all installed packages)

optional arguments:
  -h, --help            show this help message and exit
  --root-dir dir        act as if chrooted in the specified directory
  --follow-unspecified-packages
                        follow dependencies of packages not part of the
                        initial input
  --no-use-recommends   don't use recommended packages for the dependency
                        graph
  --show-missing-recommends
                        list missing recommended packages suffixed with a dash
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.