#Что означает ошибка
The following packages have unmet dependencies E: Unable to correct problems, you have held broken packages.
«The following packages have unmet dependencies» или «You have held broken packages» означает, что менеджер пакетов не может подобрать совместимые версии: нужная зависимость недоступна, зафиксирована (hold), конфликтует или поступает из стороннего репозитория другой версии дистрибутива. Опасно использовать --force: так можно сломать систему. Правильнее выяснить, какой пакет мешает.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Сторонний репозиторий конфликтуетPPA или репозиторий другой версии. | Пакеты из PPA. | Отключите. |
| Зафиксированные пакетыПакеты в hold. | apt-mark showhold не пусто. | Снимите. |
| Устаревший список пакетовНет обновления индекса. | Ошибка 404 при установке. | apt update. |
| Смешаны версии дистрибутиваРепозитории от разных релизов. | Конфликты зависимостей. | Приведите к одной. |
#Пошаговое решение
- Обновите спискиВ Debian/Ubuntu откройте «Терминал» (обычно Ctrl+Alt+T) и выполните
sudo apt update; для sudo введите пароль вашей учётной записи. Дождитесь окончания, проверьте, нет ли красных строкErr,NO_PUBKEY, ошибок сети или отсутствующих репозиториев. Пока обновление списков завершается с ошибками, не запускайте установку пакетов иfull-upgrade: сперва устраните ошибку источника и сохраните полный вывод. - Исправьте зависимостиВ Debian/Ubuntu выполните
sudo apt update, затемapt-mark showholdиapt-cache policy ИМЯ_ПАКЕТА, подставив имя из реальной ошибки. Перед исправлением проверьте последствия командойsudo apt -s -f install(симуляция). Если она предлагает удалить среду рабочего стола, ядро или множество важных пакетов, остановитесь. Не запускайте вслепую--forceили удаление пакетов. - Проверьте зафиксированныеОткройте терминал (Ctrl+Alt+T), выполните
apt-mark showholdи посмотрите, выводятся ли названия пакетов. Если список пуст, фиксаций нет — переходите к анализу версий и репозиториев. Если названия есть, выясните причину фиксации у администратора или по документации приложения; не снимайте её автоматически. Снимать осознанно можно только конкретный пакет черезsudo apt-mark unhold ИМЯ_ПАКЕТА, предварительно подставив реальное имя из вывода и убедившись, что это не критичная зависимость. - Проверьте репозиторииСначала запишите адрес и имя репозитория из сообщения об ошибке. В Debian/Ubuntu проверьте
/etc/apt/sources.listи файлы/etc/apt/sources.list.d/, в Fedora —/etc/yum.repos.d/, в Arch/Manjaro —/etc/pacman.d/mirrorlist. Сверьте адрес с официальной документацией именно вашей версии Linux, сохраните копию файла конфигурации и меняйте только неисправную запись. Затем обновите метаданные соответствующим менеджером пакетов. - Отключите сторонние PPAЕсли ошибка указывает именно на сторонний источник пакетов, сначала запишите его имя и сохраните копию конфигурации. В Ubuntu проверьте «Программы и обновления» → «Другое ПО» и снимите галочку лишь с конкретного источника либо отключите соответствующий файл
.sources/.listпосле проверки. Затемsudo apt updateи проверьте сообщения. Если пакет зависит от этого репозитория, его работа может измениться — не удаляйте пакет автоматически. - Обновите системуСначала уточните дистрибутив и его текущую версию. Откройте штатный менеджер обновлений или используйте пакетный менеджер вашей системы; перед массовым обновлением на сервере сделайте резервную копию или снимок и проверьте совместимость.
- Посмотрите причинуОткройте терминал и запустите
sudo apt-get -s -f install: ключ-sпоказывает план исправлений без выполнения. Прочитайте, какие пакеты будут установлены или удалены. Если apt предлагает удалить рабочий стол, ядро или другие важные программы, отмените операцию и сначала проверьте источники пакетов и их версии. Если план корректен, запустите уже без-s:sudo apt-get -f install. После завершения повторите исходную установку и запишите оставшиеся сообщения об ошибках. - Очистите кэшЕсли apt сообщает о повреждённом архиве или нет места, сначала проверьте
df -h / /varи свободное место. Для удаления только скачанных пакетов, которые можно получить повторно, выполнитеsudo apt-get clean. Эта команда не исправляет конфликты версий и не удаляет установленные программы. Затем запуститеsudo apt update; если появились ошибки подписи или отсутствия Release, сначала исправьте репозиторий, не отключая проверку подписи. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
Если проблема возникает после смены версии дистрибутива, убедитесь, что все репозитории соответствуют новому кодовому имени (jammy, noble и т. д.). Устанавливайте .deb-пакеты через sudo apt install ./пакет.deb, а не dpkg -i: так зависимости подтянутся автоматически. Не используйте apt-get install -f --force-yes и не удаляйте критические пакеты вроде libc6 и systemd. Если пакет хочет удалить большую часть системы, отмените операцию. Справка — .
Чтобы увидеть, откуда пришёл конфликтующий пакет, используйте apt-cache policy имя: в таблице указаны источники и приоритеты версий. Для отката сторонней версии применяют sudo apt install пакет=версия или утилиту ppa-purge, которая возвращает пакеты к версиям дистрибутива. Прежде чем что-либо удалять, сохраните список установленных пакетов командой dpkg --get-selections > packages.txt.