Ошибка «не удалось получить блокировку /var/lib/dpkg/lock» часто встречается в системах Debian/Ubuntu, работающих на виртуальных машинах. Стандартные решения, предлагаемые в сети (например, завершение процесса apt-get или удаление блокировочного файла), не являются оптимальными, так как могут навредить системе, и в будущем эта ошибка может повториться.
Содержание статьи
Решите проблему с блокировкой файла /var/lib/dpkg/lock раз и навсегда
Я объясню вам, в чем заключается реальная причина этой ошибки, и продемонстрирую, как окончательно решить эту проблему. Сообщение об ошибке выглядит так:
E: Не удалось получить блокировку /var/lib/dpkg/lock - открыть (11: Ресурс временно недоступен) E: Не удалось заблокировать каталог администрирования (/var/lib/dpkg), использует ли его другой процесс?

Сообщение об ошибке уже указывает на причину: каталог /var/lib/dpkg/ используется другим процессом. Это связано с тем, что в Ubuntu по умолчанию активированы автоматические обновления для обеспечения безопасности.
После завершения загрузки операционной системы Ubuntu, она автоматически запускает команду apt-get update. Если обнаруживаются обновления безопасности, они устанавливаются в фоновом режиме. Таким образом, при одновременном выполнении команды sudo apt upgrade появляется указанная ошибка. Так как вы не так часто используете Ubuntu в Virtualbox или VMware Workstation, как на реальном оборудовании, виртуальная машина Ubuntu обновляется реже, и поэтому эта ошибка возникает чаще именно в виртуальной среде.
Неважно, работаете ли вы с Ubuntu на реальном компьютере или в виртуальной среде, вы можете отключить автоматические обновления, чтобы навсегда устранить эту проблему.
Эта ошибка редко встречается на серверах с Ubuntu, и рекомендуется активировать автоматические обновления для обеспечения автоматической установки патчей безопасности.
Для этого откройте «Программы и обновления» через меню приложений.

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

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

Затем перезагрузите ваш компьютер.
Выключение автоматических обновлений через командную строку.
Вы можете получить аналогичные результаты через командную строку. В терминале откройте файл /etc/apt/apt.conf.d/20auto-upgrades с помощью текстового редактора, например, nano.
sudo nano /etc/apt/apt.conf.d/20auto-upgrades
Конечно, напишите текст, который вы хотите перефразировать, и я помогу вам с этим!
APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Download-Upgradeable-Packages "1"; APT::Periodic::AutocleanInterval "0"; APT::Periodic::Unattended-Upgrade "1";
Для деактивации автоматического обновления безопасности измените их на
APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Download-Upgradeable-Packages "0"; APT::Periodic::AutocleanInterval "0"; APT::Periodic::Unattended-Upgrade "0";
Для того чтобы сохранить документ в текстовом редакторе Nano, нажмите комбинацию клавиш Ctrl+O, а затем Enter для подтверждения имени файла. Чтобы закрыть редактор, используйте комбинацию Ctrl+X. После этого перезагрузите компьютер.
Обновление
Читатель рассказал мне, что даже после выполнения указанных выше шагов ошибка все еще появляется, когда он запускает команду sudo apt update сразу после загрузки Ubuntu. Это происходит из-за того, что фоновые процессы “apt update” еще не завершили свою работу.
Если вы регулярно обновляете пакеты вручную, то настоятельно рекомендую настроить «автоматическую проверку обновлений» на еженедельный режим, а не ежедневный. Для окончательного решения проблемы с сообщениями об ошибках установите параметр на «Никогда».

Когда происходят автоматические обновления в Ubuntu?
Ubuntu автоматически обновляет систему после загрузки. Кроме того, Systemd может выполнять автоматические обновления. Для ежедневного обновления списка пакетов используется служба apt-daily.service, а для загрузки и установки обновлений безопасности — служба apt-daily-upgrade.service. Вы можете проверить их состояние с помощью:
systemctl status apt-daily.service systemctl status apt-daily-upgrade.service
Служба apt-daily.service управляется таймером apt-daily. timer. Этот таймер функционирует аналогично задаче cron, которая запускает службу systemd с тем же названием в определенные моменты времени. Файл конфигурации apt-daily. timer расположен по адресу /lib/systemd/system/apt-daily. timer. Его содержимое можно просмотреть с помощью:
cat /lib/systemd/system/apt-daily. timer
[Unit] Description=Ежедневные действия загрузки apt [Timer] OnCalendar=--* 6,18:00 RandomizedDelaySec=12h Persistent=true [Install] WantedBy=timers. target
Зеленая строка демонстрирует, что apt-daily.service активируется ежедневно в 6:00 и 18:00. Параметр RandomizedDelaySec=12h указывает, что выполнение будет задержано на 0.~12 часов, если у другого таймера совпадает время начала.
Служба apt-daily-upgrade.service управляется таймером apt-daily-upgrade. timer, а конфигурационный файл этого таймера расположен по адресу /lib/systemd/system/apt-daily-upgrade. timer.
cat /lib/systemd/system/apt-daily-upgrade. timer
[Unit] Description=Ежедневные действия обновления и очистки apt After=apt-daily. timer [Timer] OnCalendar=--* 6:00 RandomizedDelaySec=60m Persistent=true [Install] WantedBy=timers. target
apt-daily-upgrade.service выполняется ежедневно в 6:00. Параметр RandomizedDelaySec=60m указывает на то, что процесс может быть отложен до одного часа.~60 минут, если другой таймер запускается в то же время.
Пакет apt включает в себя два файла с расширением.service и два файла с расширением. timer. Эти файлы связаны с оболочкой, расположенной по адресу /usr/lib/apt/apt. systemd. daily, которая запускается службами apt-daily.service и apt-daily-upgrade.service.
Оболочка /usr/lib/apt/apt. systemd. daily считывает настройки из файла /etc/apt/apt.conf.d/20auto-upgrades. Таким образом, для устранения указанной ошибки нет необходимости отключать оба таймера.
На этом всё! Надеюсь, что данная статья оказалась полезной для решения проблемы «не удалось получить блокировку /var/lib/dpkg/lock» в Ubuntu. Как обычно, если вам понравился этот материал, подписывайтесь на нашу бесплатную рассылку, чтобы получать больше советов и рекомендаций.

