99-cleanup — Очистка (autoremove, autoclean)

Финальный модуль установки: удаляет более не нужные пакеты и кэш пакетного менеджера, а при явном включении — чистит неиспользуемые данные Docker. 🔒 обязательный (всегда запускается последним).

Зачем нужен

Пока предыдущие модули ставят Docker, Node.js, PostgreSQL и прочее, в системе накапливается «мусор»: пакеты, которые тянулись как зависимости, но уже никому не нужны, и скачанные .deb/.rpm-архивы в кэше пакетного менеджера. На маленьком VPS это легко съедает сотни мегабайт диска.

Модуль запускается последним (номер 99) и прибирается за установкой: удаляет ненужные пакеты и чистит кэш, освобождая место. По желанию — дополнительно чистит неиспользуемые артефакты Docker.

Когда включать и когда не нужен

Зависимости и требования

Что именно делает

Пошагово, в порядке выполнения module_install:

  1. Устанавливает DEBIAN_FRONTEND=noninteractive — чтобы пакетный менеджер не задавал вопросов.
  2. Очистка неиспользуемых пакетов и кэша (os_pkg_autoremove). На Debian/Ubuntu это:
    • apt-get autoremove -y --purge — удаляет пакеты-зависимости, которые больше никому не нужны, вместе с их конфигами (--purge);
    • apt-get autoclean — вычищает из кэша устаревшие скачанные пакеты. (На RHEL-семействе — аналоги dnf autoremove + dnf clean packages.)
  3. Очистка Dockerтолько если PRUNE_DOCKER=yes и Docker установлен:
    • docker system prune -f — удаляет остановленные контейнеры, неиспользуемые сети, «висячие» (dangling) образы и кэш сборки.
  4. Отмечает модуль выполненным (state_mark).

Предупреждение про PRUNE_DOCKER=yes. docker system prune -f удаляет всё, что Docker считает неиспользуемым: остановленные контейнеры, неиспользуемые (не привязанные к запущенным контейнерам) образы и сети, а также кэш сборки. Если у вас есть остановленные, но нужные контейнеры или образы, которые вы храните «про запас», — они будут удалены без подтверждения. Для одноразовой очистки после установки это обычно безопасно, но не включайте флаг вслепую на сервере с ценными остановленными контейнерами.

Файлы, службы и порты

Модуль ничего не создаёт: ни файлов, ни служб, ни портов. Единственный след — отметка выполнения:

Объект Значение
/var/lib/mitdev/state/cleanup.done отметка, что модуль отработал

Учётные данные

Модуль не создаёт и не хранит никаких учётных данных.

Настройка

Значение берётся из config/defaults.conf:

Переменная Значения По умолчанию На что влияет Когда менять
PRUNE_DOCKER yes / no no выполнять ли docker system prune -f при очистке ставьте yes, только если сознательно хотите вычистить неиспользуемые образы/сети/тома-сироты Docker

Как переопределить настройки

  1. Экспорт перед установкой (флаг -E сохраняет переменные при sudo):
    PRUNE_DOCKER=yes sudo -E ./install.sh
    
  2. Правка config/defaults.conf — измените строку PRUNE_DOCKER и запустите установку.

Как пользоваться

Отдельно вызывать модуль обычно не нужно — он отрабатывает в конце установки. Ту же очистку в любой момент делает команда:

sudo mitdev clean

Она чистит пакеты, обрезает журнал journald до 100 МБ и (с подтверждением) предлагает выполнить docker system prune, если Docker установлен.

Проверка, что всё работает

module_verify всегда возвращает успех (return 0) — проверять по сути нечего: модуль ничего не устанавливает и не запускает, а лишь освобождает место. Успешность отдельных шагов очистки видна в журнале установки /var/log/mitdev/install.log.

Косвенно результат можно оценить по свободному месту:

df -h /

Типовые задачи

Частые ошибки

Симптом Причина Что сделать
После PRUNE_DOCKER=yes пропал нужный образ/контейнер docker system prune -f удалил всё неиспользуемое не включайте флаг, если храните остановленные контейнеры/образы; заранее запускайте нужное или тегируйте образы
autoremove хочет удалить что-то важное пакет остался без явного «держателя» это редкость; при сомнении посмотрите список удаляемого и при необходимости пометьте пакет apt-mark manual <пакет>
Диск всё ещё почти полон после очистки место занято данными (БД, логи приложений, тома), а не пакетами ищите крупные каталоги: `sudo du -xhd1 /

Безопасность и продакшен

Модуль безопасен по своей природе: autoremove/autoclean трогают только то, что пакетный менеджер считает лишним, и не удаляют работающие компоненты. Единственный «острый» шаг — очистка Docker — по умолчанию выключен и требует явного PRUNE_DOCKER=yes.

На продакшене держите PRUNE_DOCKER=no, если на сервере есть остановленные контейнеры или образы, которые вы намеренно храните. Регулярную ручную очистку удобно делать mitdev clean — она спрашивает подтверждение перед удалением данных Docker.

Откат и удаление

См. также