01-system — обновление системы и базовая подготовка

Обновляет ОС, ставит базовый набор утилит, настраивает часовой пояс и NTP, при нехватке RAM создаёт swap-файл. 🔒 обязательный.

Зачем нужен

Это первый модуль установки. Он приводит свежий сервер в предсказуемое состояние: обновляет индекс пакетов и сами пакеты (закрывая уже известные уязвимости), доустанавливает инструменты, без которых не отработают следующие модули (curl, gnupg, ca-certificates, openssl и т. п.), выставляет часовой пояс и включает синхронизацию времени.

Без этого модуля на «голом» образе может не быть даже curl или актуальных корневых сертификатов, и тогда скачивание ключей репозиториев (Docker, Node.js, PostgreSQL) в следующих модулях будет падать. Неверное системное время ломает проверку TLS-сертификатов и записи в логах.

Отдельная задача модуля — swap. swap (файл подкачки) — это место на диске, которое ядро использует как «медленную дополнительную память», когда заканчивается оперативная. На маленьких VPS (512 МБ — 1 ГБ RAM) сборка пакетов или запуск нескольких сервисов легко упирается в нехватку памяти, и процессы убивает OOM-killer. Swap-файл спасает от этого.

Этого модуля достаточно для базовой гигиены сервера. Прикладной софт (Docker, Node.js, БД) ставят отдельные модули.

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

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

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

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

  1. Устанавливает DEBIAN_FRONTEND=noninteractive, чтобы пакеты не задавали интерактивных вопросов.
  2. Обновляет индекс пакетовapt-get update (или dnf makecache). Выполняется с 3 повторами при сбое сети.
  3. Обновляет установленные пакетыapt-get dist-upgrade (или dnf upgrade), с сохранением текущих конфигов (--force-confold).
  4. Ставит базовые пакеты: ca-certificates, curl, gnupg, lsb-release, apt-transport-https, software-properties-common, openssl.
  5. Часовой пояс и NTP — если задана переменная TIMEZONE и в системе есть timedatectl: timedatectl set-timezone <TIMEZONE> и включение синхронизации времени timedatectl set-ntp true.
  6. Swap (_system_ensure_swap) — проверяет условия и при необходимости: создаёт файл SWAP_FILE через fallocate (при неудаче — через dd), выставляет права 600, форматирует mkswap, включает swapon, регистрирует откат и добавляет строку в /etc/fstab (чтобы swap подключался после перезагрузки).
  7. Отмечает модуль выполненным (state_mark).

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

Путь Назначение Владелец:права
/swapfile (значение SWAP_FILE) файл подкачки, создаётся только при низком RAM root:root, 600
/etc/fstab добавляется строка /swapfile none swap sw 0 0, чтобы swap подключался при загрузке системный
/var/log/mitdev/install.log полный журнал шагов установки root, 640
/var/log/mitdev/errors.log только ошибки (с выводом упавших команд) root, 640
/var/lib/mitdev/state/system.done отметка, что модуль отработал (для идемпотентных повторов) root

Портов и служб модуль не открывает и не создаёт.

Настройка

Переменная Тип / значения По умолчанию На что влияет Когда менять
TIMEZONE строка IANA (Europe/Moscow, UTC) UTC часовой пояс сервера и логов если сервер обслуживает клиентов в конкретном регионе
SWAP_FILE путь /swapfile где создаётся файл подкачки почти никогда; менять, если корневой раздел мал, а данные на другом диске
SWAP_SIZE_MB число (МБ) 2048 размер создаваемого swap увеличьте на сервере со сборками/БД и малым RAM
SWAP_RAM_THRESHOLD_MB число (МБ) 2048 порог: swap создаётся, только если RAM меньше этого значения поднимите, если хотите swap даже на машинах с бóльшим объёмом RAM

SWAP_RAM_THRESHOLD_MB — именно порог принятия решения, а не размер. Пример: при RAM 1 ГБ и пороге 2048 МБ swap будет создан; при RAM 4 ГБ — нет.

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

Три способа:

  1. Экспорт перед установкой (флаг -E сохраняет переменные окружения при sudo):
    TIMEZONE=Europe/Moscow SWAP_SIZE_MB=4096 sudo -E ./install.sh
    
  2. Правка config/defaults.conf — измените строки TIMEZONE, SWAP_SIZE_MB, SWAP_RAM_THRESHOLD_MB и запустите установку обычным образом.
  3. Этот модуль не задаёт интерактивных вопросов по своим переменным — их берут из окружения или defaults.conf. Часовой пояс и параметры swap в мастере установки не спрашиваются.

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

module_verify считает модуль успешным, если в системе присутствуют команды curl и gpg.

Ручные проверки:

# Часовой пояс и синхронизация времени
timedatectl
# Ожидается строка «Time zone: <ваш TZ>» и «System clock synchronized: yes»

# Swap (если создавался)
swapon --show
free -h
# В строке Swap должен быть указан объём

# Запись в /etc/fstab
grep swap /etc/fstab

# Общая диагностика — строки Диск / RAM / Swap / Обновления
sudo mitdev doctor

В выводе mitdev doctor при настроенном swap строка «Swap» будет зелёной с указанием объёма; если swap не создавался (RAM хватает или контейнер) — будет предупреждение «Swap: не настроен», это нормально.

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

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

Симптом Причина Что сделать
swap пропущен в контейнере LXC/OpenVZ не разрешает управление подкачкой это ожидаемо; при необходимости настройте swap на уровне хоста контейнера
Swap не создан на VPS RAM ≥ SWAP_RAM_THRESHOLD_MB если swap всё же нужен — поднимите порог или создайте вручную (см. рецепт выше)
apt update падает нет сети / недоступны зеркала проверьте DNS и доступ в интернет; модуль сам делает 3 повтора
Неверное время в логах не задан TIMEZONE или нет timedatectl выставьте пояс вручную: sudo timedatectl set-timezone …
fallocate не сработал ФС не поддерживает fallocate модуль сам переключается на dd; если и это упало — не хватает места на диске

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

Модуль уже закрывает: применение свежих обновлений безопасности при установке, корректные права 600 на swap-файл (его содержимое не читается посторонними), синхронизацию времени (нужна для валидных TLS и корректных логов аудита).

Остаётся на клиенте: регулярно повторять обновления (sudo mitdev update) — модуль обновляет систему только в момент установки; настройка автоматических обновлений безопасности выходит за рамки этого модуля.

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

См. также