244

After upgrading from 10.04 to 12.04 I am trying to install different packages. For instance ia32-libs and skype (4.0).

When trying to install these, I am getting the 'Unable to correct problems, you have held broken packages' error message.

Output of commands:

sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

After running this:

sudo dpkg --configure -a
foo@foo:~$ sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
  • 3
    It may help if you showed us the command you are actually trying (such as sudo apt-get install ia32-libs) and the output from that command. Also, does sudo apt-get dist-upgrade show any available updates? – thomasrutter Nov 29 '12 at 1:59
  • 3
    I don't know what's wrong with your question, I don't see any actual error, nor the one you describe in your title. – Braiam Sep 10 '14 at 14:20
  • Possibly there are packages preventing package manager from working properly which is listed in your terminal error line(in may case: git-man is a dependency for git). sudo apt-get remove git-man next sudo apt-get purge git-man then sudo apt-get install git. It installed git-man again and everything seems working. – Siamak SiaSoft Mar 30 at 15:16

10 Answers 10

272

That particular error message may indicate that you have held packages, but it may also indicate a different problem.

You can get a list of actual held packages with:

dpkg --get-selections | grep hold

If there are none, or none look related, then it's probably something else. Check carefully the output of the command you were trying when you got the error message, as there may be other clues in the full output from that command, aside from the error message.

Another method of troubleshooting may be to use aptitude rather than apt-get to try to install your package:

sudo aptitude install <packagename>

Aptitude will give up less easily, and will attempt to find solutions which may involve modifying other packages. It may give you more explanation of the problem and options for fixing it.

Occasionally aptitude will be too eager to remove or downgrade large numbers of packages to satisfy your request, in which case retrying with -f changes its priorities and helps it come up with solutions that involve removing/downgrading fewer packages even if it means not all changes you requested can go ahead:

sudo aptitude -f install <packagename>
|improve this answer|||||
  • 6
    Any idea how to unhold a package? :-) – Eugene van der Merwe Apr 17 '13 at 14:24
  • 6
    That is a separate question. – thomasrutter Apr 20 '13 at 13:58
  • 67
    Aptitude was more helpful to me than apt-get, thanks for the hint. – szx Oct 27 '13 at 15:20
  • 11
    One thing to note is that aptitude may make it easier to do more damage to your system. For example, if apt-get fails to install something because of conflicting dependencies it will give up. However, aptitude might offer to go ahead, but uninstall a whole bunch of other packages in order to satisfy those conflicts - or even downgrade packages. You simply have to be aware of what it's suggesting and proceed only if it is a good idea. – thomasrutter Mar 12 '14 at 3:23
  • 4
    The "on hold" packages has nothing to do with the message, just that the conflict was avoided by holding them down (not installing, upgrading, downgrading, or removing). – Braiam Aug 23 '14 at 2:50
35

That happened to me too. All I did was sudo apt-get update and that fixed my issue. Good luck.

|improve this answer|||||
13

I had a similar scenario in a fresh install of 14.04, with no files listed in dpkg --get-selections | grep hold, and no joy after sudo apt-get update.

What did fix it for me was a simple

sudo apt-get autoremove

When I tried to reinstall the failing package it worked fine. Yay!

|improve this answer|||||
10

These are some fast and easy ways to fix the you have held broken packages error.

  • Open your sources.list file in /etc/apt/sources.list and check that there aren't any software sources for a different Ubuntu release than the Ubuntu release that you are currently using. If you find any incorrect release lines in sources.list, open the sources.list file with sudoedit /etc/apt/sources.list, comment out the incorrect lines in sources.list by preceding them with a # character, save the sources.list file, and run sudo apt update to update the list of available software packages.

  • Select the Fix Broken Packages option in Synaptic package manager. Run the following commands to install Synaptic.

    sudo apt update  
    sudo apt upgrade   
    sudo apt install synaptic  
    

    Open Synaptic and in Synaptic select Edit -> Fix Broken Packages and then repeat Edit -> Fix Broken Packages a second time.

    In Synaptic in the left pane click the Custom Filters button which is marked by the mouse cursor in the below screenshot. From the list in the top left corner select Broken. In the center pane will be listed any broken packages that still need to be repaired.

    show broken packages in Synaptic

    Select the broken packages one at a time. Select a broken package, and then open the terminal and run apt policy <package-name>. The results of this command will tell you if that broken package was installed from the default Ubuntu repositories or from some other source. If the broken package was installed from some other source, maybe that package can be removed along with its software source and replaced by a different version of the same package from the default Ubuntu repositories. Usually this means fixing a broken package by downgrading that package to an older version.

  • If you get this error message:

    Try 'apt-get -f install' with no packages (or specify a solution)  
    

    Run the following commands:

    sudo apt update  
    sudo apt upgrade   
    sudo apt-get -f install   
    
  • Manually remove a broken package.

    1. Find your package in /var/lib/dpkg/info

      ls -l /var/lib/dpkg/info | grep <package>
      
    2. Move the package folder to another location.

      cd /tmp && sudo mkdir new-package-location  
      sudo mv /var/lib/dpkg/info/<package>.* /tmp/new-package-location/    
      
    3. Run the following command:

      sudo dpkg --remove --force-remove-reinstreq <package>  
      

If all of these methods don't work it is possible that the broken packages are caused by something that is embedded so deeply in the operating system that none of these methods have any effect on it. The first obvious place to look for this deeply embedded "something" is in the software sources in /etc/apt/sources.list. Check the sources.list file to see if it contains any non-standard lines that may be causing a broken packages error. A standard Ubuntu sources.list file looks like the sources.list files in this answer.

The correct way to remove a suspicious line from sources.list is to comment it out by preceding it with a # character. Then run sudo apt update to refresh the list of available software.

|improve this answer|||||
9

I ran into a similar scenario regarding missing dependencies. In my case I was trying to install curl on ubuntu saucy salamander 13.10...

The error stated that the dependency required an earlier version of the curl3 library.

I was able to degrade to the earlier version by trying to install curl using aptitude.

When it noted the missing dependency, and the reason (required an earlier version of the library file), it gave me several options in how to respond... y//n/q

Y would have aborted the install, N would look for another option, and Q would simply quit and do nothing more, leaving a broken package.

I selected N, and it gave me the option to downgrade the library file to an earlier version. So that's what I did, and curl finished installing with no more errors.

  • I may look into upgrading the library file again after the install, but hey, so far so good.
|improve this answer|||||
4

Had the same problem, I ran that package check command from the other answer (dpkg --get-selections | grep hold) and saw

tomcat7                                         deinstall
tomcat7-common                                  install

so I used "apt-get remove tomcat7-common"

Then I could install Tomcat 6 (I was removing Tomcat 7 and installing Tomcat 6 as you do).

|improve this answer|||||
  • The "on hold" packages has nothing to do with the message, just that the conflict was avoided by holding them down (not installing, upgrading, downgrading, or removing) – Braiam Aug 23 '14 at 2:51
  • add the flag purge: apt-get remove --purge packet – Sergio Abreu Jan 5 '17 at 11:22
0

For me, none of the above worked because my system wasn't updated. I did

Home Key > Software Updater > Install

and updated my system; afterwards, I could install my package normally with apt.

|improve this answer|||||
0

I had the same problem reinstalling xsane after a failed ppa installation. As happened to yochannah, "no files listed in dpkg --get-selections | grep hold, and no joy after sudo apt-get update".

The hint that apt-get gave me is

xsane : Depends: libsane (>= 1.0.24) but it is not going to be installed

Because of yochannah answer, I had the feeling I must remove some previously installed packages. And it was so, I had to manually remove all related packages to sane, amongst others xsane-common and libsane, which was still installed as the ppa version.

Therefore, watch out what you have previously installed and tidy up!

|improve this answer|||||
0

I just ran into the same issue with Ubuntu Mate and I found this thread. My issue was trying to chain the update command together like this...

sudo apt update && sudo apt upgrade -y && sudo apt autoremove

Which should have worked. It didn't give me any errors, but it ran quick and gave me a list of packages that aren't ready for release yet. The result was I couldn't install my additional drivers.

I fixed it by running the update / upgrade / autoremove commands separately...

sudo apt update
sudo apt upgrade -y
sudo apt autoremove

That took the normal long time - especially upgrade - and now my installers work fine. I still don't know why chaining those commands together into one didn't work.

#head-scratcher

Here's my driver install running finally.

Additional Drivers Installation Running. Good luck!

Update: After thinking about it for a bit, I think the warnings I was getting about the packages that aren't ready to be installed yet, were being treated as errors, and breaking the && chain from continuing. Probably had I just chained the commands together with ; it would have worked.

sudo apt update ; sudo apt upgrade -y ; sudo apt autoremove
|improve this answer|||||
-1

This worked for me

sudo apt update && sudo apt upgrade -y && sudo apt autoremove
sudo apt list | grep python | cut -d "/" -f1 | xargs sudo apt-get remove -y
sudo apt list | grep python3.6 | grep -v libboost | cut -d "/" -f1 | xargs sudo apt-get install -y
sudo apt-get install python-pip -y
sudo apt-get install python3-pip -y
|improve this answer|||||
  • 3
    -1 from me because removing all python packages will relatively safely destroy the system. The whole Ubuntu architecture is heavily relying on the presence of python, be it version 2.7 (older Ubuntu versions) or 3.5 - 3.7 (17.10 - 19.10). – Videonauth Dec 26 '19 at 8:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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