Что было. На сервере с Ubuntu команда apt install отвечает: E: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 1234 (unattended-upgr). Никто другой пакеты не ставил.
Причина. В фоне работала служба автоматических обновлений безопасности (unattended-upgrades), которая запускается по таймеру и в момент установки держит блокировку менеджера пакетов. Модератор посоветовал просто подождать; автор подтвердил. Позже та же ситуация повторилась при обновлении выпуска, что тоже нормально: инструмент обновления держит блокировку часами.
Что делать правильно.
- Прочитать сообщение: современные версии apt сами пишут, какой процесс держит блокировку. Если это
unattended-upgr,apt-daily-upgrade,packagekitdилиdo-release-upgrade, дождаться окончания:journalctl -u apt-daily-upgrade -fпокажет прогресс,ps -fp <PID>подтвердит, что процесс жив. - Если процесс не назван:
sudo fuser -v /var/lib/dpkg/lock /var/lib/dpkg/lock-frontend /var/lib/apt/lists/lock /var/cache/apt/archives/lockилиlsofпо тем же путям. - Если держатель мёртв (PID не существует), а файл остался (после жёсткой перезагрузки во время установки): удалить только конкретный lock-файл и сразу
sudo dpkg --configure -a, чтобы завершить прерванные настройки. Удалять lock-файлы при живом процессе нельзя: два параллельных dpkg над одной базой пакетов ломают её.
Почему «убить процесс и удалить lock» плохой совет из интернета. Убитый посреди работы dpkg оставляет пакеты в состоянии «распакован, не настроен»; следующая команда apt откажется работать до dpkg --configure -a, а в худшем случае придётся разбирать сломанные скрипты пакетов вручную.
Как уменьшить столкновения на сервере.
- Знать расписание:
systemctl list-timers apt-daily*покажет, когда идут проверки и установки; окно можно сдвинуть переопределениемOnCalendarуapt-daily-upgrade.timer. - Для машин, которыми управляют централизованно (скрипты, средства конфигурации), отключить автоматическую установку (
APT::Periodic::Unattended-Upgrade "0"в/etc/apt/apt.conf.d/20auto-upgrades) и обновлять из своего конвейера. - Не запускать вторую сессию с apt «в другом окне»; для долгих операций использовать
tmux.
Отличать от других блокировок. lock-frontend держит интерактивный apt, lock держит dpkg, lists/lock держит apt update; сообщение называет файл, и держатель у каждого свой.
Команда описана в документации Ubuntu.