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

После обновления с 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.

17 ответов

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

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

dpkg --get-selections | grep hold

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

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

sudo aptitude install <packagename>

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

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

sudo aptitude -f install <packagename>

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

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

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

sudo apt-get autoremove

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

Вот несколько быстрых и простых способов исправить 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. В центральной панели будут перечислены все сломанные пакеты, которые еще нужно починить.

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

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

    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>
      

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

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

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

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

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

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

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

Я испробовал все методы, упомянутые на этой странице. Как-то у меня не вышло.

Вот как я это исправил: Отследите сломанный пакет и переустановите его.

Вот пример:

Я пытаюсь установить aptitude.

sudo apt install aptitude

Не удалось установить libcwidget3v5

sudo apt установить libcwidget3v5

Попробуйте установить libncursesw5

sudo apt установить libncursesw5

Попробуйте установить libtinfo5

sudo apt установить libtinfo5

Бинго, этот парень виноват libtinfo5, он уже там, удалите и переустановите.

Удалить или очистить libtinfo5.

apt purge libtinof5 было бы лучше, так как он также удаляет файлы конфигурации.

sudo apt удалить libtinfo5

Переустановить libtinfo5 еще раз

sudo apt установить libtinfo5

Теперь попробуйте установить aptitude

sudo apt install aptitude

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

tomcat7                                         deinstall
tomcat7-common                                  install

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

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

Давайте разберем эту ошибку на примере:

Предположим, это сообщение об ошибке:

      The following packages have unmet dependencies:
 nginx-module-brotli : Depends: nginx (= 1.17.3-2-ppa7~bionic)
E: Unable to correct problems, you have held broken packages.

Разобьем его на переменные:

      X=nginx-module-brotli
Y=nginx
Z=1.17.3-2-ppa7~bionic

Вот пакет, который вы пытаетесь установить. это пакет, который вызывает проблемы с зависимостями (может быть несколько s), и это требуемая версия.

Итак, в резюме:

нужен пакет с версией для работы.

Однако при поиске версии для .

Итак, давайте проверим, доступна ли версия для пакета. Мы можем использовать apt-cache policy <package_name>чтобы найти доступные версии пакета. Например:

       $ apt-cache policy nginx
libasound2:
  Installed: nginx_1.20.2-1~bionic
  Candidate: 1.2.2-2.1ubuntu2
  Version table:
 *** nginx_1.20.2-1~bionic 100
        100 /var/lib/dpkg/status
     1.17.3-2-ppa7~bionic 500
        500 http://br.archive.ubuntu.com/ubuntu focal/main amd64 Packages

Здесь вы можете увидеть две версии пакета nginxдоступен. Версия, требуемая Xявляется . Согласно таблице версий, версия Zдля пакета Yдоступен. Но всегда устанавливает последнюю версию (я знаю, что это немного глупо ). Так что есть два способа исправить это:

  1. Установите правильную версию пакета.
  2. Увеличить способность apt.

Чтобы установить правильную версию пакета, используйте:

      sudo apt update
sudo apt install <Y>=<Z>

Где находится пакет, вызывающий проблемы с зависимостями, и нужная ли версия X. Теперь установка должна пройти успешно.

Чтобы увеличить способности вашего менеджера пакетов:

      sudo apt update
sudo apt install aptitude
sudo aptitude -f install <Z>

Где находится пакет, который вы пытаетесь установить. Несколько полезных советов с aptitude:

  • -fопция выполнит предварительное устранение неполадок. Это очень полезно!

  • выбор nдля решения заставит aptitude предлагать больше решений!

  • Бег man aptitudeпокажет подробное руководство по использованию aptitude. Онлайн руководство .

Версия пакета недоступна?

Во-первых, попробуйте запустить sudo apt updateдля обновления списка репозиториев. Затем попробуйте установить пакет еще раз.

Все еще нет в наличии?

У вас есть два варианта:

  1. Найдите пакет на https://packages.ubuntu.com/ и восстановите репозитории по умолчанию.

  2. Добавьте пользовательские PPA для удовлетворения зависимостей.

Поиск пакетов и восстановление репозиториев по умолчанию: -

  1. Перейдите на https://packages.ubuntu.com

  2. Прокрутите вниз до раздела «Поиск».

  3. В столбце Ключевое слово введите название пакета.

  4. В столбце Распространение выберите кодовое имя вашей версии Ubuntu ( lsb_release -c).

  5. Нажмите на поиск!Поиск!

  6. Выберите точное попадание.Точный

  7. Проверьте версию и репозиторий пакета.Тщательно проверьте

Проверьте, совпадают ли требуемая версия и доступная версия. Если да, обратитесь к разделу Как восстановить репозитории по умолчанию?

Добавление пользовательского PPA.

Вы должны принять помощь от Google для этого. Просто погуглите пакет и версию, и, надеюсь, вы найдете PPA.

Некоторые полезные команды:

  • sudo apt -f install <package>для принудительной установки пакета.
  • sudo aptitude -f install <package>Чтобы принудительно установить пакет.
  • sudo add-apt-repository whatever/ppaчтобы добавить PPA.
  • sudo apt purge <package>удалить пакет.

Я задаю новый вопрос , какую информацию я должен предоставить?

Информация, такая как:

  • Ваша версия Ubuntu (вывод lsb_release -d.
  • Вывод sudo apt install <package>
  • Вывод apt policy <package>а также apt policy <package's dependency>

Другие детали должны быть предоставлены по запросу.

Сообщение об ошибке вводит в заблуждение.

Там написано " у вас есть посылки ", хотя часто у вас не будет посылок:

      $ apt-mark showhold

Ничего бы не напечатал.

Что на самом деле происходит, так это то, что пакеты хранятся сами по себе во время анализа зависимостей. Так, например, вы можете увидеть такой вывод:

      $ apt-get install gcc:i386
<...skip...>
The following packages have unmet dependencies:
 gcc:i386 : Depends: cpp:i386 (= 4:9.3.0-1ubuntu2) but it is not going to be installed
            Depends: gcc-9:i386 (>= 9.3.0-3~) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

Понятно, что это не очень полезно...

Итак, чтобы отладить это дальше, запустите с флагом -o Debug::pkgProblemResolver=yes

      $ apt-get -o Debug::pkgProblemResolver=yes install gcc:i386

Теперь это напечатает кучу строк, например

      Investigating (0) gcc:amd64 < 4:9.3.0-1ubuntu2 @ii mK Ib >
Broken gcc:amd64 Conflicts on gcc:i386 < none -> 4:9.3.0-1ubuntu2 @un puN Ib >
  Considering gcc:i386 9999 as a solution to gcc:amd64 3
  Removing gcc:amd64 rather than change gcc:i386
Investigating (0) binutils:amd64 < 2.34-6ubuntu1.1 @ii mK Ib >
Broken binutils:amd64 Conflicts on binutils:i386 < none -> 2.34-6ubuntu1.1 @un uN Ib >
  Considering binutils:i386 0 as a solution to binutils:amd64 1
  Added binutils:i386 to the remove list
  Conflicts//Breaks against version 2.34-6ubuntu1 for binutils but that is not InstVer, ignoring
  Fixing binutils:amd64 via keep of binutils:i386
Investigating (0) cpp:amd64 < 4:9.3.0-1ubuntu2 @ii mK Ib >
Broken cpp:amd64 Depends on cpp-9:amd64 < 9.3.0-17ubuntu1~20.04 @ii mR > (>= 9.3.0-3~)
  Considering cpp-9:amd64 -1 as a solution to cpp:amd64 1
  Added cpp-9:amd64 to the remove list
Broken cpp:amd64 Conflicts on cpp:i386 < none -> 4:9.3.0-1ubuntu2 @un uN Ib >
  Considering cpp:i386 0 as a solution to cpp:amd64 1
  Added cpp:i386 to the remove list
  Fixing cpp:amd64 via keep of cpp-9:amd64
  Fixing cpp:amd64 via keep of cpp:i386
. . .

Суть в том, gcc:i386не может сосуществовать с gcc:amd64. Это все aptмог сказать действительно.

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

Home Key > Software Updater > Install

и обновил мою систему; после этого я мог нормально установить пакет apt,

Я просто столкнулся с той же проблемой с Ubuntu Mate, и я нашел эту тему. Моя проблема пыталась связать команду обновления вместе, как это...

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

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

Я исправил это, запустив команды update / upgrade / autoremove отдельно...

sudo apt update
sudo apt upgrade -y
sudo apt autoremove

Это заняло обычное долгое время - особенно обновление - и теперь мои установщики работают нормально. Я до сих пор не знаю, почему объединение этих команд в одну не сработало.

# Головы скребок

Вот мой драйвер, наконец-то запущенный.

Удачи!

Обновление. Подумав немного об этом, я думаю, что предупреждения о пакетах, которые еще не готовы к установке, рассматривались как ошибки и не позволяли цепочке && продолжать работу. Вероятно, если бы я только что приковал команды вместе с; это бы сработало.

sudo apt update ; sudo apt upgrade -y ; sudo apt autoremove

У меня была такая же проблема переустановка 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 версия.

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

Попробуй это:

      sudo dpkg -l | grep '^.[^i]'

Затем для каждого пакета, у которого есть что-то отличное от первого и второго столбца, или..Rв третьем столбце удалите их, используя:

      sudo dpkg --remove --force-all package_name  ## You might need to do this lots
sudo apt-get clean
sudo apt-get update
sudo apt-get --fix-broken install

Надеюсь, это должно исправить сломанный пакет.

The iсимвол обычно является установленным состоянием или желаемым состоянием. Описание есть по адресу: Как интерпретировать статус dpkg (–list)

Пример:

Чтобы продемонстрировать сломанный пакет, я скачал кучу.debпакеты, необходимые дляnpmупаковка. Затем я удалил два пакета и установил остальные в каталог с помощьюsudo dpkg -i *и, следовательно, была создана ситуация с неработающей зависимостью пакета. Затем я сделал, как указано выше.

Следующее стало результатомsudo dpkg -l | grep '^.[^i]'команда:

      iU  node-cacache                               15.0.5+~cs13.9.21-3                     all          fast, fault-tolerant, disk-based, data-agnostic, content-addressable cache
iU  npm                                        8.5.1~ds-1                              all          package manager for Node.js

Затем я очистил все отмеченные, кромеiiнапримерiUс помощью команд:

      sudo dpkg --purge --force-all npm
sudo dpkg --purge --force-all node-cacache

А затем последовала остальная часть процедуры.

И, наконец, имеяsynapticДиспетчер пакетов заранее в вашей системе, помимо других преимуществ, очень полезен для устранения сломанных пакетов. Вы можете установить synaptic с помощьюsudo apt-get install synaptic.

У меня была эта проблема и в 2021 году с Ubuntu 20.04 LTS. Может быть, для некоторых людей в будущем: мне помогло проверить панель «Приложение и обновление»!

Потому что я изменил всего за несколько минут до позиции: «Для других пакетов подписаться на:» я изменил его со «все обновления» на «только исправления/обновления безопасности» — и когда я изменил его обратно на «все обновления» — я наконец смог установить все.

Я столкнулся с той же проблемой при обновлении с 14.04 LTS к 16.04 LTS. Вам нужно отследить сломанный пакет и рекурсивно попробовать переустановить или обновить его.

Сначала удалите все зависимые библиотеки (autoremove) и установите все недостающие библиотеки, используя sudo apt-get -f install (-f означает --fix-missing)

sudo apt-get autoremove
sudo apt-get -f install
sudo apt-get update
sudo apt-get upgrade 

Установить ubuntu toolchain из PPA

sudo add-apt-repository ppa:ubuntu-toolchain-r/test

Затем установите aptitude.

sudo apt install aptitude

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

$ sudo aptitude -f install build-essential
The following NEW packages will be installed:
  build-essential cpp{a} cpp-5{a} g++{a} g++-5{a} gcc{a} gcc-5{a} libasan2{a} libcc1-0{ab} 
  libcilkrts5{a} libgcc-5-dev{a} liblsan0{ab} libmpx0{a} libstdc++-5-dev{a} 
The following packages will be upgraded:
  gcc-5-base libstdc++6{b} 
2 packages upgraded, 14 newly installed, 0 to remove and 5 not upgraded.
Need to get 29.6 MB of archives. After unpacking 100 MB will be used.
The following packages have unmet dependencies:
 liblsan0 : Depends: gcc-9-base (= 9.3.0-10ubuntu2~16.04) but 9.3.0-11ubuntu0~14.04 is installed.
 libcc1-0 : Depends: gcc-9-base (= 9.3.0-10ubuntu2~16.04) but 9.3.0-11ubuntu0~14.04 is installed.
 libstdc++6 : Depends: gcc-9-base (= 9.3.0-10ubuntu2~16.04) but 9.3.0-11ubuntu0~14.04 is installed.

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

В качестве build-essential потребности gcc-5.

$ sudo apt-get -f install gcc-5

The following packages have unmet dependencies:
 gcc-5 : Depends: cpp-5 (= 5.5.0-12ubuntu1~16.04) but it is not going to be installed
         Depends: gcc-5-base (= 5.5.0-12ubuntu1~16.04) but 5.4.0-6ubuntu1~16.04.12 is to be installed
         Depends: libcc1-0 (>= 5.5.0-12ubuntu1~16.04) but it is not going to be installed
         Depends: libgcc-5-dev (= 5.5.0-12ubuntu1~16.04) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

Но gcc-5 в свою очередь зависит от cpp-5

$ sudo apt-get -f install cpp-5

The following packages have unmet dependencies:
 cpp-5 : Depends: gcc-5-base (= 5.5.0-12ubuntu1~16.04) but 5.4.0-6ubuntu1~16.04.12 is to be installed

cpp-5 зависит от gcc-5-base. Здесь вы можете увидеть конкретный конфликт. Aptitide предлагает несколько вариантов разрешения конфликта. В моем случае обновлениеlibstdc++6 решил проблему.

$sudo aptitude -f install gcc-5-base
The following packages will be REMOVED:  
  gcc-5-base{u} 
0 packages upgraded, 0 newly installed, 1 to remove and 6 not upgraded.
Need to get 0 B of archives. After unpacking 67.6 kB will be freed.
The following packages have unmet dependencies:
 libstdc++6 : Depends: gcc-5-base (= 5.4.0-6ubuntu1~16.04.12) but it is not going to be installed.
open: 115; closed: 488; defer: 35; conflict: 58                                                          .The following actions will resolve these dependencies:

     Keep the following packages at their current version:                        
1)     gcc-5-base [5.4.0-6ubuntu1~16.04.12 (now, xenial-security, xenial-updates)]

Accept this solution? [Y/n/q/?] n
The following actions will resolve these dependencies:

      Upgrade the following packages:                                                                     
1)      libstdc++6 [5.4.0-6ubuntu1~16.04.12 (now, xenial-security, xenial-updates) -> 9.3.0-10ubuntu2~16.0

Наконец, теперь конфликт разрешен, попробуйте установить build-essentials еще раз.

$ sudo aptitude -f install build-essential

Удалите все нестандартные источники репозитория.

Регистрироваться /etc/apt/sources.list, и закомментируйте при необходимости.

Я добавил Вселенную ( sudo add-apt-repository universe). После удаления из исходников все обновилось.

Это сработало для меня

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
Другие вопросы по тегам