Every other year or so I feel the need to clean up my Debian system and remove the installed packages I’m not interested in anymore. I remember there was a nice aptitude pattern to search for packages which I have manually installed (i.e. which were not installed to satisfy a dependency). Ideally I would then go through the (presumably short) list of packages and remove the ones I don’t need any more.
Since I always forget the aptitude pattern to search for those packages,
I google for something like “list of manually installed packages” and
find a solution like:
aptitude search ‘~i !~M’. Although this solution
is not wrong, it is not quite what I was looking for. Sure, it will find
you all packages which are installed and not installed to satisfy a
dependency, but it also contains packages of priorities: required,
important and standard which you usually don’t want to deinstall. So the
actual solution should also exclude those packages.
aptitude search '~i !~M !~pstandard !~pimportant !~prequired'
The above line will do the trick and present you a list of packages which are: installed and not dragged in to satisfy a dependency and not of priority standard, important or required.
If you where only interested in the solution of the quest of getting a list of all manually installed packages you can stop reading here.
If you’re running your system for longer than, say, a few weeks you will
probably notice that the list is very long and contains much more
packages than you actually installed manually. You will probably notice
a lot of libs and other packages in this list and wonder why they aren’t
auto as they should since you didn’t install them on purpose.
Unfortunately I don’t have an answer for that question. I’m using
aptitude exclusively to install packages and rely on the fact that
aptitude does install the dependencies automatically and more
importantly: also removes them if not needed any more. But it seems like
something is broken in aptitude (or somewhere else) and packages simply
auto status instead of being removed and thus stay on your
system forever if you don’t manually clean your system.
To solve that issue I started aptitude and filtered the package tree
with the above pattern (press
l in aptitude and enter
~i !~M !~pstandard !~pimportant !~prequired). Now the package view
shows only packages which are safe to remove since they are not of of
priority standard or higher and manually installed by you. Now I
navigate with the cursor to the list of installed packages an mark all
of them as
auto by pressing
M. For each package in this list,
aptitude will try to find an installed package which depends on that
package and mark that package
auto. The remaining packages which no
other packages depend on, aptitude will mark for deletion. If you now
g one time, aptitude will show you which packages will be
removed. I then go through that list and mark every single of the
remaining packages I really want on my system with
+ as manually
installed. After I’m done I proceed by pressing
g again which will
remove all remaining packages. In my case nearly 600 packages (1GB)
I assume there is a bug in aptitude or some related package which
sometimes(!) removes a packages
auto status instead of removing it.
Unfortunately I did not find a way to reproduce that (except that it
obviously does happen). If someone could find a way to reproduce that
problem, one could fill a bugreport and help to get that bug fixed.
Right now, a Debian system suffers (like many other operating systems)
from a slow but steadily growing bloat of installed software. In my case
600 packages with 1GB accumulated over one or two years.