- Вопрос или проблема
- Требуемая версия недоступна.
- Некоторые полезные команды:
- Я задаю новый вопрос, какую информацию я должен предоставить?
- Пример:
- Ответ или решение
- Решение проблемы с пакетом в Ubuntu: "Не удается исправить проблемы, у вас удерживаемые сломанные пакеты"
- 1. Обновление списка пакетов
- 2. Проверка удерживаемых пакетов
- 3. Использование Aptitude
- 4. Корректировка sources.list
- 5. Очистка и исправление
- 6. Расширенная диагностика
- 7. Удаление и переустановка
- 8. Проверка статуса пакетов
- 9. Завершение работы с Synaptic
- Заключение
Вопрос или проблема
После обновления с 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, чем та, которая у вас сейчас используется. Если вы обнаружите какие-либо неверные строки версий в sources.list, откройте файл sources.list с помощьюsudoedit /etc/apt/sources.list
, прокомментируйте неверные строки в sources.list, предварив их символом#
, сохраните файл sources.list и выполнитеsudo apt update
для обновления списка доступных пакетов программного обеспечения. -
Если вы вручную загрузили файл .deb, смоделируйте его установку, выполнив
apt install --simulate ./downloaded-deb-file.deb
. Если downloaded-deb-file.deb не удаётся установить из-за неудовлетворённых зависимостей, то результатыapt install --simulate ./downloaded-deb-file.deb
перечислят эти неудовлетворённые зависимости. Поскольку команда является симуляцией, вы не должны использоватьsudo
или запускать её от имени root. Обратите внимание на требования по версиям каждой неудовлетворённой зависимости и поищите в интернете файл(ы) .deb, которые соответствуют этим требованиям по версиям. Если вы нашли файл .deb, который соответствует его требованиям по версии, загрузите его и выполнитеapt install --simulate ./new-downloaded-deb-file.deb
, чтобы проверить, есть ли у новозагруженного файла .deb какие-либо свои неудовлетворённые зависимости. -
Выберите опцию Исправить поврежденные пакеты в менеджере пакетов Synaptic. Выполните следующие команды для установки Synaptic.
sudo apt update sudo apt upgrade sudo apt install synaptic
Откройте Synaptic и в Synaptic выберите Правка -> Исправить поврежденные пакеты, затем повторите Правка -> Исправить поврежденные пакеты второй раз.
В Synaptic в левом окне нажмите кнопку Пользовательские фильтры, отмеченную курсором мыши на скриншоте ниже. Из списка в верхнем левом углу выберите Поврежденные. В центральной панели будут перечислены любые поврежденные пакеты, которые всё ещё требуют ремонта.
Выберите поврежденные пакеты по одному. Выберите поврежденный пакет, затем откройте терминал и выполните
apt policy <имя_пакета>
. Результаты этой команды сообщат вам, установлен ли этот поврежденный пакет из стандартных репозиториев Ubuntu или из какого-то другого источника. Если поврежденный пакет был установлен из другого источника, возможно, этот пакет можно удалить вместе с его программным источником и заменить другой версией того же пакета из стандартных репозиториев Ubuntu. Обычно это означает исправление поврежденного пакета, понизив его до более ранней версии. -
Если вы получаете это сообщение об ошибке:
Попробуйте 'apt-get -f install' без пакетов (или укажите решение)
Выполните следующие команды:
sudo apt update sudo apt upgrade sudo apt-get -f install
-
Вручную удалите поврежденный пакет.
-
Найдите свой пакет в
/var/lib/dpkg/info
ls -l /var/lib/dpkg/info | grep <имя_пакета>
-
Переместите папку пакета в другое место.
cd /tmp && sudo mkdir new-package-location sudo mv /var/lib/dpkg/info/<имя_пакета>.* /tmp/new-package-location/
-
Выполните следующую команду:
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
Не удалось установить libcwidget3v5
sudo apt install libcwidget3v5
Попробуйте установить libncursesw5
sudo apt install libncursesw5
Попробуйте установить libtinfo5
sudo apt install libtinfo5
Ура, этот парень – виновник libtinfo5
, он уже там, удалите и переустановите.
Удалите или очистите libtinfo5
.
apt purge libtinof5
было бы лучше, так как это также удаляет файлы конфигурации.
sudo apt remove libtinfo5
Снова переустановите libtinfo5
sudo apt install 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, как и следовало).
Сообщение об ошибке вводит в заблуждение.
Говорится “вы заблокировали пакеты“, хотя часто никаких заблокированных пакетов у вас нет:
$ 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, сохраняя 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, сохраняя cpp-9:amd64
Исправляет cpp:amd64, сохраняя 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
всегда устанавливает последнюю версию. Итак, есть два способа исправить это:
- Установите правильную версию пакета.
- Увеличьте способности
apt
.
Чтобы установить правильную версию пакета, используйте:
sudo apt update
sudo apt install <Y>=<Z>
Где
Чтобы повысить способности вашего менеджера пакетов:
sudo apt update
sudo apt install aptitude
sudo aptitude -f install <Z>
Где
-
Опция
-f
выполнит продвинутую отладку. Это довольно полезно! -
Выбор
n
для решения заставит aptitude предложить больше решений! -
Выполнение
man aptitude
покажет подробное руководство по использованию aptitude. Онлайн-руководство.
Требуемая версия недоступна.
Сначала попробуйте выполнить sudo apt update
, чтобы обновить список репозиториев. Затем попробуйте снова установить пакет.
По-прежнему недоступно?
У вас есть два варианта:
-
Поиск пакета на https://packages.ubuntu.com/ и восстановление стандартных репозиториев.
-
Добавление пользовательских PPA для удовлетворения зависимостей.
Поиск пакета и восстановление стандартных репозиториев:-
-
Перейдите на https://packages.ubuntu.com
-
Прокрутите вниз до раздела Поиск.
-
В столбце Ключевое слово введите название пакета.
-
В столбце Распределение выберите кодовое имя вашей версии Ubuntu (
lsb_release -c
).
Проверьте, соответствует ли требуемая версия и доступная версия. Если да, то обратитесь к Как восстановить стандартные репозитории?
Добавление пользовательского 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 у меня было чувство, что я должен удалить некоторые ранее установленные пакеты. И так и было, мне пришлось вручную удалить все связанные пакеты, среди которых 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 МБ архивов. После распаковки будет использовано 100 МБ.
Следующие пакеты имеют неудовлетворённые зависимости:
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 Б архивов. После распаковки будет освобождено 67.6 кБ.
Следующие пакеты имеют неудовлетворённые зависимости:
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 (now, xenial-security, xenial-updates)]
Принять это решение? [Y/n/q/?] n
Следующие действия разрешат эти зависимости:
Обновить следующие пакеты:
1) libstdc++6 [5.4.0-6ubuntu1~16.04.12 (now, xenial-security, xenial-updates) -> 9.3.0-10ubuntu2~16.0
Наконец, теперь, когда конфликт решен, попробуйте снова установить build-essential
.
$ 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 : trig-aWait
- t : trig-pend
Третий символ: Этот символ указывает состояние ошибки. Возможные значения:
- R : Требуется переустановка (пакет должен быть переустановлен)
Пример:
Чтобы продемонстрировать повреждённый пакет, я загрузил множество .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
.
Удалите любые нестандартные источники репозиториев.
Проверьте в /etc/apt/sources.list
, и прокомментируйте по необходимости.
Я добавил Universe (sudo add-apt-repository universe
). Как только он был удалён из источников, всё обновилось.
Ответ или решение
Решение проблемы с пакетом в Ubuntu: "Не удается исправить проблемы, у вас удерживаемые сломанные пакеты"
Ошибка "Не удается исправить проблемы, у вас удерживаемые сломанные пакеты" является распространенной проблемой, с которой сталкиваются пользователи Ubuntu после обновлений или установки новых пакетов. Этот вопрос часто сопровождается неочевидными зависимостями и конфликтами между пакетами, что может привести к значительным затруднениям в управлении программным обеспечением. В данной статье мы рассмотрим различные подходы к выявлению и устранению этой проблемы, чтобы вы смогли эффективно продолжить использование своей системы.
1. Обновление списка пакетов
Первый шаг в диагностике и исправлении большинства проблем с пакетами — обновление списка доступных пакетов. Это можно сделать с помощью команды:
sudo apt update
Убедитесь, что вы перезапустили команду установки после выполнения обновления. Если ошибка сохраняется, продолжаем к следующему пункту.
2. Проверка удерживаемых пакетов
Для начала стоит проверить, нет ли пакетных зависимостей, которые находятся в состоянии "удерживания". Для этого выполните команду:
dpkg --get-selections | grep hold
Если данный вывод не дает информации, продолжайте к следующему шагу.
3. Использование Aptitude
Иногда apt
не может решить вопросы зависимостей, поэтому стоит попробовать aptitude
, более мощный инструмент для управления пакетами:
sudo aptitude install <имя пакета>
Aptitude
предложит варианты разрешения зависимостей, в том числе удаление и даунгрейд пакетов. При необходимости вы можете вручную подтвердить вариант, который вас устраивает.
4. Корректировка sources.list
Если проблема сохраняется, стоит проверить файл источников пакетов sources.list
:
sudo nano /etc/apt/sources.list
Убедитесь, что в этом файле нет ссылок на репозитории, которые не соответствуют вашей версии Ubuntu. Закомментируйте (добавьте #
перед строчкой) или удалите подозрительные строки, затем вновь выполните:
sudo apt update
5. Очистка и исправление
Запустите команды для удаления неиспользуемых пакетов и исправления существующих:
sudo apt autoremove
sudo apt-get install -f
6. Расширенная диагностика
Если предыдущие шаги не помогли, используйте команду с флагом для отладки:
apt-get -o Debug::pkgProblemResolver=yes install <имя пакета>
Этот вывод даст информацию о том, какие именно зависимости не удается установить и почему.
7. Удаление и переустановка
Иногда проблему может решить простое удаление проблемного пакета и его повторная установка:
sudo apt remove <имя проблемного пакета>
sudo apt install <имя проблемного пакета>
8. Проверка статуса пакетов
Вы можете проверить состояние установленных пакетов с помощью команды:
sudo dpkg -l | grep -v '^ii'
Удалите те пакеты, которые имеют статус, отличный от ii
, используя:
sudo dpkg --purge <имя пакета>
9. Завершение работы с Synaptic
Если сообщение об ошибке продолжает появляться, попробуйте использовать графический интерфейс Synaptic для управления пакетами. Установите его, если он еще не установлен:
sudo apt install synaptic
Запустите Synaptic и найдите в нем опцию для исправления сломанных пакетов.
Заключение
Проблема с удерживанием сломанных пакетов в Ubuntu может быть решена при помощи последовательных шагов, которые включают обновление, диагностику и возможные методы исправления. Следуя описанным методам, вы сможете идентифицировать корень проблемы и устранить ее. Эти действия могут быть полезны не только для решения текущей проблемы, но и для предотвращения подобных ошибок в будущем.
В случае возникновения дальнейших сложностей рекомендуется искать помощь на форумах сообщества Ubuntu или Stack Overflow, предоставляя как можно больше информации о вашей системе и выполненных действиях для более точной и быстрой помощи.