Запуск без вопросов

Любой ответ можно передать ключом. Когда переданы все нужные значения, установщик не спрашивает ничего — это и есть режим для сценариев развёртывания.

Три режима, которые легко перепутать

Ключ Что делает

-y, --usedefaults

Спрашивает только то, для чего нет значения по умолчанию. Экран подтверждения остаётся.

--non-interactive

Не спрашивает ничего. Если значения не хватает, останавливается с кодом 2 и перечисляет недостающие ключи. Экран подтверждения не блокирует.

--dry-run

Проходит весь путь и печатает каждую команду, но не выполняет ни одной. При запуске по ssh относится к целевому хосту: обёртка копирует поставку и запускает установщик по-настоящему, а пробным становится прогон на сервере — план строит он.

--non-interactive включает и -y. Комбинация --non-interactive --dry-run — обычный способ проверить команду перед настоящим запуском.

Файл ответов

Самый простой способ получить корректный набор ключей — пройти мастер один раз вручную. Каждый прогон записывает рядом с логом файл .params со всеми собранными значениями:

logs/install_20260101-120000.params

Этот файл можно передать установщику обратно:

bash era/scripts/install.sh --answers-file=logs/install_20260101-120000.params

Значения из файла подставляются как ответы; всё, чего в нём нет, спрашивается.

На экране подтверждения их можно исправить: пункт «Изменить…​» возвращает к выбранному экрану, и на повторном заходе мастер снова задаёт вопросы — в том числе о том, что пришло из файла или командной строки. Прежние значения подставлены умолчаниями, так что до нужного вопроса достаточно нажимать Enter. Исправленное отмечается в сводке источником исправлено.

Ключи командной строки сильнее файла — так удобно менять одно-два значения:

bash era/scripts/install.sh --answers-file=srv1.params \
     --ipaddress=192.168.0.11 --srvname=srv2 --non-interactive

Файл можно записать и не устанавливая ничего: на экране подтверждения выберите «Сохранить ответы», либо задайте --save-answers=<путь>.

В файле ответов пароли лежат в открытом виде. Он создаётся с правами 0600. Не кладите его в репозиторий и не копируйте на общие каталоги. Чтобы держать пароли отдельно, используйте --secrets-file.

Готовая команда повтора

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

logs/install_20260101-120000.cmd

Она же печатается в конце установки, но там пароли скрыты. В файле они настоящие, права — 0600.

Эта команда — рабочий способ поставить десять одинаковых серверов: возьмите её после первой установки и меняйте адрес и имя.

Если сервера входят в одну систему, менять адрес вручную не нужно: перечислите их на экране 10 при установке мастера, и установщик сам напечатает команду для каждого — с ролью узла, адресом mic и базой мастера. Эти команды дописываются в тот же файл .cmd. См. era_installer/install-local.adoc#era-installer-install-local-addservers.

Десять серверов

#!/bin/bash
set -euo pipefail

BASE="--answers-file=./srv-base.params --non-interactive"

while IFS=' ' read -r host ip name; do
  printf '=== %s\n' "$host"
  bash install_ssh.sh $BASE \
       --host="$host" --user=user \
       --ipaddress="$ip" --srvname="$name" \
    || printf 'СБОЙ на %s, код %s\n' "$host" "$?"
done <<'HOSTS'
192.168.0.11 192.168.0.11 srv1
192.168.0.12 192.168.0.12 srv2
192.168.0.13 192.168.0.13 srv3
HOSTS

Проверьте сценарий с --dry-run, прежде чем запускать по-настоящему: тогда каждая команда покажет свой план и ничего не изменит.

Коды возврата позволяют отличить причину сбоя — см. era_installer/reference-exit-codes.adoc#era-installer-exit-codes. Код 3 означает, что предпроверки не прошли и сервер не тронут; код 5 — что установка оборвалась на середине и сервер изменён частично.

Пароли отдельно от остальных ответов

bash era/scripts/install.sh --answers-file=srv.params --secrets-file=/root/era.secrets

Формат файла секретов тот же ключ=значение, что и у файла ответов, но в нём только пароли. Так основной файл ответов можно хранить рядом со сценарием, а пароли брать из места с ограниченным доступом.

Пример файла /root/era.secrets
# Пароли платформы. Права на файл -- 0600.
pgerapwd=S3cret_era_pwd
pgpostgrespwd=S3cret_admin_pwd

# Нужен только при репликации (--usereplic=y).
pgreplicapwd=S3cret_replica_pwd

# Пароль системного пользователя postgres; задаётся, если он вам нужен.
pgospwd=S3cret_os_pwd

Правила разбора — те же, что у файла ответов:

  • по одной паре ключ=значение в строке;

  • ключ — это имя параметра из колонки «Имя» справочника (pgerapwd), а не ключ командной строки (--pgerapwd);

  • строки, начинающиеся с #, и пустые пропускаются;

  • пробелы вокруг = отбрасываются, значением считается всё после первого = — пароль может содержать =, но не может начинаться или заканчиваться пробелом;

  • кавычки не нужны и не снимаются: pgerapwd="abc" задаст пароль вместе с кавычками.

В файле секретов принимаются только те ключи, что помечены в справочнике как секретные:

Ключ Что это за пароль

pgerapwd

Пароль пользователя базы, под которым в неё ходит платформа (--pgpostgresuser, по умолчанию platformpgadmin).

pgpostgrespwd

Пароль суперпользователя postgres.

pgreplicapwd

Пароль пользователя репликации (--pgreplicauser). Нужен при --usereplic=y и при установке реплики.

pgospwd

Пароль системного пользователя postgres в хосте. Задаётся, только если он вам нужен: установщик его не требует.

Остальные ключи установщик не примет и скажет об этом: несекретный параметр в файле секретов — почти наверняка ошибка, и принимать его молча значит её скрыть. Значения из файла секретов имеют тот же вес, что переданные ключом командной строки, и перекрывают файл ответов.

Файл читает только установщик; в лог пароли не попадают — там на их месте ••••••. Права на файл он не проверяет и не меняет: ставьте 0600 сами.

При установке по ssh секреты передаются на сервер отдельно: они пишутся во временный файл под umask 077 и удаляются после запуска, в том числе если установка оборвалась. В аргументах командной строки они не появляются — иначе их увидел бы любой, кто посмотрит список процессов.

Что проверить перед массовым запуском

  1. --dry-run на одном сервере: план совпадает с ожиданиями.

  2. Уникальность постфикса, если на сервере уже есть другой инстанс.

  3. Адрес --ipaddress существует на целевом сервере.

  4. Место на диске: предпроверка предупреждает, но не останавливает.

  5. Пароли не остались умолчаниями из реестра.