Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

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.

share|improve this question
3  
It's a bit late to be of help in this case, but the next time you want to install something, consider doing a simulation first. Run sudo apt-get install -s package where -s denotes a simulation and package will be replaced by the appropriate software's name. –  user25656 Jan 25 '13 at 17:12
    
@vasa1 Yes, am beating my self up about this. apt-get asks [Y/n] as well, that should have been my out.. –  Karthik T Jan 25 '13 at 17:22
    
I got just 1 other python related package (python-keybinder or summat) as "unnecessary" Did you actually remove the cardapio-gnomepanel package? –  gertvdijk Jan 25 '13 at 17:25
    
@gertvdijk yes, apt-get remove carpadio took that one along too. –  Karthik T Jan 25 '13 at 17:56
1  
@KarthikT Then I'm completely lost as to why autoremove isn't working for you. Either you somehow marked all packages as manually installed now or there's a plain misunderstanding. It's very simple: apt-get autoremove just removes all automatically installed marked packages without a reason to have them now. If it doesn't work for you, I think you have changed something on your system you didn't tell about in your question. –  gertvdijk Jan 25 '13 at 17:59

7 Answers 7

up vote 39 down vote accepted
+50

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

share|improve this answer
1  
In this OP has pulled in Unity and all its friends. I doubt purging cardapio will remove Unity etc even after autoremove. –  user25656 Jan 25 '13 at 17:15
    
@vasa1 Why? The packages are marked as 'automatically installed' (as can be seen in the question) and if no reason can be found for those to be installed on the system, they will be suggested for removal using autoremove. –  gertvdijk Jan 25 '13 at 17:16
    
Yes, I was wondering about the "automatic". If that serves to indicate autoremoval that's good. OP should have no problems then. –  user25656 Jan 25 '13 at 17:19
    
@gertvdijk good catch by @vasa1, pls see my edit. autoremove did not help. –  Karthik T Jan 25 '13 at 17:25
    
@gertvdijk, for "Subsequent install actions", would a sudo apt-get update be sufficient? –  user25656 Jan 25 '13 at 17:26

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
share|improve this answer
1  
Thanks, I came across this, and it sounded like exactly what the doctor ordered, until I saw the caveat that I needed to use it to install, to be able to undo.. –  Karthik T Jan 25 '13 at 17:28
    
Nice catch. Very confusing syntax, though. And I really don't like to use alternatives to well-tested core APT application. Still +1! –  gertvdijk Jan 25 '13 at 17:38

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)

share|improve this answer
1  
Nice script, but it should really be just sequence of commands people can remember to accomplish it. –  gertvdijk Jan 25 '13 at 17:53
    
Thanks, intimidating script, but I was afraid it would come down to this –  Karthik T Jan 25 '13 at 18:07
1  
I used very similar code to solve my very similar problem. I did it in several steps just to be more sure about what was happening. First I copied relevant block of text from the apt log into a new file and then applied this to it: perl -pe 's/\(.*?\)(, )?//g' /path/to/apt-history.log Then all I did was prepend that output with sudo apt-get remove and I was good to go! –  Insperatus Feb 1 '13 at 18:39

After you remove the one package, and you can remove it thoroughly by adding --purge, for, apt-get remove --purge <package>, it should give you a message that the library packages it pulled in were installed automatically and no longer necessary, at which point you can run apt-get autoremove to remove them.

share|improve this answer
    
Thanks, but autoremove proved to be insufficient in this case. Please see my edit. –  Karthik T Jan 25 '13 at 17:27

Follow the sudo apt-get purge packagename with

sudo apt-get autoremove. 

Unless it's metapackage this should take care of it.

Also see the faq at How do I manually remove all Cardapio files?.

share|improve this answer
    
Thanks, but autoremove proved to be insufficient in this case. Please see my edit. Thank you for the FAQ link, very useful! –  Karthik T Jan 25 '13 at 17:26
1  
Some of those packages may be needed by other things and not marked as able to be autoremoved. Did you look at the instructions at the link? How are those? –  chaskes Jan 25 '13 at 17:32
    
The instructions on the link are rather orthogonal to the core issue, and as it is, I am leaning towards reinstalling my system. thanks anyway. –  Karthik T Jan 25 '13 at 18:02
  1. Paste the long list of unwanted packages from the apt log into a new_file.txt
  2. Execute perl -pe 's/\(.*?\)(, )?//g' /path/to/new_file.txt
  3. Copy the output of the last command to the clipboard or pipe it there in the first place.
  4. Execute sudo apt-get remove [paste the contents of the clipboard here]

Done.

Basically we need to format the list of packages from the apt log into something apt-get can understand. The parenthesis, words in between, and the commas need to go so that's where the perl comes in to play. Yes, there are better (more efficient) ways - but I've done this, its easy to understand, and it works.

share|improve this answer
    
+1 for personal experience and explanation, but as I have mentioned earlier, I have already reset my Live USB –  Karthik T Feb 2 '13 at 10:57

If you have just added a ppa and want to revert, you need to do the steps described below. Understand this can fail, when you've installed other packages you don't want to uninstall. I'm sure this can be done with a script. Personally I think this should be a part of apt, and there should be better administration of which packages are installed because of dependencies and which are installed by request of the user.

1) remove the ppa from /etc/apt/sources.list Remember the time you added the ppa. If you're lucky, you don't need to be precise.

2) make a list what to reinstall, from the moment you installed the PPA: cat /var/log/dpkg.log | grep 'upgrade '

3) make a list what to remove, from the moment you installed the PPA: cat /var/log/dpkg.log | grep 'install '

4) remove all packages from step 3: sudo apt-get remove {list of packages from step 3}

5) reinstall all packages from step 2: sudo apt-get install --reinstall {list of packages from step 2}

6) If things went wrong and you cannot think of a solution, put back the PPA and reinstall all packages from the two lists.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.