Обновление не идёт: файл блокировки менеджера пакетов занят
Менеджер пакетов допускает один процесс за раз. Отказ по блокировке почти всегда означает работающую службу автоматических обновлений, а не зависший процесс. Убивать её и удалять файлы блокировки опасно: прерванная установка оставляет пакеты в недонастроенном состоянии.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Работает служба автоматических обновлений
Служба запускается таймером и держит блокировку, пока ставит обновления. Это нормальная работа, а не сбой.
-
Прошлая установка прервана и оставила блокировку
Убитый процесс установки оставляет блокировку и недонастроенные пакеты. Разбор требует штатного завершения настройки.
-
Таймер обновлений мешает выкладке
Автоматические обновления могут начаться в момент выкладки и сорвать её. На серверах это регулярная причина неудачных установок.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Какой процесс держит блокировку менеджера пакетов.
sudo fuser -v /var/lib/dpkg/lock-frontend 2>&1Когда срабатывают таймеры автоматических обновлений.
systemctl list-timers "apt-daily*" --all --no-pagerЕсть ли недонастроенные пакеты после прерванной установки.
sudo dpkg --auditРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Служба запускается таймером и держит блокировку, пока ставит обновления. Это нормальная работа, а не сбой.
- Как проверить
-
Посмотрите, кто держит блокировку.
sudo fuser -v /var/lib/dpkg/lock-frontend 2>&1 | head systemctl is-active unattended-upgrades apt-daily.service apt-daily-upgrade.service 2>/dev/null
- Как исправить
- Дождитесь завершения службы обновлений. Проверить прогресс можно по её журналу: обычно это минуты, а не часы.
- Почему происходит
- Убитый процесс установки оставляет блокировку и недонастроенные пакеты. Разбор требует штатного завершения настройки.
- Как проверить
-
Посмотрите состояние пакетов.
sudo dpkg --audit 2>/dev/null | head sudo fuser -v /var/lib/dpkg/lock 2>&1 | head
- Как исправить
-
Завершите настройку прерванных пакетов штатной командой, и блокировка снимется сама. Удаление файлов блокировки вручную оставляет систему в противоречивом состоянии.
sudo dpkg --configure -a
- Почему происходит
- Автоматические обновления могут начаться в момент выкладки и сорвать её. На серверах это регулярная причина неудачных установок.
- Как проверить
-
Посмотрите таймеры обновлений.
systemctl list-timers "apt-daily*" --all --no-pager
- Как исправить
- Отключите автоматические обновления на машинах, где выкладка идёт своими средствами, либо сдвиньте их время. Два процесса установки всегда мешают друг другу.
Пример вывода
Блокировку держит служба автоматических обновлений. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
$ sudo apt install nginx
E: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 10600 (unattended-upgr)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
systemd[1]: Started unattended-upgrades.service - Unattended Upgrades Shutdown.
Связанные ошибки
- Резервное копирование не идёт: хранилище копий заблокировано Задача копирования падает на блокировке: прошлый запуск был прерван и не снял её.
- Два таймера на одну службу: срабатывания накладываются Одна служба вызывается несколькими таймерами: запуски накладываются, часть срабатываний теряется.
- File exists при создании файла или сокета Ошибка 17: объект уже существует. Разбор для сокетов, файлов блокировки и каталогов службы.
- Обновление пакета отложено: программа запущена Обновление не применяется: механизм пакетов ждёт закрытия работающей программы. Как это выглядит у служб.
- PostgreSQL: локаль кластера не совпадает с системой Кластер не запускается или сортировка ломается после обновления системы: несовпадение версии библиотеки локалей.
- status=5/NOTINSTALLED и status=6/NOTCONFIGURED в systemd Коды 5 и 6 по соглашению LSB: программа не установлена или не настроена. Что это значит на практике и как проверить.
- Базы антивируса не обновляются, служба не стартует Служба проверки не запускается без баз, а обновление не проходит: нет прав, нет места или не настроен источник.
- Служба включается или отключается сама после установки пакета Наборы предустановок решают, включать ли службу при установке. Как посмотреть и переопределить.
Источники
-
unattended-upgrade(8)
Служба автоматических обновлений и её расписание. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено установкой пакета во время работы службы обновлений.