Is it possible to undo an apt-get install command?

I installed Carpadio on my Xubuntu install (a Live USB), which then pulled like over 50 packages from, I suppose, the Ubuntu side of the repository. Now I would like to undo this. However for all my hunting, I can't find anything more useful than How can I reverse sudo apt get install command, which just suggests apt-get purge. This is not useful since all it does is remove 2 packages (carpadio and carpadio-gnomepanel).

/var/log/apt/history.log has a list of all the packages that was installed along with that command. So I was wondering if there is any easy way to go about removing all of them? Else I can just reinstall, this was a fresh install anyway, but I am curious.

A small sample of the history log (1/5-1/10 of the entire list)

Commandline: apt-get install cardapio-gnomepanel
Install: libdbusmenu-qt2:amd64 (0.9.2-0ubuntu1, automatic), python-packagekit:amd64 (0.7.2-4ubuntu3, automatic), cups-pk-helper:amd64 (0.2.1.2-1ubuntu0.1, automatic), geoclue:amd64 (0.12.0-1ubuntu12, automatic), unity:amd64 (5.18.0-0ubuntu1, automatic), indicator-printers:amd64 (0.1.6-0ubuntu1, automatic), libevolution:amd64 (3.2.3-0ubuntu6, automatic), libqt4-declarative:amd64 (4.8.1-0ubuntu4.3, automatic), libmtp9:amd64 (1.1.3-1ubuntu0.1, automatic), tracker-miner-fs:amd64 (0.14.0-2ubuntu1, automatic), gir1.2-rb-3.0:amd64 (2.96-0ubuntu4.2, automatic), python-aptdaemon.pkcompat:amd64 (0.43+bzr805-0ubuntu7, automatic), gnome-media:amd64 (3.4.0-0ubuntu3.1, automatic), metacity:amd64 (2.34.1-1ubuntu11, automatic), nautilus:amd64 (3.4.2-0ubuntu6, automatic), libcompizconfig0:amd64 (0.9.7.0~bzr428-0ubuntu6, automatic), compiz-plugins-default:amd64 (0.9.7.12-0ubuntu1, automatic), libunistring0:amd64 (0.9.3-5, automatic), libebackend-1.2-1:amd64 (3.2.3-0ubuntu7, automatic), ubuntu-docs:amd64 (12.04.6, automatic), python-mako:amd64 (0.5.0-1, automatic),

To all those who have suggested autoremove: I am not sure why, but I got just 1 other python related package (python-keybinder or something) as "unnecessary" and that is all that autoremove was able to remove.

Between the install and uninstall, only major change was installing xubuntu-restricted-extras.


Basically, you'll have to both apt-get remove (or apt-get purge) the package and run apt-get autoremove after that, to have it revert the installation of package-one.

Let's look at the whole process:

  • sudo apt-get install package-one installs 50 dependencies with it marked "automatic" as also can be seen from the log excerpt in your question

  • sudo apt-get purge package-one removes (purges) just one, but do run this!

    All following install actions (if you run any) will yield an informational message with the no longer needed packages:

    The following packages were automatically installed and are no longer required:
      package-two package-three [...]
    Use 'apt-get autoremove' to remove them.
    

    This list is basically just a list of all packages marked as "automatic" without a reverse dependency on them. In other words, there's no reason for them to be installed as far as the package management is concerned.

    Note: No installation is needed! It's just to demonstrate that APT is smart to tell you about your unneeded packages!

  • sudo apt-get autoremove --purge removes (purges) these

More information

  • Official documentation on autoremove from the apt-get(8) manpage:

    autoremove is used to remove packages that were automatically installed to satisfy dependencies for other packages and are now no longer needed.

  • What is the correct way to completely remove an application?


When you want to remove a package and its dependencies that installed at the time, you should use:

sudo apt-get purge package
sudo apt-get --purge autoremove

but to undo apt actions, you can use apt-undo script. It is a simple script that can undo the apt actions performed in Ubuntu. It is to be noted that this script can only work if you use it instead of apt-get to install/upgrade/remove/purge/downgrade your packages.

To install apt-undo in Ubuntu, run the following commands in the terminal:

sudo add-apt-repository ppa:lkjoel/apt-undo
sudo apt-get update
sudo apt-get install apt-undo

usage:

apt-undo install yourpackages
apt-undo remove yourpackages
apt-undo purge yourpackages
apt-undo upgrade
apt-undo dist-upgrade
apt-undo install yourpackages=old.version
apt-undo install yourpackages=new.version

To undo, the above aptitude actions run following commands in the terminal:

apt-undo undo

Use the power of Unix. Take the log file line that you have, and construct a command that will undo what apt did. For example:

$ echo 'Install: libdbusmenu-qt2:amd64 (0.9.2-0ubuntu1, automatic), python-packagekit:amd64 (0.7.2-4ubuntu3, automatic), cups-pk-helper:amd64 (0.2.1.2-1ubuntu0.1, automatic),'|perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //'
libdbusmenu-qt2:amd64 python-packagekit:amd64 cups-pk-helper:amd64

So you can use this purge all packages you installed accidentally, given the appropriate line from your log file:

$ dpkg -P $(echo '(full log line here)' | perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //')

(I've used perl instead of sed because sed uses a type of regular expression which doesn't support non-greedy matches, which was the easiest way of constructing what I needed)