Top.Mail.Ru
Загрузка

Как очистить кеш пакетов

Проблема переполненного кеша пакетного менеджера может оказаться неожиданной, а решение не всегда может лежать на поверхности.

За годы работы в Linux я был уверен, что он более ничем уже не сможет меня удивить. Но недавно мой старенький ноутбук, на котором я провожу всякие тесты, устанавливаю и пробую разные приложения, ввёл меня ступор. В один прекрасный день я обнаружил, что более не могу установить или удалить ни одного пакета, причём ранее установленные приложения продолжали работать, как и прежде. Решение проблемы было настолько неочевидным, что меня и удивило. Забегая вперёд, могу сказать, что вся проблема была в переполненном каталоге кеша установленных приложений. Но обо всём по порядку.

Всё началось с того, что мне не удалось запустить приложение, установленное через Flatpak. Причём система не выдала никаких уведомлений об обновлениях, никаких сообщений об ошибке. Решив, что это скорее связано с кривой работой контейнера Flatpak, я попытался удалить пакет, но не смог. Но что было ещё более странным, так это то, что не удалялись и простые DEB пакеты. Не придумав ничего, я стал перебирать в консоли все команды, связанные с APT, пока запуск команды «sudo apt-get dist-upgrade» не выдала сообщение, что «не осталось свободного места». При этом ресурсоёмкие приложения, такие как Firefox и LibreOffice, продолжали работать как обычно.

Это сообщение и было подсказкой, если бы я сразу правильно истолковал его в тот момент. Так как ноутбук был изначально предназначен для тестов, то и система была установлена на один раздел. А это означало, что свободного места на жёстком диске было более чем достаточно. Тогда я сделал вывод, что возможно переполнена оперативная память. Но вывод команды «free» показал, что установленная память почти не была задействована, не говоря уже о разделе подкачки. Стало очевидно, что проблема не была общесистемной. Я перешёл в каталог /var, чтобы изучить, а заодно и очистить его. Вот в нём я и нашёл директорию с кешем пакетного менеджера APT.

Очистка кэша APT

После того, как вы запустили установку приложения с помощью команды «apt-get» или «apt», менеджер пакетов APT загружает из удалённого репозитория пакет и его зависимости, и сохраняет его в каталоге «/var/cache/apt/archives». Загруженные таким образом файлы не удаляются из каталога сразу после завершения установки. Если вы вдруг решите удалить какое-либо приложение, а затем снова захотите его установить, то система сначала будет искать необходимый пакет в кеше и установит его из локальной папки. Это верно при условии, что версия пакета в кеше такая же, как и версия на удалённом репозитории.

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

Ещё один фактор, который сбил меня с толку, было неинформативное сообщение об отсутствии места на диске. Как я уже упоминал выше, свободного дискового пространства было много. А вот если бы в сообщении конкретизировали место, где заканчивается место, то всего этого можно было бы избежать. Моя проблема решилась бы простой очисткой кеша пакетного менеджера. Обычный пользователь не устанавливает в рабочую систему большое количество программ, и поэтому редко сталкивается с переполненным кешем. Но чтобы наверняка избежать в будущем подобной проблемы, я расскажу, как предотвратить её появление.

В Linux существует множество системных файлов и каталогов, которые можно безопасно удалить вручную. К примеру, каталог /var содержит несколько папок, содержимое которых можно безопасно удалить:

  • ./lost+found,
  • ./logs,
  • ./mail,
  • ./spool,
  • ./tmp

Таким образом, вручную можно удалить и содержимое кеша по пути «/var/cache/apt/archives». Но не стоит этого делать, если у вас нет твёрдой уверенности в том, что вы собираетесь совершить. К счастью, в Linux есть несколько команд, которые могут помочь вам очистить кеш пакетного менеджера:

  • apt-get purge ИМЯ_ПАКЕТА — Удалит все следы установленного пакета из системы, в том числе и из кеша.
  • apt-get autoclean — Удалит устаревшие пакеты из кеша, при этом не затронет те пакеты, которые имеют актуальные версии (очищает кеш не полностью).
  • apt-get clean — Удалит всё содержимое каталога «/var/cache/apt/archives», кроме файла блокировки.

Теперь, когда мы знаем, что надо делать, самое простое, что приходит на ум, это настроить планировщик заданий «cron» на еженедельное выполнение команды «apt-get clean». После этого вы вряд ли когда-нибудь снова столкнетесь с проблемой переполненного кеша. Это реально быстрее и проще, чем вручную удалять содержимое каталога кеша.

Ещё одно решение — настроить работу с кэшем в конфигурационном файле. Если файла «/etc/apt/apt.conf.d/99local-archive» ещё не существует, то создайте его. Далее добавьте в файл одну из трёх следующих опций:

  • APT::Periodic::MaxSize «SIZE MiB»
  • APT::Periodic::MaxAge «DAYS»
  • APT::Periodic::MinAge «DAYS»

Из вышепредставленных вариантов наиболее полезным может оказаться опция «MaxAge», которая обеспечит те же результаты, что и команда «apt-get clean».

Пережиток прошлого

Установка ограничений на размер кеша пакетов, вероятно, имел смысл в те времена, когда ресурсы компьютера были ограниченными. Когда каждый байт на жёстком диске или в оперативной памяти был на строгом счёте. Было время, когда вручную приходилось удалять не используемые в системе шрифты, чтобы освободить желаемые мегабайты на диске. Но те времена давно прошли.

Остаётся только удивляться тому, что разработчики почему-то до сих пор не изменили параметры конфигурации пакетного менеджера, оставив всё как было много лет назад. В конце концов, можно было использовать способ, какой использует утилита «logrotate» для журнала логов, которая перезаписывает старые файлы по мере заполнения каталога логов.

Вывод

На своём основном компьютере я никогда не сталкивался с вышеописанной проблемой. Возможно из-за того, что я годами использую ограниченный список программ. А сегодня я ещё обратил внимание на то, что удаляя не используемое мной приложение, я автоматически использовал опцию «purge», возможно проблема решалась из-за этой особенности.

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

svg

Что вы думаете?

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

Комментировать

svg
Быстрая навигация
  • 01

    Как очистить кеш пакетов