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, БД) ставят отдельные модули.
Когда включать и когда не нужен
- Всегда включён — обязательный модуль, запускается первым при любой установке.
- Swap создаётся только если одновременно: (1) swap ещё не настроен и (2) RAM меньше порога
SWAP_RAM_THRESHOLD_MB(по умолчанию 2048 МБ). Если памяти достаточно — swap не трогается. - В контейнерах (LXC/OpenVZ) swap намеренно пропускается: контейнер обычно не имеет права управлять подкачкой, и попытка
swaponзавершилась бы ошибкой. - Обновление системы и базовые пакеты ставятся всегда, независимо от swap.
Зависимости и требования
- Отдельных модулей не тянет — сам является базой для остальных.
- Нужен доступ в интернет к репозиториям дистрибутива (для
apt update/dnf makecacheи загрузки пакетов). - Мультидистро: на Debian/Ubuntu работает через
apt-get, на RHEL-семействе (Rocky/Alma/Fedora) — черезdnf/yum. Часть debian-специфичных пакетов (apt-transport-https,software-properties-common,lsb-release) на других семействах автоматически пропускается или заменяется аналогами. - Для swap нужно свободное место на диске под файл размером
SWAP_SIZE_MB(по умолчанию 2 ГБ) и работающий не-контейнерный хост.
Что именно делает
Пошагово, в порядке выполнения module_install:
- Устанавливает
DEBIAN_FRONTEND=noninteractive, чтобы пакеты не задавали интерактивных вопросов. - Обновляет индекс пакетов —
apt-get update(илиdnf makecache). Выполняется с 3 повторами при сбое сети. - Обновляет установленные пакеты —
apt-get dist-upgrade(илиdnf upgrade), с сохранением текущих конфигов (--force-confold). - Ставит базовые пакеты:
ca-certificates,curl,gnupg,lsb-release,apt-transport-https,software-properties-common,openssl. - Часовой пояс и NTP — если задана переменная
TIMEZONEи в системе естьtimedatectl:timedatectl set-timezone <TIMEZONE>и включение синхронизации времениtimedatectl set-ntp true. - Swap (
_system_ensure_swap) — проверяет условия и при необходимости: создаёт файлSWAP_FILEчерезfallocate(при неудаче — черезdd), выставляет права600, форматируетmkswap, включаетswapon, регистрирует откат и добавляет строку в/etc/fstab(чтобы swap подключался после перезагрузки). - Отмечает модуль выполненным (
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 ГБ — нет.
Как переопределить настройки
Три способа:
- Экспорт перед установкой (флаг
-Eсохраняет переменные окружения приsudo):TIMEZONE=Europe/Moscow SWAP_SIZE_MB=4096 sudo -E ./install.sh - Правка
config/defaults.conf— измените строкиTIMEZONE,SWAP_SIZE_MB,SWAP_RAM_THRESHOLD_MBи запустите установку обычным образом. - Этот модуль не задаёт интерактивных вопросов по своим переменным — их берут из окружения или
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: не настроен», это нормально.
Типовые задачи
- Изменить часовой пояс уже после установки:
sudo timedatectl set-timezone Europe/Moscow - Создать swap вручную, если модуль его пропустил (не контейнер):
sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile sudo mkswap /swapfile && sudo swapon /swapfile echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab - Проверить, что обновления применились:
sudo mitdev update # или sudo apt-get update && sudo apt-get dist-upgrade - Увеличить swap на большем размере: удалите старый (
sudo swapoff /swapfile && sudo rm /swapfile, уберите строку из/etc/fstab) и создайте заново с нужным размером командами выше.
Частые ошибки
| Симптом | Причина | Что сделать |
|---|---|---|
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) — модуль обновляет систему только в момент установки; настройка автоматических обновлений безопасности выходит за рамки этого модуля.
Откат и удаление
- Авто-откат при падении установки (
module_rollback): по сути no-op. Обновления системы и установку базовых пакетов откатывать нельзя — это сломало бы работающую систему. Единственное обратимое действие — swap — регистрируется в стеке отката в момент создания, поэтому при неудаче установки swap-файл снимается и убирается из/etc/fstabавтоматически. mitdev remove system: удаляет только то, что создал модуль, — swap-файл и его строку в/etc/fstab(swapoff+rm). Базовые пакеты, часовой пояс и системные обновления намеренно оставляются: их удаление способно сломать работающий сервер. Флаг--purgeздесь ничего дополнительно не удаляет.
См. также
- ../COMMANDS.md — команды
mitdev doctor,mitdev update,mitdev remove. - ../CONFIGURATION.md — полный список переменных.
- 02-user.md — следующий обязательный модуль (пользователь для деплоя).
- 11-utils.md — расширенный набор утилит поверх базовых пакетов.