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

Вопрос или проблема

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

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

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

sudo apt-get install -f
Чтение списков пакетов... Готово
Формирование дерева зависимостей       
Чтение информации о состоянии... Готово
0 обновлено, 0 ново установлено, 0 для удаления и 0 не обновлено.

После выполнения этого:

sudo dpkg --configure -a
foo@foo:~$ sudo apt-get install -f
Чтение списков пакетов... Готово
Формирование дерева зависимостей       
Чтение информации о состоянии... Готово
0 обновлено, 0 ново установлено, 0 для удаления и 0 не обновлено.

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

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

dpkg --get-selections | grep hold

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

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

sudo aptitude install <имя_пакета>

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

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

sudo aptitude -f install <имя_пакета>

Правка: это старый ответ, и с тех пор была выпущена новая оболочка APT, просто названная apt, которая стала предпочтительным интерфейсом командной строки APT для конечных пользователей. Она все еще не является швейцарским ножом, которым является aptitude, но она немного более ориентирована на пользователя, чем apt-get. Я не потратил время, чтобы узнать, как это могло бы помочь в приведенном выше сценарии, но это стоит использовать.

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

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

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

sudo apt-get autoremove

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

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

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

  • Если вы скачали .deb файл вручную, симулируйте его установку, запустив apt install --simulate ./скачанный-файл.deb. Если downloaded-deb-file.deb не может быть установлен из-за неудовлетворённых зависимостей, результаты apt install --simulate ./скачанный-файл.deb перечислят эти неудовлетворенные зависимости. Поскольку команда — это симуляция, вам не нужно и не следует использовать sudo или выполнять её от имени root. Обратите внимание на требования по версиям каждой неудовлетворенной зависимости и ищите в интернете .deb файл(ы), которые соответствуют этим требованиям по версиям. Если вы нашли .deb файл, который соответствует его требованиям по версиям, скачайте его и выполните apt install --simulate ./новый-скачанный-файл.deb, чтобы проверить, есть ли у вновь скачанного .deb файла какие-либо неудовлетворённые зависимости.

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

      sudo apt update  
      sudo apt upgrade   
      sudo apt install synaptic  
    

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

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

    показать сломанные пакеты в Synaptic

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

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

      Попробуйте 'apt-get -f install' без пакетов (или укажите решение)  
    

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

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

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

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

       cd /tmp && sudo mkdir новое-расположение-пакета  
       sudo mv /var/lib/dpkg/info/<пакет>.* /tmp/новое-расположение-пакета/    
      
    3. Выполните следующую команду:

       sudo dpkg --remove --force-remove-reinstreq <пакет>  
      

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

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

Я столкнулся с аналогичной ситуацией относительно отсутствующих зависимостей. В моем случае я пытался установить curl на Ubuntu saucy salamander 13.10…

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

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

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

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

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

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

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

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

Вот пример:

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

sudo apt install aptitude

sudo apt install aptitude

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

sudo apt install libcwidget3v5

sudo apt install libcwidget3v5

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

sudo apt install libncursesw5

sudo apt install libncursesw5

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

sudo apt install libtinfo5

sudo apt install libtinfo5

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

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

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

sudo apt remove libtinfo5

sudo apt remove libtinfo5

Снова установите libtinfo5

sudo apt install libtinfo5

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

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

sudo apt install aptitude

успешно установлен aptitude

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

tomcat7                                         deinstall
tomcat7-common                                  install

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

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

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

Говорится “у вас есть удерживаемые пакеты“, в то время как, как правило, не будет никаких пакетов, удерживаемых вами:

$ apt-mark showhold

Не выведет ничего.

На самом деле пакеты удерживаются самим apt во время анализа зависимостей. Например, вы могли бы увидеть такой вывод:

$ apt-get install gcc:i386
<...пропустить...>
Следующие пакеты имеют неудовлетворенные зависимости:
 gcc:i386 : Зависит от: cpp:i386 (= 4:9.3.0-1ubuntu2), но он не будет установлен
            Зависит от: gcc-9:i386 (>= 9.3.0-3~), но он не будет установлен
E: Невозможно исправить проблемы, у вас есть сломанные пакеты.

Очевидно, это не очень полезно…

Чтобы дополнительно отладить это, запустите apt с флагом -o Debug::pkgProblemResolver=yes

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

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

Исследование (0) gcc:amd64 < 4:9.3.0-1ubuntu2 @ii mK Ib >
Сломанный gcc:amd64 Конфликты с gcc:i386 < none -> 4:9.3.0-1ubuntu2 @un puN Ib >
  Рассмотрение gcc:i386 9999 как решения для gcc:amd64 3
  Удаление gcc:amd64 вместо изменения gcc:i386
Исследование (0) binutils:amd64 < 2.34-6ubuntu1.1 @ii mK Ib >
Сломанный binutils:amd64 Конфликты с binutils:i386 < none -> 2.34-6ubuntu1.1 @un uN Ib >
  Рассмотрение binutils:i386 0 как решения для binutils:amd64 1
  Добавлено binutils:i386 в список для удаления
  Конфликты//Проблемы против версии 2.34-6ubuntu1 для binutils, но это не InstVer, игнорируем
  Исправление binutils:amd64 via keep of binutils:i386
Исследование (0) cpp:amd64 < 4:9.3.0-1ubuntu2 @ii mK Ib >
Сломанный cpp:amd64 Зависит от cpp-9:amd64 < 9.3.0-17ubuntu1~20.04 @ii mR > (>= 9.3.0-3~)
  Рассмотрение cpp-9:amd64 -1 как решения для cpp:amd64 1
  Добавлено cpp-9:amd64 в список для удаления
Сломанный cpp:amd64 Конфликтует с cpp:i386 < none -> 4:9.3.0-1ubuntu2 @un uN Ib >
  Рассмотрение cpp:i386 0 как решения для cpp:amd64 1
  Добавлено cpp:i386 в список для удаления
  Исправление cpp:amd64 via keep of cpp-9:amd64
  Исправление cpp:amd64 via keep of cpp:i386
. . .

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

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

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

Следующие пакеты имеют неудовлетворенные зависимости:
 nginx-module-brotli : Зависит от: nginx (= 1.17.3-2-ppa7~bionic)
E: Невозможно исправить проблемы, у вас есть сломанные пакеты.

Разделим это на переменные:

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

Здесь X — это пакет, который вы пытаетесь установить. Y — это пакет, который вызывает проблемы с зависимостями (их может быть несколько Y), а Z — это версия, которая требуется.

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

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

Тем не менее, apt испытывает трудности с нахождением версии Z для Y.

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

 $ apt-cache policy nginx
libasound2:
  Установлено: nginx_1.20.2-1~bionic
  Кандидат: 1.2.2-2.1ubuntu2
  Таблица версий:
 *** 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. Согласно таблице версий версия Z для пакета Y доступна. Но apt всегда устанавливает последнюю версию. Так что есть два способа исправить это:

  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 <пакет> для принудительной установки пакета.
  • sudo aptitude -f install <пакет> для принудительной установки пакета.
  • sudo add-apt-repository whatever/ppa для добавления PPA.
  • sudo apt purge <пакет> для удаления пакета.

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

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

  • Ваша версия Ubuntu (вывод lsb_release -d).
  • Вывод sudo apt install <пакет>
  • Вывод apt policy <пакет> и apt policy <зависимость_пакета>

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

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

Home Key > Software Updater > Install

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

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

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

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

Я исправил это, выполнив команды обновления / обновления / удаления отдельно…

sudo apt update
sudo apt upgrade -y
sudo apt autoremove

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

# головоломка

Вот как наконец работает установка моего драйвера.

Установка дополнительных драйверов
Удачи!

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

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

У меня была та же проблема с переустановкой xsane после неудачной установки ppa. Как и у yochannah (теперь называется ‘StackExchange What The Heck’), “никаких файлов в dpkg --get-selections | grep hold, и никаких результатов после sudo apt-get update“.

Подсказка, которую мне дал apt-get, это:

xsane : Зависит от: libsane (>= 1.0.24), но он не будет установлен

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

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

Я столкнулся с той же проблемой во время обновления с 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
Следующие НОВЫЕ пакеты будут установлены:
  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} 
Следующие пакеты будут обновлены:
  gcc-5-base libstdc++6{b} 
2 пакета обновлено, 14 ново установлено, 0 для удаления и 5 не обновлено.
Необходимо загрузить 29.6 MB архивов. После распаковки будет использовано 100 MB.
Следующие пакеты имеют неудовлетворенные зависимости:
 liblsan0 : Зависит: gcc-9-base (= 9.3.0-10ubuntu2~16.04), но 9.3.0-11ubuntu0~14.04 установлен.
 libcc1-0 : Зависит: gcc-9-base (= 9.3.0-10ubuntu2~16.04), но 9.3.0-11ubuntu0~14.04 установлен.
 libstdc++6 : Зависит: gcc-9-base (= 9.3.0-10ubuntu2~16.04), но 9.3.0-11ubuntu0~14.04 установлен.

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

Поскольку build-essential нуждается в gcc-5.

$ sudo apt-get -f install gcc-5

Следующие пакеты имеют неудовлетворенные зависимости:
 gcc-5 : Зависит: cpp-5 (= 5.5.0-12ubuntu1~16.04), но он не будет установлен
         Зависит: gcc-5-base (= 5.5.0-12ubuntu1~16.04), но 5.4.0-6ubuntu1~16.04.12 будет установлен
         Зависит: libcc1-0 (>= 5.5.0-12ubuntu1~16.04), но он не будет установлен
         Зависит: libgcc-5-dev (= 5.5.0-12ubuntu1~16.04), но он не будет установлен
E: Невозможно исправить проблемы, у вас есть сломанные пакеты.

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

$ sudo apt-get -f install cpp-5

Следующие пакеты имеют неудовлетворенные зависимости:
 cpp-5 : Зависит: gcc-5-base (= 5.5.0-12ubuntu1~16.04), но 5.4.0-6ubuntu1~16.04.12 будет установлен

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

$sudo aptitude -f install gcc-5-base
Следующие пакеты будут УДАЛЕНЫ:  
  gcc-5-base{u} 
0 пакетов обновлено, 0 ново установлено, 1 для удаления и 6 не обновлено.
Необходимо загрузить 0 B архивов. После распаковки будет освобождено 67.6 kB.
Следующие пакеты имеют неудовлетворенные зависимости:
 libstdc++6 : Зависит: gcc-5-base (= 5.4.0-6ubuntu1~16.04.12), но он не будет установлен.
open: 115; closed: 488; defer: 35; conflict: 58                                                          Следующие действия решат эти зависимости:

     Сохраните следующие пакеты на их текущей версии:                        
1)     gcc-5-base [5.4.0-6ubuntu1~16.04.12 (сейчас, xenial-security, xenial-updates)]

Принять это решение? [Y/n/q/?] n
Следующие действия решат эти зависимости:

      Обновить следующие пакеты:                                                                     
1)      libstdc++6 [5.4.0-6ubuntu1~16.04.12 (сейчас, xenial-security, xenial-updates) -> 9.3.0-10ubuntu2~16.0

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

$ sudo aptitude -f install build-essential

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

Потому что я изменил всего лишь за несколько минут до позиции: “Для других пакетов подписывайтесь на:” Я изменил его с “все обновления” на “только исправления/обновления безопасности”, и когда я вернул его на “все обновления” — я наконец смог все установить.

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

sudo dpkg -l | grep -v '^ii'

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

sudo dpkg --purge package_name1 package_name2 ...

или

sudo dpkg --purge --force-depends package_name1 package_name2 ...

(Вместо --force-all вы можете использовать один или комбинировать несколько, как описано в dpkg --force-help. например, для rc вам не нужно --force-... ничего, для iHR достаточно использовать --force-remove-reinstreq и т.д.)

sudo apt-get clean
sudo apt-get update
sudo apt-get --fix-broken install

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

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

Первый столбец в выводе sudo dpkg -l | grep '^.[^i]' представляет собой статус пакета и обозначается двумя или тремя символами. например, ii, rc, iU и т.д. Ниже приведен список возможных символов и их значения:

Первый символ: Этот символ указывает желаемое состояние. Возможные значения:

  • u: Неизвестно (неизвестное состояние)
  • i: Установлено (отмечено для установки)
  • r: Удалить (отмечено для удаления)
  • p: Очистить (отмечено для очистки)
  • h: Удерживать (удерживаемый пакет)

Второй символ: Этот символ указывает текущее состояние (установлен ли он или нет). Возможные значения:

  • n: Нет (пакет не установлен)
  • i: Установлено (пакет успешно установлен)
  • c: Конфигурационные файлы (конфигурационные файлы присутствуют)
  • u: Распакованный (пакет распакован)
  • f: Неудовлетворённая конфигурация (не удалось удалить конфигурационные файлы)
  • h: Полу-установлен (пакет установлен только частично)
  • W: тригг-ожидание
  • t: тригг-задержка

Третий символ: Этот символ указывает состояние ошибки. Возможные значения:

  • R: Требуется повторная установка (пакет должен быть переустановлен)

Пример:

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

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

iU  node-cacache                               15.0.5+~cs13.9.21-3                     all          быстрый, надежный, основанный на диске, независимый от данных, кэш с адресацией по содержимому
iU  npm                                        8.5.1~ds-1                              all          менеджер пакетов для Node.js

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

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

А затем следовал остальным шагам.

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

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

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

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

Ответ или решение

Исправление ошибок «Unable to correct problems, you have held broken packages»

Ошибка «Unable to correct problems, you have held broken packages» часто возникает в операционных системах на базе Ubuntu. Она сигнализирует о возникновении конфликтов в зависимостях при установке новых пакетов. Эта проблема может быть особенно распространена после обновления системы, как в вашем случае с переходом с версии 10.04 на 12.04.

Шаги для решения проблемы

  1. Проверка удерживаемых пакетов:
    Начните с проверки, какие пакеты удерживаются системой. Используйте команду:

    dpkg --get-selections | grep hold

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

  2. Обновление списка пакетов:
    Иногда проблема решается простым обновлением списка пакетов. Выполните команду:

    sudo apt-get update
  3. Исправление испорченных зависимостей:
    Используйте команду для исправления зависимостей:

    sudo apt-get install -f

    Если система не находит новых пакетов для установки или ничего не меняется, переходите к следующему шагу.

  4. Проверка наличия проблемных пакетов:
    Запустите dpkg для проверки состояния пакетов:

    sudo dpkg --configure -a

    Это может помочь устранить конфликты конфигурации.

  5. Использование Aptitude:
    Вместо apt-get попробуйте использовать aptitude, который может давать больше информации о конфликтах и предлагать альтернативные решения:

    sudo aptitude install <имя_пакета>

    Если aptitude также не может разрешить зависимости, он предложит варианты, среди которых может быть понижение версии зависимых пакетов.

  6. Удаление или переустановка пакетов:
    Если вы знаете, какой именно пакет вызывает проблему, вы можете попробовать его удалить:

    sudo apt-get remove <имя_пакета>

    Или переустановить его, чтобы избежать повреждения:

    sudo apt-get purge <имя_пакета>
  7. Работа с Synaptic Package Manager:
    Если вы работаете в графическом интерфейсе, установите Synaptic, который предоставляет удобный интерфейс для работы с пакетами:

    sudo apt-get install synaptic

    В Synaptic можно выбрать опцию «Fix Broken Packages» и просмотреть все испорченные пакеты.

  8. Проверка источников пакетов:
    Откройте файл sources.list:

    sudo nano /etc/apt/sources.list

    Убедитесь, что в нем нет строчек, относящихся к другим версиям Ubuntu. Прокомментируйте их, добавив символ # в начале строки, и выполните sudo apt-get update.

  9. Чистка системы:
    Удалите ненужные пакеты и зависимости:

    sudo apt-get autoremove

    Затем снова попробуйте установить нужный пакет.

Заключение

Вышеописанные шаги предоставляют систематический подход к устранению проблемы «Unable to correct problems, you have held broken packages». Если ни одно из решений не помогло, возможно, стоит рассмотреть аспект глубокой диагностики с помощью команд, таких как apt -o Debug::pkgProblemResolver=yes install <package_name>, которые могут дать более детальную информацию о причинах проблемы. Успехов в решении проблемы!

Оцените материал
Добавить комментарий

Капча загружается...