Mark rpm package as automatically installed
On debian systems I can use aptitude markauto
and aptitude unmarkauto
to mark packages as manually or automatically installed. I use this to remove unneeded packages by marking the packages I know I want. Then apt-get autoremove
will remove all packages that are not needed.
I'm now on a fedora system and would like a similar feature in either rpm or yum or other program. Does rpm/yum even have a concept of manual/auto installed packages like debian systems?
At least newer yum versions (tested on Fedora 20 with yum 3.4.3) are able to distinguish between manually-installed packages and packages installed as dependencies. This information is stored in yumdb using the key "reason" which can be either set to "user" or "dep".
# yumdb set reason dep [package name or wildcard]
should be the equivalent to "aptitude markauto". If you do not provide a package name, the change is applied to all packages. I wouldn't do that, the less radical way is to use
# yumdb search reason user
and manually remove the packages you don't want.
If you run
# yum autoremove
all packages marked as "dep" are removed if they are no longer referenced by other packages. Should be equivalent to "aptitude autoremove".
Packages installed not using yum (e.g rpm -i) might not have the "reason" key, I assume the default behavior of autoremove is to treat them as "user" packages, but they are not listed using the "yumdb search" command.
With DNF
To unmark a package as user installed (ie. the package will be removed by autoremove if it is not a dependency of a user installed package):
dnf mark remove [package name or wildcard]
Conversely, to mark a package as user installed (the package will never be removed by autoremove):
dnf mark install [package name or wildcard]
There is also dnf mark group [package]
, which marks a package as having been installed as part of some package group. When a package is marked as installed by a group it will be removed when any group it belongs to is removed using the dnf group remove
command if it is not part of another installed group.