Safely uninstall a package in Gentoo

35,148

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.

Share:
35,148

Related videos on Youtube

bnikhil
Author by

bnikhil

Freelance software developer, mostly using Java, JavaScript, and Python at the moment.

Updated on September 18, 2022

Comments

  • bnikhil
    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
    bnikhil almost 12 years
    Does that mean that emerge --depclean removes all packages that were installed using emerge --oneshot (unless those packages are needed by a package from world)?
  • kmacdonald
    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.