В последнее время я получаю много ошибок “Could not get lock /var/lib/dpkg/lock”, когда “Could not get lock /var/lib/dpkg/lock – open (11 Resource temporarily unavailable)” пытаюсь установить или обновить пакеты из командной строки в Ubuntu, поэтому я решил написать статью о том, как можно избавиться от таких проблем.
Вот полное сообщение об ошибке:
E: Не удалось получить блокировку /var/lib/dpkg/lock – открыто (11 Ресурс временно недоступен)
E: Невозможно заблокировать каталог администрирования (/var/lib/dpkg/), его использует другой процесс?
Для более новых версий Ubuntu это сообщение изменилось, и теперь оно показывает, какой процесс удерживает “/var/lib/dpkg/lock-frontend”, примерно вот так:
Ожидание блокировки кэша: Не удалось получить блокировку /var/lib/dpkg/lock-frontend. Она удерживается процессом 251486 (apt).
Как и говорится в сообщении, это может произойти, если другой процесс использует /var/lib/dpkg/lock. Поэтому первое что нужно сделать, если вы столкнулись с этой ошибкой, это убедиться, что вы закрыли менеджеры пакетов, такие как Synaptic и т.д. Также проверьте, нет ли у вас других открытых терминалов, которые в данный момент выполняют процедуру установки / обновления, и дождитесь завершения этих процессов.
Если вы используете более новую версию Ubuntu, сообщение само подскажет вам, какой процесс удерживает “/var/lib/dpkg/lock” / “/var/lib/dpkg/lock-frontend”.
Если ни один процесс не использует /var/lib/dpkg/lock, следующим шагом будет… ожидание. В некоторых случаях этого достаточно для устранения ошибок “Could not get lock /var/lib/dpkg/lock” и “Could not get lock /var/lib/dpkg/lock-frontend”.
Другой потенциальный способ обойти эту проблему – перезагрузить систему и посмотреть, будет ли она по-прежнему возникать.
Однако бывают случаи, когда вышеупомянутых решений может быть недостаточно. Для таких случаев вот что вы можете сделать.
Используйте это только в том случае, если ничто другое не помогло! Использование приведенных ниже команд может привести к поломке пакетов / повреждению. Используйте их на свой страх и риск!
Если ничего не помогло (по моему опыту, это обычно происходит, если система была принудительно выключена или перезагружена во время установки или обновления пакетов, например, из-за отключения электричества), вы можете удалить файл apt lock/lock-frontend и посмотреть, устранит ли это проблему на вашей системе Ubuntu / Debian / Linux Mint (и любой системе, использующей APT):
sudo rm /var/lib/apt/lists/lock
sudo rm /var/lib/apt/lists/lock-frontend
Если вы все еще получаете ошибки о блокировке кэша apt (/var/cache/apt/archives/lock) или блокировке dpkg (/var/lib/dpkg/lock), вы можете удалить их:
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
После этого может потребоваться переконфигурация пакетов, а также исправление любых потенциально неработающих пакетов:
sudo dpkg --configure -a
sudo apt install -f
В некоторых редких случаях после попытки запустить sudo dpkg –configure -a вы можете увидеть ошибку, подобную приведенной ниже:
$ sudo dpkg –configure -a
dpkg: error: parsing file ‘/var/lib/dpkg/updates/0004’ near line 0:
newline in field name ‘#padding’
В таких случаях удалите ошибочный файл, а затем снова запустите команду sudo dpkg –configure -a. В моем примере файл /var/lib/dpkg/updates/0004 (в вашем случае он может быть другим!), поэтому для его удаления и повторной настройки dpkg нужно использовать:
sudo rm /var/lib/dpkg/updates/0004
sudo dpkg --configure -a
Надеюсь, после выполнения этих команд вы перестанете получать ошибки “Could not get lock /var/lib/dpkg/lock – open (11 Resource temporarily unavailable)” и “Could not get lock /var/lib/dpkg/lock-frontend – open (11 Resource temporarily unavailable)”.
Но если и это не помогло, можно попробовать ввести в терминале следующую команду
sudo fuser -vki /var/lib/dpkg/lock
или
sudo fuser -vki /var/lib/dpkg/lock-frontend
Обычно, мне это помогает.
Одной из основных причин повторного возникновения этой ошибки является то, что Ubuntu по умолчанию включает автоматическое обновление, и либо обновление находится в процессе, когда вы видите эту ошибку (в этом случае вам следует подождать, пока обновление не будет выполнено успешно!), либо обновление не удалось, и в этом случае вы остаетесь с этой ошибкой, пока не исправите ее.
Надеюсь статья была полезной? И если это так, не забудьте поделиться ею в социальных сетях.