On Gentoo, is there a way to find a list of installed packages which doesn't have other packages depended on them (so called leaf packages)? Or, is there analog of pkg-orphan
FreeBSD utility?
2 Answers
That's what emerge --pretend --depclean
does. It looks for packages that are:
- not depended upon by other ebuilds, and
- neither in
world
norsystem
sets
It's a good idea to run emaint --check world
to find (and later fix) potential problems with your world file before a depclean.
Other useful tools: Gentoo maintenance
-
In my case, packages which I'm interested in (these perl modules from my other question) are all in world file.– AlexDOct 2, 2011 at 11:24
-
2When you put stuff in world, it means "I depend on this". I.e. you are the dependency. Remove the packages that you don't explicitly need from your world file. When you emerge things you don't explicitly need, use the
--oneshot
option.– MatOct 2, 2011 at 11:28 -
Adding to the previous comment by Mat: A proper command-line way to remove such packages from
world
isemerge --deselect package_atom
, wherepackage_atom
can be simply the name of package (for more, seeman portage
). Oct 2, 2011 at 13:13 -
These packages are installed by puppet recipe so using
--oneshot
will require modifying puppet sources, and I need these packages included in world file in production anyway so they won't be removed by regulardepclean
(these packages are dependencies of large web application which is not properly packaged yet). But right now I need to clean these packages from test system and removing these packages by hand from world file (or from system) is exactly task which I'm trying to avoid.– AlexDOct 7, 2011 at 7:19 -
You can't have it both ways - tell the system they are required, then ask it for them to be cleaned up automatically. You need to track what you're doing. Sets will help a bit, but as you said in another comment it's not bullet-proof. You could also simply record all your emerge actions (with a simple wrapper) and use that to backtrack your changes.– MatOct 7, 2011 at 7:22
If you want to see what packages in the @world
set are not also dependencies of other installed packages, you can run emerge --pretend --depclean @world
(or emerge -pc @world
). Also note that if you try to remove a package using emerge --depclean atom
(instead of emerge --unmerge atom
), portage will only remove the package if nothing else depends on it.
-
3This does not work (anymore?)
emerge --pretend --depclean @world
returnsemerge: the given set 'world' does not support unmerge operations
Jan 2, 2019 at 16:10