Получение сообщения об ошибке «Не удалось открыть файл блокировки /var/lib/dpkg/lock» может сбить с толку, поскольку оно вполне может спросить, являетесь ли вы root, даже если вы выполняли команду обновления с префиксом sudo. Эта команда с ошибкой появится почти на всем, что использует менеджер пакетов apt-get. Обновляете ли вы настольный компьютер или ноутбук под управлением одной из различных версий Ubuntu или Raspberry Pi с Raspbian Debian, вы можете обнаружить, что это может быть проблемой на любой из этих платформ.
Тем не менее, решение довольно простое. Обычно можно проигнорировать все, что спрашивает, являетесь ли вы root’ом, и перейти непосредственно к сути проблемы, которая связана с тем, что два процесса пытаются получить доступ к заблокированному файлу в одно и то же время.
Метод 1: Убедитесь, что sudo может получить доступ к каждой части команды
Если бы вы запустили sudo apt-get update && apt-get upgrade, то вы можете получить эту ошибку, так как второй процесс не имеет права доступа к файлу /var/lib/dpkg/lock.
Попробуйте вместо этого выполнить sudo apt-get update && sudo apt-get upgrade чтобы проверить, есть ли в этом разница. Если это так, то ваша проблема уже решена, и дело было лишь в том, что вы не предоставили второму процессу достаточных прав для доступа к файлу. Имейте в виду, что эта команда обновляет и затем обновляет все ваши пакеты, поэтому она может попросить вас одобрить ее, и ее выполнение может занять некоторое время.
В противном случае проблема уже полностью решена, и вам больше ничего не нужно делать.
Метод 2: Удаление файла /var/lib/dpkg/lock
Тем, кто использует curl, wget или другую команду, которая загружает файл незаметно, возможно, придется ввести команду sudo, если они работают с Raspbian, так как в некоторых случаях она заменяет apt-get. Тем, кто работает с чистыми Debian, Xubuntu, Lubuntu, Linux Mint и другими подобными, ориентированными на настольные компьютеры/ноутбуки, не придется беспокоиться об этом, но попробовать еще раз стоит.
Если это все равно не помогло, проверьте, не пытается ли какая-нибудь другая программа получить доступ к файлу, пока вы выполняете обновление. Попробуйте использовать sudo lsof /var/lib/dpkg/lock проверить, не запущены ли другие процессы, в которых он открыт. Если он у вас где-то открыт, то вы можете просто закрыть приложение.
Помните, что наличие доступа на чтение и запись для приложения, открывающего этот файл, означает, что эта программа должна обладать правами root, поэтому вам’ понадобятся права root, чтобы закрыть программу. Вы даже можете попробовать посмотреть через приложение «Диспетчер задач», если вы используете графическую среду рабочего стола, которая поддерживает эту функцию. Просто щелкните правой кнопкой мыши на нарушающем процессе и закройте его, если у вас есть на это права. Попробуйте также выполнить команды kill или killall из командной строки.
Теперь вы можете попробовать запустить команды apt-get снова и посмотреть, изменит ли это ситуацию, но вам не придется делать ничего другого, если это произошло. Если у вас все еще возникают проблемы, попробуйте удалить файлы блокировки прямо. Хотя на это следует смотреть как на последнее средство, обычно это не вызывает никаких проблем, связанных с программой apt-get. Вы’ все равно захотите исчерпать другие методы, прежде чем делать это, поскольку это может нарушить работу системы apt.
Перезагрузка иногда помогает, но если вы находитесь на постоянно включенном сервере или устройстве с Raspbian, это может оказаться неэффективным вариантом. Попробуйте запустить sudo rm /var/lib/dpkg/lock && sudo rm /var/lib/apt/lists/lock, что позволит освободить конкретные файлы, которые apt просматривает, когда вы его запускаете. Будьте внимательны к именам этих файлов, поскольку запуск rm от имени root является разрушительным.
Предполагая, что вы сделали это, исчерпав все другие варианты, вы можете попробовать запустить команды обновления снова и посмотреть, что произойдет. У вас не должно возникнуть никаких дальнейших проблем, потому что файлы больше не будут существовать, хотя программы apt-get смогут восстановить их во время работы.