Safely uninstall a package in Gentoo
Solution 1
I don't think depclean
works the way you described. Without any arguments it does, but if you pass it a package name it works like unmerge
with an additional dependency check. From emerge(1)
:
Depclean serves as a dependency aware version of
--unmerge
. When given one or more atoms, it will unmerge matched packages that have no reverse dependencies. Use--depclean
together with--verbose
to show reverse dependencies.
I always use --depclean
(-c
) to unmerge individual packages; it works fine
Solution 2
gentoolkit comes to help:
equery d <atom>
You can check dependencies first, then proceed to remove the package after inspecting its dependencies.
Solution 3
Another way to achieve the same result (although it's not a command that unmerges with dependency checking): emerge --deselect package
, which removes the package from the world file. Now, running emerge --depclean
will remove that package iff it's not required by any other package.
Solution 4
Sometimes, emerge --unmerge
gives this warning message:
* This action can remove important packages! In order to be safer, use
* `emerge -pv --depclean <atom>` to check for reverse dependencies before
* removing packages.
It seems that this is the recommended way to do dependency checking before unmerging a package. I still hope, though, that there is a better, more automated, way to achieve this.
Related videos on Youtube
bnikhil
Freelance software developer, mostly using Java, JavaScript, and Python at the moment.
Updated on September 18, 2022Comments
-
bnikhil over 1 year
I wanted to uninstall a specific package in Gentoo and browsed through the emerge man page. I found the
--unmerge
option:WARNING: This action can remove important packages! Removes all matching packages. This does no checking of dependencies, so it may remove packages necessary for the proper operation of your system.Its arguments can be atoms or ebuilds. For a dependency aware version of --unmerge, use --depclean or --prune.
However, I'd like emerge to check whether the package I want to uninstall is required by any other installed package in the system.
--depclean
and--prune
don't provide that functionality:--depclean
removes packages that were installed as dependencies, but are not needed anymore--prune
"removes all but the highest installed version of a package from your system"
Is there no dependency-checking version of
--unmerge
? -
bnikhil almost 12 yearsDoes that mean that
emerge --depclean
removes all packages that were installed usingemerge --oneshot
(unless those packages are needed by a package from world)? -
kmacdonald almost 12 years@danielkullmann yes. it computes the whole dependency graph and removes what's not pulled by any package in world. You can use
emerge --noreplace --select
to add already installed packages without recompiling them, btw.