Невозможно исправить проблемы, у вас есть сломанные пакеты


216

После обновления с 10.04 до 12.04 я пытаюсь установить разные пакеты. Например, ia32-libs и skype (4.0).

При попытке установить их, я получаю сообщение об ошибке «Невозможно исправить проблемы, у вас есть поврежденные пакеты».

Вывод команд:

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.

После запуска этого:

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
Может помочь, если вы покажете нам команду, которую вы на самом деле пытаетесь (например sudo apt-get install ia32-libs), и вывод этой команды. Кроме того, sudo apt-get dist-upgradeпоказывает какие-либо доступные обновления?
Томасруттер

3
Я не знаю, что не так с вашим вопросом, я не вижу ни фактической ошибки, ни той, которую вы описали в своем заголовке.
Брайам


Ответы:


239

Это конкретное сообщение об ошибке может указывать на то, что у вас есть пакеты, но может также указывать на другую проблему.

Вы можете получить список фактически удерживаемых пакетов с:

dpkg --get-selections | grep hold

Если их нет или они не связаны между собой, то, вероятно, это что-то еще. Внимательно проверьте выходные данные команды, которую вы пытались получить, когда получили сообщение об ошибке, поскольку в полном выводе этой команды могут быть другие подсказки, кроме сообщения об ошибке.

Другой способ устранения неполадок может заключаться в использовании aptitude вместо apt-get для установки вашего пакета:

sudo aptitude install <packagename>

Aptitude сдается не так легко и попытается найти решения, которые могут включать изменение других пакетов. Это может дать вам более подробное объяснение проблемы и варианты ее устранения.

Иногда aptitude будет слишком стремиться удалить или понизить рейтинг большого количества пакетов, чтобы удовлетворить ваш запрос, в этом случае повторная попытка с -fизменением приоритетов и поможет ему найти решения, которые включают удаление / понижение количества пакетов, даже если это означает, что не все изменения, которые вы запрашивали можно идти вперед:

sudo aptitude -f install <packagename>

6
Любая идея, как открыть пакет? :-)
Евгений ван дер Мерве


60
Aptitude был для меня более полезным, чем apt-get, спасибо за подсказку.
szx

9
Стоит отметить, что aptitude может облегчить нанесение большего ущерба вашей системе. Например, если apt-get не может установить что-либо из-за конфликтующих зависимостей, он откажется. Тем не менее, aptitude может предложить пойти дальше, но удалить целую кучу других пакетов, чтобы удовлетворить эти конфликты - или даже понизить пакеты. Вы просто должны знать, что он предлагает, и действовать только в том случае, если это хорошая идея.
Томасруттер

4
Пакеты «на удержании» не имеют ничего общего с сообщением, просто чтобы избежать конфликта, удерживая их (не устанавливая, не обновляя, не понижая или не удаляя).
Брайам

33

Это случилось со мной тоже. Все, что я сделал, sudo apt-get updateи это решило мою проблему. Удачи.


9

Я столкнулся с подобным сценарием относительно отсутствующих зависимостей. В моем случае я пытался установить curl на Ubuntu Saucy Salamander 13.10 ...

Ошибка указала, что для зависимости требовалась более ранняя версия библиотеки curl3.

Я смог перейти на более раннюю версию, пытаясь установить curl с помощью aptitude.

Когда он отметил отсутствующую зависимость и причину (требовалась более ранняя версия файла библиотеки), он дал мне несколько вариантов ответа ... y// n/q

Yпрервал бы установку, Nискал бы другую опцию и Qпросто вышел бы и больше ничего не делал, оставив сломанный пакет.

Я выбрал N, и это дало мне возможность понизить файл библиотеки до более ранней версии. Так вот что я сделал, и curl закончил установку без ошибок.

  • Я могу посмотреть на обновление файла библиотеки еще раз после установки, но пока все хорошо.

9

У меня был похожий сценарий в новой установке 14.04, без файлов в списке dpkg --get-selections | grep holdи без радости после sudo apt-get update.

Что это исправило для меня было просто

sudo apt-get autoremove

Когда я попытался переустановить сбойный пакет, он работал нормально. Ура!


4

Возникла та же проблема, я запустил команду проверки пакета из другого ответа ( dpkg --get-selections | grep hold) и увидел

tomcat7                                         deinstall
tomcat7-common                                  install

поэтому я использовал " apt-get remove tomcat7-common"

Затем я мог установить Tomcat 6 (я удалял Tomcat 7 и устанавливал Tomcat 6, как и вы).


Пакеты «в ожидании» не имеют ничего общего с сообщением, просто чтобы избежать конфликта, удерживая их (не устанавливая, не обновляя, не
понижая

добавить очистку флага: apt-get удалить пакет --purge
Серхио Абреу

4

Это несколько быстрых и простых способов исправить you have held broken packagesошибку.

  • Откройте ваш файл sources.list /etc/apt/sources.listи убедитесь, что нет никаких программных источников для выпуска Ubuntu, отличного от выпуска Ubuntu, который вы используете в настоящее время. Если вы обнаружите какие-либо неправильные строки выпуска в sources.list, откройте файл sources.list с помощью sudoedit /etc/apt/sources.list, закомментируйте неправильные строки в sources.list, поставив перед ними #символ, сохраните файл sources.list и запустите, sudo apt updateчтобы обновить список доступные программные пакеты.

  • Выберите опцию « Исправить сломанные пакеты» в диспетчере пакетов Synaptic. Выполните следующие команды для установки Synaptic.

    sudo apt update  
    sudo apt upgrade   
    sudo apt install synaptic  
    

    Откройте Synaptic и в Synaptic выберите « Правка» -> « Исправить сломанные пакеты», а затем повторите « Правка» -> « Исправить сломанные пакеты» во второй раз.

    В Synaptic на левой панели нажмите кнопку Custom Filters , которая отмечена курсором мыши на снимке экрана ниже. Из списка в верхнем левом углу выберите Broken . В центральной панели будут перечислены все сломанные пакеты, которые еще нужно починить.

    показывать битые пакеты в Synaptic

    Выберите сломанные пакеты по одному. Выберите сломанный пакет, а затем откройте терминал и запустите . Результаты этой команды сообщат вам, был ли установлен этот поврежденный пакет из репозиториев Ubuntu по умолчанию или из какого-либо другого источника. Если сломанный пакет был установлен из другого источника, возможно, этот пакет можно удалить вместе с источником программного обеспечения и заменить другой версией того же пакета из репозиториев Ubuntu по умолчанию. Обычно это означает исправление поврежденного пакета путем понижения этого пакета до более старой версии.apt policy <package-name>

  • Если вы получили это сообщение об ошибке:

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

    Запустите следующие команды:

    sudo apt update  
    sudo apt upgrade   
    sudo apt-get -f install   
    
  • Вручную удалите сломанную упаковку.

    1. Найдите свой пакет в /var/lib/dpkg/info

      ls -l /var/lib/dpkg/info | grep <package>
      
    2. Переместите папку пакета в другое место.

      cd /tmp && sudo mkdir new-package-location  
      sudo mv /var/lib/dpkg/info/<package>.* /tmp/new-package-location/    
      
    3. Запустите следующую команду:

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

Если все эти методы не работают, возможно, что поврежденные пакеты вызваны чем-то настолько глубоко встроенным в операционную систему, что ни один из этих методов не окажет на него никакого влияния. Первое очевидное место, где нужно искать это глубоко внедренное «что-то», - это источники программного обеспечения в /etc/apt/sources.list. Проверьте файл sources.list, чтобы увидеть, содержит ли он какие-либо нестандартные строки, которые могут вызывать ошибку неработающих пакетов. Стандартный файл Ubuntu sources.list выглядит как файлы sources.list в этом ответе .

Правильный способ удалить подозрительную строку из sources.list - закомментировать ее, поставив перед ней #символ. Затем запустите, sudo apt updateчтобы обновить список доступного программного обеспечения.


0

Для меня ничего из вышеперечисленного не сработало, потому что моя система не была обновлена. я сделал

Home Key > Software Updater > Install

и обновил мою систему; после этого я мог установить свой пакет как обычно apt.


0

У меня была такая же проблема при переустановке xsaneпосле неудачной ppaустановки. Как случилось с Йоханной, «нет файлов, перечисленных в dpkg --get-selections | grep hold, и нет радости после sudo apt-get update».

Намек, который apt-getдал мне

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

Из-за yochannah ответа у меня возникло ощущение, что я должен удалить некоторые ранее установленные пакеты. И это было так, я должен был вручную удалить все связанные пакеты sane, среди прочего xsane-commonи libsane, который все еще был установлен как ppaверсия.

Поэтому следите за тем, что вы предварительно установили, и приведите в порядок!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.