Невозможно исправить ошибки, которые вы задержали, хранили неработающие пакеты astra linux

Обновлено: 21.11.2024

Как вы уже знаете, мы можем обновить все установленные пакеты с помощью команды apt upgrade в Debian, Ubuntu и других системах на основе Debian. В процессе этого обновления будут обновлены все установленные пакеты, будут установлены некоторые дополнительные пакеты (т. е. зависимости), а некоторые ненужные пакеты будут удалены. Менеджер пакетов Apt делает все это автоматически, чтобы помочь пользователям поддерживать чистоту системы. Apt также имеет возможность предотвратить автоматическую установку, обновление или удаление пакета в Debian, Ubuntu и их вариантах. В этом руководстве мы обсудим различные методы удержания или предотвращения обновления пакета в Debian, Ubuntu и их производных, таких как Linux Mint и Pop!_OS.

Почему кто-то хочет предотвратить обновление пакета?

Вы можете задаться вопросом, почему кто-то хочет удерживать пакет от apt upgrade. Разве обновление пакетов до последней версии не помогает нам защитить систему? Да конечно! Но вы не хотите делать это при определенных обстоятельствах. Вот несколько причин, по которым нельзя обновлять пакеты:

  • Текущая версия пакета работает нормально, поэтому вам может показаться, что обновлять ее не нужно.
  • Определенная версия требуется другому приложению для правильной работы.
  • Пакет, который вы собираетесь обновить, может быть проблематичным. Несмотря на то, что разработчики тщательно проверяют пакеты, прежде чем помещать их в репозитории, иногда они могут неосознанно добавлять нестабильные пакеты, которые могут нарушить работу вашей системы.
  • Экономия пропускной способности. Возможно, вам не захочется обновлять пакет, который занимает более 500 МБ.

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

Заблокировать или запретить обновление пакета в Debian, Ubuntu

Мы можем предотвратить/удержать/игнорировать/исключить пакеты из подходящего обновления либо из командной строки, либо с помощью графической утилиты управления пакетами, называемой менеджером пакетов Synaptic.

Во-первых, давайте посмотрим на методы командной строки!

1. Предотвращение автоматической установки, обновления или удаления пакета с помощью команды apt-mark в Debian, Ubuntu

Apt-mark используется для отображения, установки и отмены различных настроек пакета, таких как пометка пакета как устанавливаемого автоматически/вручную или изменение выбора dpkg, например удержания, установки, удаления и очистки, которые соблюдаются, например. с помощью apt-get dselect-upgrade или aptitude .

Чтобы предотвратить изменения пакета (установка, удаление и обновление), команда apt-mark содержит следующие три подкоманды:

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

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

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

Давайте рассмотрим пример. Я собираюсь предотвратить автоматическую установку, обновление или удаление пакета (например, htop ) с помощью команды:

Пример вывода:

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

Чтобы отобразить задержанные пакеты, выполните:

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

Пример вывода:

Запретить автоматическую установку, обновление или удаление пакета с помощью команды apt-mark

Обратите внимание, что этот метод не предотвратит удаление пакета вручную. Вы по-прежнему можете удалить заблокированные пакеты с помощью apt-get remove

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

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

Apt-mark — не единственная утилита CLI для предотвращения изменений пакетов в Debian или Ubuntu. Есть еще два способа приостановить пакет и отменить его позже из командной строки.

2. Запрет обновления пакета с помощью dpkg в Debian, Ubuntu

Dpkg — это утилита командной строки для установки, сборки, удаления пакетов Debian и управления ими.

Чтобы поставить пакет, например htop, на удержание с помощью dpkg, выполните:

Вы можете просмотреть статус пакета, который вы отложили ранее, выполнив:

Как видите, htop приостановлен.

Чтобы просмотреть статус всех пакетов, выполните:

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

Запретить обновление пакета с помощью dpkg в Debian, Ubuntu

3. Удержание пакета после обновления с помощью aptitude в Debian, Ubuntu

Aptitude — это текстовый интерфейс для системы пакетов Debian GNU/Linux. Это позволяет пользователю выполнять различные задачи управления пакетами, такие как установка, обновление, обновление, вывод списка и удаление пакетов.

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

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

Пример вывода:

Как видно из приведенного выше вывода, обновление пакета htop приостановлено.

Чтобы снять пакет, просто выполните:

Удержание пакета после обновления с помощью aptitude в Debian, Ubuntu

4. Предотвращение автоматической установки, обновления или удаления пакета с помощью диспетчера пакетов Synaptic в Debian, Ubuntu

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

Откройте диспетчер Synaptic и найдите пакет, который хотите сохранить. Затем нажмите «Упаковать» в строке меню и нажмите «Удерживать».

Запретить автоматическую установку, обновление или удаление пакета с помощью менеджера пакетов Synaptic

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

Чтобы разблокировать его, перейдите в Synaptic -> Пакет -> Разблокировать версию.

Если в вашей системе не установлен диспетчер пакетов Synaptic, вы можете установить его с помощью команды:

Заключение

В этом руководстве вы узнали, как предотвратить автоматическую установку, обновление и удаление пакета в системах на основе Debian, таких как Ubuntu, Linux Mint и Pop!_OS и т. д. Хотя в некоторых случаях удержание пакетов может быть полезным, это также оставит лазейки в безопасности вашей системы Ubuntu. Нужно знать, когда держать или снимать пакеты. Используйте эту функцию осторожно. Удачи!

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

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

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

После запуска:

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

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

Возможно, есть пакеты, мешающие правильной работе диспетчера пакетов, которые указаны в строке ошибки вашего терминала (в этом случае: git-man является зависимостью для git). sudo apt-get удалить git-man, затем sudo apt-get очистить git-man, затем sudo apt-get установить git. Он снова установил git-man, и все работает.

Я совершенно неверно истолковал значение фразы "у вас есть сломанные посылки". Это не значит, что я сделал что-то, чтобы удержать посылку, как я сначала подумал. (Я работал не в интерактивном режиме с -y, поэтому не знал, какие вопросы могут быть заданы.) Это означает, что менеджер пакетов содержит пакет, который не может быть установлен, потому что он поврежден. .

14 ответов 14

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

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

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

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

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

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

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

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

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

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

Спасибо, @sushilinux. Этот совет помог мне определить проблему, с которой я столкнулся, а также фактическое значение фразы «у вас есть сломанные посылки».

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

То, что помогло исправить это для меня, было простым

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

Это сработало для меня. Я пытался удалить VLC каждую ночь и установить стабильную версию. Но ночная версия осталась из неиспользуемых библиотек. Это противоречило зависимостям стабильной версии.

Сообщение об ошибке «Невозможно исправить проблемы, у вас есть поврежденные пакеты» часто появляется из-за того, что вы пытаетесь установить или установили пакет, который вы не должны устанавливать. Вот несколько быстрых и простых способов исправить ошибку «У вас есть поврежденные пакеты».

Если вы вручную загрузили файл .deb, имитируйте его установку, запустив apt install --simulate ./downloaded-deb-file.deb . Если скачанный-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.

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

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

Выбирайте сломанные пакеты по одному. Выберите сломанный пакет, а затем откройте терминал и запустите политику apt

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

Вы можете обнаружить, что когда пытаетесь установить пакет в Linux, вы видите страшную строку E: Невозможно исправить проблемы, у вас есть сломанные пакеты. Затем установка отказывается продвигаться дальше этой точки. Вы можете найти это в любом дистрибутиве Linux, который использует apt-get для управления пакетами, в том числе в Debian, а также в различных ответвлениях Linux Mint и Ubuntu.

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

Способ 1. Использование dpkg –configure для исправления заблокированных поврежденных пакетов

Во время работы в терминале попробуйте запустить sudo dpkg –configure -a, чтобы запустить процесс автоматического обновления, который ищет любые нарушенные зависимости в вашей системе, вызванные неустановленными пакетами. Этот инструмент должен автоматически устанавливать любой пакет, который, по его мнению, вам не хватает, без вмешательства пользователя, хотя, если вас попросят установить что-либо, вам следует нажать клавишу y, чтобы ответить на приглашение.

Если он не находит сломанных пакетов, вы не должны видеть никаких выходных данных. Мы запустили это на чистой тестовой машине под управлением Xubuntu, поэтому ошибок не обнаружено, но если вы сталкиваетесь с проблемами «Невозможно исправить проблемы, у вас есть сломанные пакеты», то это может найти несколько пакетов, которые вам нужно установить. . После запуска попробуйте sudo apt-get install -f из командной строки.

Эта программа пройдет и создаст список зависимостей, а затем прочитает информацию о состоянии. Если вы получили сообщение о том, что «0 обновлено, 0 установлено заново, 0 для удаления и 0 не обновлено», то вы либо работали без сломанных зависимостей, либо предыдущая команда все исправила. На этом этапе вы можете запустить sudo apt-get clean && sudo apt-get update, а затем sudo apt-get upgrade, чтобы обновить каждый пакет в вашей системе. Это может занять некоторое время в зависимости от того, как долго в вашей системе были эти проблемы с пакетами.

Способ 2. Использование команды dist-upgrade

Если вы получили сообщение о том, что «некоторые пакеты были задержаны», поэтому вы не можете успешно выполнить предыдущую команду, вам следует запустить sudo apt-get dist-upgrade, чтобы установить остальные эти пакеты. Помимо выполнения функции обычного обновления, опция dist-upgrade обрабатывает измененные зависимости с более новыми версиями пакетов. Поскольку apt-get имеет специальную систему конфликтов, он обычно пытается обновить самые важные пакеты за счет того, что ничего не делает с теми, которые менее важны для вашей системы. Использование этой команды заставляет обновлять даже их.

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

Например, предположим, что вам не хватало компонента среды выполнения GNUStep, поскольку вы хотели использовать голосовой синтез. Вы можете просто набрать sudo apt-get install gnustep-gui-runtime, чтобы установить этот жизненно важный пакет. Имейте в виду, что это всего лишь пример, и вы можете заменить gnustep-gui-runtime на имя любого пакета, который вам нужно установить. Современные дистрибутивы, основанные на стандарте apt-get, содержат несколько тысяч пакетов, но если вы знаете имя того, который ищете, это заставит его установить.

Способ 3. Исправление поврежденных пакетов с помощью Synaptic

Если у вас есть графический менеджер пакетов Synaptic, вы также можете использовать этот инструмент для исправления любых сломанных пакетов, которые у вас могут быть. Откройте программу, а затем выберите раскрывающееся меню «Редактировать». В этом меню у вас должна быть опция «Исправить сломанные пакеты», поэтому выберите ее, если вы это сделаете. Запуск не займет много времени, если не будет много сломанных пакетов, но он может обнаружить ряд ошибок, которые замедлят выполнение.

После завершения проверки вы увидите слова "Успешно исправлены проблемы с зависимостями" в нижней строке состояния.

Теперь вы можете обновлять и устанавливать пакеты, как обычно. Большинство пользователей будут делать что-то таким образом только в том случае, если они уже работали в Synaptic, но он всегда рядом, когда вам это нужно. После запуска вы можете закрыть Synaptic и снова работать из командной строки или продолжить вносить изменения здесь.

APT — одна из самых популярных программ в Ubuntu/Debian и их производных. Он создан для управления установкой и удалением пакетов. Большую часть времени приложение работает без нареканий. Но в редких случаях вы можете увидеть всплывающее сообщение об ошибке «Невозможно исправить проблемы, у вас есть поврежденные пакеты». Эта ошибка, наряду с «apt-get : команда не найдена», являются двумя наиболее популярными сообщениями об ошибках, когда речь идет о apt или apt-get в Linux.

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

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

Сообщение об ошибке может выглядеть примерно так:

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

Например, для правильной работы медиаплееру VLC требуются libavcodec, libavutil, libgles2 и целый ряд других пакетов. Эти небольшие библиотеки и программные компоненты называются зависимостями. Эти зависимости могут не быть частью самого пакета приложения, но предполагается, что они либо уже установлены в вашей системе, либо установлены во время установки приложения.

Ошибка «Невозможно исправить проблемы, у вас есть поврежденные пакеты» обычно сопровождается другой информацией о том, какие библиотеки/программы необходимо установить, но система не может их установить. В приведенном выше сообщении это python-pip-whl.

Ситуация может усложниться, если двум программам, скажем, VLC и Gnome Video Player, нужны разные версии одной и той же библиотеки. В этом случае APT не сможет понять, как установить обе версии, и выдаст ошибку «Невозможно исправить проблемы, у вас есть поврежденные пакеты».

Исправить ошибку «Не удалось исправить проблемы, у вас есть поврежденные пакеты»

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

Обновить локальный индекс пакетов

Если вы устанавливаете известное программное обеспечение, велика вероятность того, что оно было тщательно протестировано первоначальными разработчиками, а также командой Ubuntu/Debian перед добавлением в каталог пакетов. Другими словами, специалисты по сопровождению позаботились о том, чтобы программное обеспечение работало с системой безупречно, поэтому обновление локального индекса пакетов — популярный способ избавиться от ошибки «сломанные пакеты».

Вы можете повторно синхронизировать индексные файлы пакетов из их источников в Ubuntu через Интернет, выполнив следующую команду.

После завершения процесса обновления попробуйте переустановить проблемный пакет еще раз, чтобы убедиться, что ошибка исчезла.

Удалите оставшиеся пакеты из вашей системы

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

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

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

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

Вы можете использовать apt search для поиска проблемной зависимости в индексе пакета.

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

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

Также может случиться так, что когда вы пытаетесь установить пакет C, он уже установлен. В этом случае проверьте версию пакета C. Это та же версия, что требуется для пакета B? Если да, то может помочь удаление C и повторная установка.

Напрямую установить из файла DEB

Если отсутствующая зависимость не может быть найдена с помощью apt search , вы можете попробовать установить либо пакет, либо его зависимость непосредственно из файла DEB.

Например, в выводе apt-get видно, что одним из многих пакетов, необходимых FFMPEG, является libavcodec58 версии 4.1.6-1~deb10u1.

После этого просто переустановите проблемный пакет.

Найти другой источник установки или PPA

Если вы пытаетесь установить устаревшие пакеты, часто возникает ошибка "Невозможно исправить проблемы, у вас есть поврежденные пакеты". В этом случае установка отдельных зависимостей может быстро стать неудобной. Лучше всего в этой ситуации найти другой источник установки, обычно PPA.

Предположим, вы пытаетесь установить FFMPEG 4. Выполнив быстрый поиск, вы легко найдете PPA Джонатона Ф. Вы можете просто добавить его PPA в свою систему перед повторным запуском apt-get install ffmpeg для установки программного обеспечения.

В качестве альтернативы вы можете попробовать поискать такое же программное обеспечение в других форматах, таких как Snap/Flatpak или AppImage.

Если вы видите ошибку задержанного сломанного пакета во время обновления, попробуйте это

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

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

Сначала проверьте, какой пакет удерживается с помощью этой команды:

Если вы видите, что какой-либо пакет не обновляется, вы можете либо удалить его ( sudo apt-get remove ), либо отменить его с помощью следующей команды

Пакет будет разблокирован, и будет возвращено подтверждающее сообщение: Отменено удержание пакета имя_пакета. .

Заключение

Для этой проблемы нет прямого решения. Вам придется исследовать проблему самостоятельно и посмотреть, можно ли исправить ошибку или нет. Если вы считаете эту статью полезной, ознакомьтесь с другим нашим руководством по устранению ошибки «apt-get : command not found» — еще одного популярного сообщения об ошибке apt-get, которое вызвало недоумение у наших читателей.

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

Читайте также: