November 4, 2012
Easily list package dependencies

Sometimes I wonder about a package and its dependencies, and more specifically the (installed) size of it all. For a simple list of a package’s dependencies, pactree is a great tool that does the job fine.

But when I’m wondering about the size, something else is needed. In fact, quite a few times I’ve found myself doing a pacman -S/-Rs package in order to know either how much size a package (and its “exclusive” (as in not needd by any other packages) dependencies) are eating up, or how much would be needed to install them.

This isn’t, however, an ideal solution, obviously. It does require root privileges, even though I don’ go through with the transaction, and adds useless entry in pacman.log

So I started thinking about it a bit, fast-forward a little and here comes pacdep

pacdep: Package Dependencies listing

pacdep is a little tool that will show the installed size of the package, its exclusive dependencies, and its shared dependencies; Optional dependencies can be shown as well.

By default pacdep searches the local database first, and if not found searches all sync databases, making it easy to use with packages installed or not all the same. Of course, there’s an option to use sync databases only, should you need that.

Package names are prefixed by the repository name they were found in when they’re not from the local database.

As hinted, pacdep creates groups of dependencies: exclusive ones, shared ones, and (optionally) optional ones. By default, only the total size of each group will be shown, but of course you can have packages of any of those groups be listed.

Package size

After the package’s installed size, in parenthesis will be the installed size of the package and its exclusive (and optional, if --show-optional was used) dependencies.

If the package is from local database (i.e. is installed), only dependencies from local database are taken into account. If it is from a sync database (i.e. is not installed), only dependencies from sync databases are taken into account.

In other words, this size represents either the size the package and its dependencies are using on the system (size that could potentially be freed if removing the package and its dependencies), or the size needed to install them.

Reverse Mode

When option --reverse is used, instead of listing the dependencies of the specified packages, pacdep will list packages that require them (i.e. the dependency tree is browsed in reverse).

By default only immediate “requirers” are listed, i.e. packages that have one of the specified packages as dependency.

Specifying the option a second time will go through the entire dependency tree, until a package that isn’t required is found. All packages met will be listed.

Specifying the option a third time will go through the dependency tree all the same, but only the end packages (that aren’t required) will be listed.

Optional Requirements

Just like in “regular” mode, you can have optional dependencies taken into account as well.

Instead of listing optional dependencies, you can list packages that have one of the specified packages as optional dependency.

Examples

To give you a quick idea of what you can get, here are a few examples.

Listing exclusive & optional dependencies of git :

% pacdep -eo git
git                      17.24 MiB ( 20.71 MiB)
Exclusive dependencies:   2.76 MiB
 perl-convert-binhex  56.00 KiB
 perl-error           76.00 KiB
 perl-io-socket-ssl  140.00 KiB
 perl-io-stringy     148.00 KiB
 perl-mailtools      204.00 KiB
 perl-net-ssleay       1.93 MiB
 perl-timedate       228.00 KiB
Optional dependencies:  732.00 KiB
 perl-authen-sasl  188.00 KiB
 perl-mime-tools   500.00 KiB
 perl-net-smtp-ssl  44.00 KiB
Shared dependencies:     20.09 MiB
Total dependencies:      23.57 MiB ( 40.81 MiB)

Listing optional dependencies of git, in quiet mode, using raw sizes :

% pacdep -oqw git
git 18079744
perl-authen-sasl 192512
perl-mime-tools 512000
perl-net-smtp-ssl 45056

Listing packages (sorted by size) that (optionally) require git, from sync databases :

% pacdep -Roz --from-sync git
extra/git                17.24 MiB
Required by:              7.47 MiB
 community/giggle         2.41 MiB
 community/gitg           1.70 MiB
 extra/archboot           1.20 MiB
 community/qgit         948.00 KiB
 community/sparkleshare 880.00 KiB
 community/tig          232.00 KiB
 community/hub          160.00 KiB
Optionally required by:  71.18 MiB
 community/qtcreator           50.10 MiB
 extra/kdevelop                13.02 MiB
 community/zim                  7.01 MiB
 extra/kdesdk-dolphin-plugins 540.00 KiB
 community/luarocks           536.00 KiB
Total dependencies:      78.65 MiB ( 95.89 MiB)

Listing optional dependencies of gparted (not installed), including all optional dependencies ;

% pacdep -oppp gparted
extra/gparted             5.58 MiB ( 34.05 MiB)
Exclusive dependencies:  29.37 MiB
 local:    8.12 MiB
 sync:    21.25 MiB
Optional dependencies:    9.00 MiB
 local:    1.77 MiB
  polkit               1.77 MiB
 sync:     7.23 MiB
  extra/dosfstools   240.00 KiB
  extra/gpart         52.00 KiB
  core/jfsutils        1.03 MiB
  extra/mtools       412.00 KiB
  core/nilfs-utils   512.00 KiB
  extra/ntfsprogs    576.00 KiB
  core/reiserfsprogs   1.01 MiB
  core/xfsprogs        3.44 MiB
Shared dependencies:    244.99 MiB
Total dependencies:     283.35 MiB (288.93 MiB)

Download

If you want to give it a try, go ahead. pacdep is released under GNU GPL v3+ The source code is available on this GitHub repository.

You can also find a PKGBUILD in the AUR.

And of course bug reports, suggestions or any other form of constructive criticism is very much welcome.

Blog comments powered by Disqus