ZaLinux.ru

Как правильно и навсегда исправить ошибку «E: Не удалось получить доступ к файлу блокировки /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)»

Ошибки «E: Не удалось получить доступ к файлу блокировки /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)» и «E: Невозможно заблокировать каталог /var/lib/apt/lists/»

Пакеты (программы) в Linux можно устанавливать и обновлять с использованием графического интерфейса, либо с помощью утилит командной строки.

Иногда при использовании утилитой apt (консольного менеджера пакетов), например, при обновлении информации о пакетах, либо про попытке установить новый пакет, возникает примерно следующая ошибка:

sudo apt update && sudo apt dist-upgrade -y
[sudo] password for mial:
Чтение списков пакетов… Готово
E: Не удалось получить доступ к файлу блокировки /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Невозможно заблокировать каталог /var/lib/apt/lists/

Ошибка довольно раздражающая, она может возникнуть сразу после загрузки системы или в любое произвольное время.

На некоторых сайтах советуют удалить файлы блокировки, например, /var/lib/apt/lists/lock, но не торопитесь это делать! Это может привести к необходимости затем исправлять ошибки с пакетами программ. Чтобы разобраться, из-за чего это происходит, а также правильно исправить эту ошибку, давайте изучим механизм её возникновения.

Её причиной является то, что одновременно запущено два экземпляра apt. Дело в том, что когда программа apt начинает свою работу, она создаёт пару файлов блокировки (один из них /var/lib/apt/lists/lock). При каждом своём запуске apt обращается к этим файлам – и если они уже присутствуют, значит ранее был запущен другой экземпляр apt. Чтобы не внести беспорядок в пакетах и не навредить системе, второй запущенный экземпляр apt останавливает свою работу и выводит показанное выше сообщение об ошибке.

Вряд ли вы сами запустили в двух разных окнах программу apt. Дело в том, что у apt имеется свой демон (фоновый процесс), который в некоторых дистрибутивах установлен на автоматическое выполнение. Т.е. чаще всего вы сталкиваетесь с этой ошибкой в тот момент, когда apt выполняет свои фоновые процессы. Это не является большой редкостью, поскольку работа демона apt может быть продолжительной, например, когда нужно скачать большое количество обновлений, а Интернет-подключение медленное.

Если в этой ситуации удалить файлы-блокировщики (/var/lib/apt/lists/lock), как это иногда советуют, то в результате фоновый процесс apt преждевременно завершит свою работу, либо вы запустите второй экземпляр apt – оба эти варианта приведут к проблемам с пакетами, и, вероятнее всего, при последующей попытке использовать apt система предложит вам запустить программу с ключом -f:

sudo apt install -f -y

Правильный способ исправить ошибку E: Не удалось получить доступ к файлу блокировки /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)

Итак, первый способ исправить ошибку очевиден – не нужно ничего делать, просто дождитесь, когда фоновый процесс apt сам завершит свою работу. В результате он сам скачает/обновит новые пакеты.

Как отключить автоматический запуск службы apt

Тем не менее, ситуацию с apt многие пользователи, и я в том числе, могут найти раздражающей: мы не можем воспользоваться apt, в том числе установить нужный пакет в тот момент, когда нам это нужно и, возможно, нет времени дожидаться, пока apt завершит свою работу.

Чтобы увидеть, какие службы apt присутствуют в системе, выполните команду:

systemctl list-unit-files | grep apt

Вероятно, вы увидите там такие службы как:

  • apt-daily.timer – ежедневный таймер службы для скачивания новых пакетов
  • apt-daily-upgrade.timer – ежедневный таймер службы для обновления и очистки пакетов
  • apt-daily.service – непосредственно запускает скачивание новых пакетов (команда /usr/lib/apt/apt.systemd.daily update), вызывается таймером
  • apt-daily-upgrade.service – непосредственно запускает установку новых пакетов и очистку кэша (команда /usr/lib/apt/apt.systemd.daily install), вызывается таймером

Следующая команда выведет только список служб apt, которые добавлены в автоматическую загрузку:

systemctl list-unit-files | grep enabled | grep apt

Скорее всего, это службы apt-daily-upgrade.timer и apt-daily.timer, чтобы отключить их автоматический запуск при старте системы, выполните команды:

sudo systemctl disable apt-daily-upgrade.timer
sudo systemctl disable apt-daily.timer

Отключение unattended-upgrades

Кроме автоматического запуска apt, в системах на базе Debian имеются включенные по умолчанию unattended-upgrades – те же самые автоматические обновления.

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

Для изменения этих настроек можно отредактировать файл /etc/apt/apt.conf.d/20auto-upgrades, в нём имеются следующие строки:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

Первая отвечает за обновление списка пакетов, а вторая – за обновления самих пакетов в системе. Этот файл можно изменить вручную (чтобы остановить автоматическое обновление, вместо 1 впешите 0) либо запустить конфигуратор:

sudo dpkg-reconfigure -plow unattended-upgrades

Переключения между кнопками, используйте клавишу <TAB>, для выбора используйте <ENTER>.

Что характерно, в Kali Linux по умолчанию отключены автоматические службы apt как и вообще все сетевые службы, которые так или иначе используют доступ в сеть, но по включены unattended-upgrades – либо авторы известного дистрибутива забыли о них, либо считают эти обновления важными.

С одной стороны, это навсегда избавит вас от ошибки «E: Невозможно заблокировать каталог /var/lib/apt/lists/» и других подобных, но при этом вам нужно будет самостоятельно выполнять обновление и очистку пакетов.

Для полного обновления системы выполняйте:

sudo apt update && sudo apt full-upgrade -y

А для очистки пакетов используются команды:

sudo apt autoremove -y
sudo apt clean -y

Заключение

Если вы постоянно используете apt в командной строке, то вряд ли нужна автоматическая служба apt. Если же вы выполняете какую-то инструкцию и случайно столкнулись с описанной ошибкой, то, наверное, правильнее не удалять демон apt, а просто дождаться когда он корректно завершит свою работу.

Рекомендуемые статьи:

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *