Коротко. Stage-2 (initialize) поднимает management-слой: пакеты, MongoDB, marvinweb, task manager. Запускает его человек — сервис marvin_install.service продуктом не регистрируется, это задумка, а не дефект. Одна ошибка обходится дорого: если на converged-ноде не отработал --init-federated, федеративная БД и /federated/ не разворачиваются, и install-ng -i падает с No suitable management server found; догнать это повторным запуском нельзя.
1. Что делает stage-2
Две фазы, обе видны в логе как 1/2 BASE и 2/2 MARVIN:
initialize.py— базовая часть: репозиторий, базовые пакеты (marvinbase,marvintaskmgr,mcore).initialize_marvin.py— ansible-плейбуки локально: пакетный репозиторий, management system, базаmanagement_model, веб-приложения, task manager; пишетinitial_environment.json, переносит upgrade-архив.
После stage-2 есть работающий Marvin с моделью и task manager. S3 и storage на этом этапе ещё нет —
это stage-3 (install-ng). install-ng без stage-2 падает machine.cfg not found: stage-2 —
обязательный bootstrap, а не опция.
Порядок плейбуков внутри 2/2 фиксирован: пакетный репозиторий → machine.yml (пользователи, SSL,
службы) → mongodb.yml (база management_model с самоподписанным CA) → marvinweb.yml →
marvintaskmgr.yml. В initial_environment.json попадают сертификаты и ключ модели, главный
секрет окружения, версия продукта и список дополнительных пакетов. Этот файл — не отчёт, а вход
для stage-3: если его
нет, следующий этап нечего импортировать. Отдельно отметим: база метаданных и модель живут на
каждой ноде кластера, поэтому stage-2 проходится на каждой mgmt-ноде, а не только на первой.
2. Предусловие: вы на диске, а не в live
findmnt / # /dev/md4 (или md3 в другой раскладке), НЕ overlay
id sysadmin # учётная запись существует
hostname # <NODE_HOSTNAME>
Если корень — overlay//cow, вы всё ещё в live-среде: всё, что создаст initialize, уедет вместе
с перезагрузкой. Возврат к stage-1.
3. Запуск: вручную и в терминале
marvin_install.service не регистрируется — продукт ждёт, что оператор сам запустит установку
после ребута. Штатный путь для человека:
sudo /usr/bin/marvin_install
Скрипт делает всё в фоне и занимает по нашим наблюдениям 10–20 минут. Не запускать его через
systemd-юнит с Type=forking — сломается таймаут. После завершения /usr/bin/marvin_install
самоудаляется, а результат пишется в /tmp/marvin_initialize.rc.
Внутри обёртка передаёт управление initialize.py с параметрами дистрибутива и локального
репозитория (--distro, --repo=/opt/packages). Репозиторий продукта при этом должен быть
доступен: без него базовые пакеты не установятся, и фаза BASE упадёт на apt-get. Если
установка идёт в закрытом контуре, репозиторий поднимается локально заранее — до запуска
marvin_install.
Запускать stage-2 повторно «на всякий случай» бессмысленно: скрипт уже удалён, а окружение
помечено инициализированным. Если что-то пошло не так, разбираться надо по deploy.log, а не
перезапуском.
4. --init-federated: почему это критично
Флаг --init-federated разворачивает федеративную БД (federated_model) и location /federated/
в nginx. Без него на converged-ноде:
- в логе нет шага
Deploy federated_model database; /federated/_status/отвечает404;install-ng -iпадает:federated.No suitable management server found.
Догнать позже нельзя: повторный запуск видит environment already initialized и выходит с 0,
ничего не делая; удаление окружения через API отвечает 500; ручная сборка mongod/nginx
нештатна и неидемпотентна. То есть пропущенный флаг = чистый старт с live, без «дожима».
На чистом converged-прогоне порядок такой: environment.json → stage-2 с федерацией →
install-ng без -S. Почему именно без -S — в статье
Федерация: путь A и B.
5. Маркеры готовности
tail -f /opt/ampli/var/log/marvin/deploy.log
Признаки успеха — все вместе:
- в конце
deploy.logстоитDone, пройдены шаги отDeploy package repository serverдоMoving upgrade archive; - создан
/home/marvin/initial_environment.json; - upgrade-архив лежит в
/home/marvin; /usr/bin/marvin_installисчез, появился/tmp/marvin_initialize.rc;- живы процессы:
ps -ef | grep -E "mongod|uwsgi.*marvinweb|taskmanager".
6. Проверка management-слоя
curl -sk https://localhost:8443/ # ответ 400 «no SSL cert» — это НОРМА
curl -sk https://localhost:8443/model/_status/
ls -la /opt/ampli/apps/marvinbase/tools/install-ng.py
8443отвечает: marvinweb поднят.400без клиентского сертификата — ожидаемое поведение, не ошибка./model/_status/→200за десятки миллисекунд. Это гейт перед stage-3: если ответ медленный (секунды и больше), модель ещё не готова, иinstall-ngбудет выглядеть «зависшим».install-ng.pyна месте — можно переходить к очереди и stage-3.
Дополнительно, если нужен контроль федерации:
curl -sk https://localhost:8443/federated/_status/ \
-w '\nHTTP=%{http_code} time=%{time_total}s\n'
200 и время меньше 50 мс. 404 — федерация не развёрнута (см. п. 4); десятки секунд —
topology-hang, порт/репликасет не тот.
7. Логи и типовые отказы
| Симптом | Что смотреть |
|---|---|
| скрипт завершился, модели нет | deploy.log на failed=; rc в /tmp/marvin_initialize.rc |
machine.cfg not found на stage-3 |
stage-2 не дошёл до конца |
/federated/_status/ → 404 |
stage-2 без --init-federated |
| повторный запуск «ничего не делает» | guard environment already initialized — это не сбой |
ImportError: taskmgr.constants |
запуск initialize_marvin.py не из venv marvintaskmgr |
| модель отвечает секундами | mongod не поднялся/тормозит; смотреть процессы и логи mongod |
/tmp/ing.log и deploy.log — разные файлы: первый относится к stage-3, второй к stage-2. Не
искать следы initialize в ing.log.
Две «ложные тревоги», на которые не стоит тратить время: пустой deploy.log сразу после полуночи
— это logrotate, смотреть предыдущий файл с датой; отсутствие пакета samurai на ранней фазе —
норма, он появляется на stage-3. Обе картины выглядят как «установка встала», но установка при
этом идёт.
8. Источники
- Software Documentation Center (дата доступа 2026-11-07)
- Наша практика (обезличено): прогоны stage-2 на 3-нодных стендах; разбор пропуска
--init-federated. - Обновлено: 2026-11-07.