99-cleanup — Очистка (autoremove, autoclean)
Финальный модуль установки: удаляет более не нужные пакеты и кэш пакетного менеджера, а при явном включении — чистит неиспользуемые данные Docker. 🔒 обязательный (всегда запускается последним).
Зачем нужен
Пока предыдущие модули ставят Docker, Node.js, PostgreSQL и прочее, в системе накапливается «мусор»: пакеты, которые тянулись как зависимости, но уже никому не нужны, и скачанные .deb/.rpm-архивы в кэше пакетного менеджера. На маленьком VPS это легко съедает сотни мегабайт диска.
Модуль запускается последним (номер 99) и прибирается за установкой: удаляет ненужные пакеты и чистит кэш, освобождая место. По желанию — дополнительно чистит неиспользуемые артефакты Docker.
Когда включать и когда не нужен
- Всегда включён — обязательный завершающий модуль. Он безопасен: удаляет только то, что пакетный менеджер сам считает лишним.
- Отдельно ничего настраивать не нужно; единственный опциональный шаг — очистка Docker — по умолчанию выключен и включается переменной
PRUNE_DOCKER=yes.
Зависимости и требования
- Не зависит от других модулей — работает с любым набором установленных компонентов.
- Мультидистро: на Debian/Ubuntu использует
apt-get, на RHEL-семействе —dnf/yum, и т. д. (черезos_pkg_autoremove). - Очистка Docker выполняется только если Docker установлен (
command_exists docker) и явно включён флагом.
Что именно делает
Пошагово, в порядке выполнения module_install:
- Устанавливает
DEBIAN_FRONTEND=noninteractive— чтобы пакетный менеджер не задавал вопросов. - Очистка неиспользуемых пакетов и кэша (
os_pkg_autoremove). На Debian/Ubuntu это:apt-get autoremove -y --purge— удаляет пакеты-зависимости, которые больше никому не нужны, вместе с их конфигами (--purge);apt-get autoclean— вычищает из кэша устаревшие скачанные пакеты. (На RHEL-семействе — аналогиdnf autoremove+dnf clean packages.)
- Очистка Docker — только если
PRUNE_DOCKER=yesи Docker установлен:docker system prune -f— удаляет остановленные контейнеры, неиспользуемые сети, «висячие» (dangling) образы и кэш сборки.
- Отмечает модуль выполненным (
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 |
Как переопределить настройки
- Экспорт перед установкой (флаг
-Eсохраняет переменные приsudo):PRUNE_DOCKER=yes sudo -E ./install.sh - Правка
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 /
Типовые задачи
- Повторно почистить сервер вручную:
sudo mitdev clean - Почистить только пакеты (без Docker и journald):
sudo apt-get autoremove --purge -y && sudo apt-get autoclean -y - Вычистить неиспользуемые данные Docker (осознанно):
docker system prune -f - Посмотреть, сколько места занимает Docker перед очисткой:
docker system df
Частые ошибки
| Симптом | Причина | Что сделать |
|---|---|---|
После 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.
Откат и удаление
- Авто-откат (
module_rollback): no-op (return 0). Откатывать нечего — модуль ничего не создаёт, а удаление пакетов и очистку кэша откатить в принципе нельзя (да и незачем: удалялось только лишнее). mitdev remove cleanup: тоже no-op — модуль ничего не создаёт, поэтому и удалять нечего. Команда просто сообщает об этом. Флаг--purgeздесь ничего не меняет.
См. также
- ../COMMANDS.md — команды
mitdev clean,mitdev update. - 01-system.md — первый (тоже обязательный) модуль установки.
- ../MODULES.md — краткий обзор всех модулей.