Главная
» LINUX
»
Исправлена ошибка Apt-Get Lock Could Not Get Lock /var/lib/dpkg/lock-frontend в Ubuntu.
Исправлена ошибка Apt-Get Lock Could Not Get Lock /var/lib/dpkg/lock-frontend в Ubuntu.
Это сообщение E: Could not get lock /var/lib/dpkg/lock-frontendозначает, что блокировка, необходимая APT, находится в другом процессе управления пакетами. Блокировка защищает изменения пакетов от наложения операций. Она обычно появляется, когда программа обновления программного обеспечения, другой терминал или автоматическое обновление уже устанавливают или настраивают пакеты. Самое безопасное решение — определить эту работу и позволить ей завершиться; удаление файла блокировки не является первым шагом.
Приведенные ниже команды применимы к системам Ubuntu, использующим APT и dpkg. Метки рабочего стола и время автоматического обновления различаются в зависимости от версии и конфигурации Ubuntu, поэтому решающим фактором является вывод процесса на вашей машине. Команды описаны в руководствах Ubuntu 24.04 LTS, ссылки на которые приведены ниже; если поведение вашей системы отличается, обратитесь к соответствующему руководству для вашей версии.
Что сообщает об ошибке блокировки — и чего она не сообщает.
Проверено:dpkg устанавливает и управляет пакетами, а APT — это его высокоуровневый интерфейс командной строки. Путь lock-frontendиспользуется для координации работы по управлению пакетами. Поэтому ошибка указывает на конфликт блокировок во время выполнения команды, а не обязательно на поврежденную базу данных пакетов. В руководстве Ubuntu по dpkg описана роль dpkg и состояния пакетов.
Зависит от вашей системы: блокировщиком может быть графический установщик, вторая aptкоманда apt-get, установщик программного обеспечения или автоматическое задание обслуживания. Не следует предполагать имя процесса только по ошибке. Сначала закройте все другие окна диспетчера пакетов, которые вы открыли, и проверьте активные процессы на компьютере.
Сообщение не подтверждает, что файл блокировки устарел, что Ubuntu зависла или что база данных пакетов повреждена. Файл блокировки может оставаться на диске после завершения процесса; само по себе его наличие не доказывает, что процесс по-прежнему владеет блокировкой. Перед внесением каких-либо изменений проверьте наличие процесса.
Шаг 1: Проверьте, не используется ли уже какой-либо менеджер пакетов.
Найдите программу «Обновление ПО», «Программное обеспечение Ubuntu» или другой терминал, в данный момент устанавливающий, обновляющий или удаляющий программное обеспечение. Если обновление явно выполняется, оставьте его открытым и дождитесь завершения. Затем повторите выполнение исходной команды.
Программа обновления показывает, что выполняется установка обновления; дождитесь его завершения, прежде чем запускать другую задачу по установке пакета.
Если графическое обновление не отображается, проверьте список процессов:
Ищите команды типа apt, apt-get, dpkg, или unattended-upgrade. Совпадение — это подсказка, а не доказательство того, что это владелец блокировки: поиск также может показать несвязанные команды или саму проверку. Запишите PID и команду, затем изучите процесс на следующем шаге.
Используйте эту команду fuser, чтобы проверить, обращается ли процесс к блокировке внешнего интерфейса. Запустите её с правами администратора, чтобы она могла сообщать о процессах, принадлежащих другим пользователям:
sudo fuser -v /var/lib/dpkg/lock-frontend
Вы также можете проверить другие распространенные пути блокировки менеджеров пакетов:
fuserСообщает идентификаторы процессов, использующих указанный файл; в подробном режиме отображаются сведения о процессе. Если выводится PID, сравните его со списком процессов и проверьте с помощью команды ps -fp PID, заменив PIDна указанное число. Инструмент может не выдавать результатов, если ни один доступный процесс не использует указанный путь; это полезно, но не является причиной сбоя предыдущей команды. См. руководство по fuser в Ubuntu для получения информации о его выводе и ограничениях.
Команды терминала для проверки процессов apt и dpkg и идентификации процесса с помощью блокировки внешнего интерфейса.
Шаг 3: Подождите или остановите только подтвержденную зависшую задачу.
Если процесс загружает пакеты, распаковывает файлы, настраивает пакеты или отображает ход выполнения в графическом окне обновления, дождитесь его завершения. Большие обновления и медленные диски могут занять больше времени, чем ожидалось. После завершения операции повторите выполнение исходной apt-getкоманды. Запуск другой команды APT во время выполнения первой не ускорит её завершение.
Пример отображения хода выполнения операции apt-get package в терминале, которая еще выполняется; названия пакетов и вывод могут отличаться.
Если операция зависла, проверьте, не меняется ли ее вывод, активность ЦП или диска, а также прошедшее время. Не существует единого таймаута, который бы доказывал зависание каждой задачи пакета. Если процесс явно является вашей собственной командой, работающей в фоновом режиме, и вы можете безопасно прервать его, используйте команду Ctrl+Cв этом терминале и позвольте ему завершиться корректно. Не завершайте процесс только потому, что он удерживает блокировку.
В крайнем случае, если вы убедились, что процесс действительно не отвечает, определили его точный PID и понимаете, что прерывание настройки пакетов может привести к незавершенности пакетов, отправьте обычный сигнал завершения:
sudo kill -TERM PID
Замените PIDна подтвержденный идентификатор процесса. Избегайте использования kill -9, killall dpkg, или fuser -kв качестве стандартных решений; принудительное завершение может прервать выполнение скриптов пакета или оставить работу на восстановление. Если задача является автоматической службой, а не запущенной вами, проверьте ее состояние или подождите, вместо того чтобы завершать незнакомый процесс.
Шаг 4: Восстанавливайте конфигурацию пакета только в том случае, если предыдущая задача была прервана.
Если не осталось процессов APT или dpkg, а предыдущая установка или обновление были прерваны, попросите dpkg завершить настройку распакованных пакетов, а затем проверьте состояние пакетов APT:
sudo dpkg --configure -a
sudo apt-get check
Команды терминала для завершения ожидающей настройки dpkg и проверки базы данных пакетов после прерванной операции.
Внимательно читайте все подсказки и сообщения об ошибках. Первая команда может запускать скрипты настройки пакетов; это может занять некоторое время или вызвать вопросы. apt-get checkПроверяет наличие поврежденных зависимостей. Если сообщается о проблемах с зависимостями, просмотрите предлагаемые изменения, прежде чем использовать sudo apt-get -f install; эта опция пытается восстановить зависимости и может установить или удалить пакеты для этого. Не одобряйте удаления, которые вы не понимаете. В руководстве Ubuntu по apt-get объясняются checkи --fix-broken.
Распространенные заблуждения относительно ошибок блокировки
«Файл блокировки присутствует, поэтому мне следует его удалить». Нет. Само по себе наличие файла не говорит о том, удерживает ли процесс блокировку. Удаление файла, пока процесс еще работает, не останавливает этот процесс и может позволить другой команде пакета запуститься с той же базой данных пакетов. fuserВместо этого проверьте список процессов.
«Идентификатор процесса не отображается, поэтому база данных повреждена». Не обязательно. Возможно, владелец завершил работу между проверками, предыдущая блокировка была снята, или ошибка могла быть связана с другим путем блокировки. Повторите попытку после подтверждения отсутствия оставшихся задач пакета. Восстановите dpkg только в том случае, если операция была прервана или ошибки пакета указывают на неполную конфигурацию.
«Каждая ошибка блокировки требует выполнения команды dpkg --configure -a». Эта команда устраняет незавершенные задачи по настройке; она не снимает блокировку, удерживаемую активным процессом. Сначала дождитесь завершения или безопасно устраните блокировку, удерживаемую процессом, а затем используйте команду восстановления только при необходимости.
«Блокировка всегда снимается через фиксированное количество минут». Расписание автоматического обновления и продолжительность задач зависят от версии, настроек, сети и компьютера. Проверяйте фактический процесс и ход выполнения, вместо того чтобы полагаться на таймер.
Как определить, помогло ли исправление
Повторите исходную команду после завершения работы держателя блокировки. Успешное выполнение должно преодолеть сообщение о блокировке и завершить запрошенную операцию с пакетом. Если команда dpkg --configure -aзавершается apt-get checkбез сообщений о проблемах с зависимостями, значит, конфигурация пакета и проверки зависимостей находятся в лучшем состоянии; однако это не гарантирует, что все несвязанные проблемы с репозиториями или сетью будут решены.
Если ошибка блокировки возникает немедленно, запишите точный путь к блокировке, вывод команды sudo fuser -vдля этого пути, соответствующую команду процесса и PID, а также информацию о том, продолжается ли выполнение задачи. Эти сведения позволяют отличить обычное конкурирующее обновление от процесса, требующего дальнейшего устранения неполадок. Не удаляйте файлы из /var/lib/dpkgфайлов блокировки и не стирайте их в качестве замены идентификации процесса.