Главная
» Как сделать
»
Безопасно снимите блокировку APT в Ubuntu и завершите обновление.
Безопасно снимите блокировку APT в Ubuntu и завершите обновление.
Ошибка «Не удалось получить блокировку /var/lib/dpkg/lock-frontend» обычно означает, что уже запущен другой процесс управления пакетами. Дождитесь завершения этой задачи, определите процесс, если он не завершится, и только после этого восстановите прерванную конфигурацию пакета; удаление файла блокировки не является безопасным решением.
APT — это инструмент управления пакетами Ubuntu, который также dpkgвыполняет установку и настройку пакетов на более низком уровне. Он использует блокировки, чтобы две операции не могли одновременно изменять состояние пакета. Файл блокировки может оставаться на диске во время обычной работы, поэтому его наличие само по себе не означает, что он устарел.
1. Дайте программе обновления Ubuntu завершить работу.
Сначала закройте все запущенные вами другие процессы обновления пакетов, например, другую команду в Терминале, программу обновления ПО или установку приложения из магазина приложений. Если открыто диалоговое окно обновления, дождитесь его завершения, вместо того чтобы запускать вторую aptкоманду. В настольной версии Ubuntu фоновые службы обновления также могут работать.
Проверьте соответствующие службы systemd и дождитесь, пока одна из них станет активной:
systemctl status apt-daily.service apt-daily-upgrade.service
Эти модули могут быть неактивны, даже если блокировка принадлежит другому интерфейсу пакета, поэтому проверьте процесс, используя ту же самую блокировку. Не запускайте дополнительные команды установки или обновления, пока текущая операция активна.
В сообщении о блокировке указывается используемый ресурс, а также может содержаться идентификатор процесса для проведения расследования.
2. Определите, кто контролирует доступ к интерфейсу.
Используйте эту функцию fuserдля отображения процессов, обращающихся к блокировке, а затем проверьте любой PID, который она сообщает:
Замените 2468на фактический PID из выходных данных. Имя процесса, например apt, apt-get, , dpkg, или служба обновления, указывает на то, что работа над пакетом может еще продолжаться. Если вам нужен более полный список процессов, выполните команду:
ps -eo pid,etime,cmd | grep -E '[a]pt|[d]pkg'
Не следует считать процесс зависшим только потому, что нет видимого прогресса. Загрузка пакетов, скрипты сопровождения и перезапуск служб могут занять время. Если обновление вы запустили в другом терминале, вернитесь к этому терминалу и дождитесь его завершения. Если обновление выполняется графическим способом, используйте это приложение для отмены или закрытия операции обычным способом.
Используйте отображаемый PID и имя команды, чтобы отличить активный процесс обновления от команды, которую вы пытаетесь выполнить.
3. В случае действительно застрявшей операции следует действовать осторожно.
Если обновление выполняется автоматически, перед вмешательством проверьте его состояние и журналы:
systemctl status apt-daily-upgrade.service
sudo journalctl -u apt-daily-upgrade.service -b --no-pager
Если работа сервиса еще продолжается, оставьте его в покое. Если вы обнаружили, что запущенная вами команда пакета явно зависла, прервите ее один раз из собственного терминала с помощью команды Ctrl+Cи дождитесь возвращения в оболочку. Не используйте команды `package.json` kill -9, killall dpkg`package.json` или не удаляйте файлы в каталоге `package.json` /var/lib/dpkg; резкая остановка скриптов пакетов может привести к тому, что пакеты останутся распакованными, но не сконфигурированными.
Если процесс завершился, но операция установки пакета была прервана, перезагрузка — разумный способ очистить "осиротевшую" работу в пользовательском пространстве. После перезагрузки убедитесь, что никакие задачи обновления программного обеспечения или установки не запущены, прежде чем продолжить. Если служба постоянно зависает, используйте вывод журнала для диагностики этой службы, а не для многократного удаления файлов блокировки.
Активная служба apt-daily-upgrade — это повод подождать и проверить ход ее выполнения, а не снимать блокировку.
4. Состояние ремонтного пакета после снятия блокировки.
После того, как ни один менеджер пакетов не будет использовать блокировку, завершите настройку всех ожидающих пакетов:
sudo dpkg --configure -a
Эта команда настраивает пакеты, которые были распакованы, но не полностью установлены. Если она выдаст сообщения о проблемах с зависимостями, обратитесь в APT для их устранения:
sudo apt-get -f install
Перед подтверждением ознакомьтесь с предлагаемыми изменениями. Не добавляйте изменения -yво время устранения неполадок: запрос позволит вам проверить, планирует ли APT неожиданное удаление или изменение. После завершения восстановления обновите списки пакетов и повторите исходную задачу:
Замените PACKAGE_NAMEна пакет, который вы хотели установить. В руководстве Ubuntu по APT-get это описано как -fпопытка исправить неработающие зависимости, а в руководстве по dpkg объясняется действие по настройке пакета. Если APT по-прежнему сообщает о блокировке, повторите проверку процесса; возможно, тем временем запустилась вторая задача по установке пакета.
После снятия блокировки настройте ожидающие пакеты и убедитесь, что APT может считывать согласованное состояние пакетов.
Убедитесь, что ремонт удался.
Исправление считается завершенным, когда исходная команда установки или обновления выполняется без ошибки блокировки, sudo dpkg --configure -aзавершается без сбоя ожидающей конфигурации и sudo apt-get checkне сообщает о нарушенных зависимостях. Если блокировка возвращается, значит, другой процесс все еще пытается ее получить; определите этот процесс, прежде чем предпринимать дальнейшие действия.
В текущих руководствах Noble для Ubuntu описаны указанные выше команды для работы с пакетами. Точное время выполнения служб и имена процессов различаются в зависимости от версии Ubuntu и установленных инструментов для работы с пакетами на рабочем столе, но основное правило остается тем же: дождаться владельца блокировки, а затем восстановить dpkg, если предыдущая операция была прервана.