While browsing the YUM man page for some details about the query command I happened to find one of my most wanted feature in a package manager! YUM has some history command which allows for investigation of past transactions and even undo or rollback actions. Epic. I frequently find myself going through install/uninstall steps which not only mess around but I tend to forget about the installed and now unneeded deps.
I'll go through a basic history usage example but there is a lot more to discover. Consider the following command:
# yum install anjuta ... Installed: anjuta.i686 1:3.2.0-1.fc16 Dependency Installed: apr.i686 0:1.4.6-1.fc16 apr-util.i686 0:1.3.12-1.fc16 autogen.i686 0:5.9.4-8.fc15 autogen-libopts.i686 0:5.9.4-8.fc15 devhelp.i686 1:3.2.0-1.fc16 glade3-libgladeui.i686 1:3.10.0-6.fc16 guile.i686 5:1.8.8-3.fc16 libgda.i686 1:4.2.8-2.fc16 libgda-sqlite.i686 1:4.2.8-2.fc16 libgdl.i686 1:3.2.0-1.fc16 sqlite-devel.i686 0:3.7.7.1-1.fc16 subversion-libs.i686 0:1.6.17-5.fc16 vala.i686 0:0.14.2-3.fc16
Many dependencies have been installed and you surely won't remember all of them when later removing anjuta. You could go through some cleaning session using package-cleanup, from
yum-utils but that isn't really intended to revert back your system status, it will just help you remove unneeded packages. Here's instead what history can do for you:
# yum history list anjuta
Loaded plugins: downloadonly, langpacks, presto, refresh-packagekit
ID | Command line | Date and time | Action(s) | Altered
-------------------------------------------------------------------
172 | install anjuta | 2012-04-26 09:02 | Install | 14
# yum history info 172
Loaded plugins: downloadonly, langpacks, presto, refresh-packagekit
Transaction ID : 172
Begin time : Thu Apr 26 09:02:57 2012
Begin rpmdb : 1225:459cfe1ee50fe38d585386f265e6647ab8d4b5a9
End time : 09:03:19 2012 (22 seconds)
End rpmdb : 1239:9784f29b6dff78d982e401bfa5e4cbd9620c47ed
User : Giulio Fidente
Return-Code : Success
Command Line : install anjuta
Transaction performed with:
Installed rpm-4.9.1.3-1.fc16.i686 @updates
Installed yum-3.4.3-23.fc16.noarch @updates
Installed yum-metadata-parser-1.1.4-5.fc16.i686 @koji-overrides
Packages Altered:
Install anjuta-1:3.2.0-1.fc16.i686 @fedora
Dep-Install apr-1.4.6-1.fc16.i686 @updates
Dep-Install apr-util-1.3.12-1.fc16.i686 @fedora
Dep-Install autogen-5.9.4-8.fc15.i686 @fedora
Dep-Install autogen-libopts-5.9.4-8.fc15.i686 @fedora
Dep-Install devhelp-1:3.2.0-1.fc16.i686 @fedora
Dep-Install glade3-libgladeui-1:3.10.0-6.fc16.i686 @updates
Dep-Install guile-5:1.8.8-3.fc16.i686 @fedora
Dep-Install libgda-1:4.2.8-2.fc16.i686 @updates
Dep-Install libgda-sqlite-1:4.2.8-2.fc16.i686 @updates
Dep-Install libgdl-1:3.2.0-1.fc16.i686 @fedora
Dep-Install sqlite-devel-3.7.7.1-1.fc16.i686 @fedora
Dep-Install subversion-libs-1.6.17-5.fc16.i686 @fedora
Dep-Install vala-0.14.2-3.fc16.i686 @updates
# yum history undo 172
...
Removed:
anjuta.i686 1:3.2.0-1.fc16
apr.i686 0:1.4.6-1.fc16
apr-util.i686 0:1.3.12-1.fc16
autogen.i686 0:5.9.4-8.fc15
autogen-libopts.i686 0:5.9.4-8.fc15
devhelp.i686 1:3.2.0-1.fc16
glade3-libgladeui.i686 1:3.10.0-6.f16
guile.i686 5:1.8.8-3.fc16
libgda.i686 1:4.2.8-2.fc16
libgda-sqlite.i686 1:4.2.8-2.fc16
libgdl.i686 1:3.2.0-1.fc16
sqlite-devel.i686 0:3.7.7.1-1.fc16
subversion-libs.i686 0:1.6.17-5.fc16
vala.i686 0:0.14.2-3.fc16
Great isn't it? And there is a lot more! The rollback command will revert back the status of the whole software packages installed at the time of the transaction ID.