Установка на удалённом сервере
Обычный способ: команда запускается на вашей машине, платформа встаёт на сервере.
bash install_ssh.sh --host=192.168.0.10 --user=user
Что происходит по шагам
-
Локальные предпроверки. Кодировка терминала, наличие псевдографики.
-
Опрос данных подключения — адрес, пользователь, порт, ключ.
-
Соединение и предпроверки удалённого сервера: ОС, версия bash, права, свободное место, занятость портов, наличие контейнера с таким именем. Здесь же спрашивается пароль ssh, если вход не по ключу.
-
План доставки: что будет скопировано, что запущено и на каком сервере. Он печатается на экран и в лог, но не спрашивает подтверждения: обёртка только доставляет файлы и запускает установщик, а согласие на это вы уже дали, запустив её. Отдельно спрашивается каждый крупный образ — перед самым копированием. Опрос идёт дальше, на целевом сервере — умолчания зависят от его ОС (пути PostgreSQL, имена пакетов), поэтому вычисляются там.
-
Доставка:
rsyncкопирует установщик, затем отдельно — крупные файлы образов, чтобы их можно было не пересылать повторно. -
Запуск: на сервере выполняется
era/scripts/install.sh, его мастер работает в вашем терминале. -
Забор логов: лог удалённой стороны копируется к вам в
logs/remote/<хост>/.
Обе половины говорят на одном языке: выбранный язык передаётся на сервер вместе с остальными ключами «как запускать».
Экраны мастера
Опрос установки идёт на целевом сервере — после подтверждения доставки и копирования файлов, а не сразу после подключения. Экраны одинаковы для локальной и удалённой установки. Ключи, заданные в командной строке обёртки, туда передаются, и о них сервер не переспрашивает.
| № | Экран | О чём спрашивает |
|---|---|---|
0 |
Подключение |
Только в ssh-режиме: адрес, порт, пользователь, ключ. |
1 |
Сервер и роль |
Адрес платформы, постфикс, каталог данных, имя сервера, мастер или узел, домен или адреса mic, ключ PSK. |
2 |
Пакеты и сеть |
Ставить ли пакеты из интернета, прокси. |
3 |
PostgreSQL — режим |
Ставить ли базу, в контейнере или в хосте, мастер или реплика, репликация, образ с Docker Hub. |
4 |
PostgreSQL — доступ |
Адрес сервера БД, порт, пользователь платформы и пароли, пользователь репликации, группа ОС. |
5 |
PostgreSQL — каталоги |
Каталог кластера, каталог резервных копий, очищать ли существующий. |
6 |
Тома платформы |
Двенадцать каталогов, монтируемых в контейнер. Умолчания выводятся из каталога данных и постфикса. |
7 |
NFS |
Клиентские каталоги, роль сервера или клиента, маска сети, экспортируемые каталоги. |
8 |
Параметры ядра |
Переиспользование соединений в |
9 |
Дополнительно |
Появляется только с ключом |
10 |
Дополнительные серверы |
Только у мастера: планируется ли установка других серверов, сколько их, имя и адрес каждого. Сами серверы здесь не устанавливаются — в конце будут показаны готовые команды для каждого из них. |
Экран пропускается целиком, если ни один его вопрос не нужен при текущих ответах. Например, экран 5 не появится, если базу вы не ставите.
Управление во время опроса
| Клавиша | Действие |
|---|---|
kbd:[Enter] |
Принять значение по умолчанию (оно показано в скобках). |
|
Вернуться к предыдущему вопросу и изменить ответ. |
|
Подсказка по текущему вопросу. |
|
Показать всё, что уже введено. |
kbd:[Ctrl+C] |
Прервать. Ничего не изменено. |
Кнопки в псевдографике называют то, что произойдёт по нажатию. На экранах с вопросом это «Далее» и «Назад». На экранах, где ничего не вводят — предпроверки, сводка, план, отчёт, — кнопка тоже называется «Далее»: она ведёт к следующему шагу. «ОК» остаётся только на последнем окне запуска — после сохранения ответов, когда продолжения не будет.
В псевдографическом режиме способ выйти назван в каждом окне, и зависит он от инструмента:
-
whiptail(Debian, Ubuntu, Linux Mint, Astra Linux и другие производные Debian) — kbd:[Esc]; -
dialog(остальные системы) — кнопка «Выйти», она есть на каждом экране.
Выход завершает работу немедленно и не сохраняет ничего: ни файла ответов, ни команды повтора, ни лога этого запуска. Сервер при этом не изменяется — до подтверждения установщик его и не трогает.
Разделение не произвольное.
В библиотеке newt, на которой построен whiptail, kbd:[Esc] не является штатным хоткеем закрытия формы: он работает только там, где сборка содержит соответствующий патч — в deb-подобных дистрибутивах.
На остальных системах окно whiptail не закрыть вовсе, поэтому там берётся dialog, у которого есть третья кнопка.
Если dialog не установлен, установщик работает в текстовом режиме.
|
Возврат работает и между экранами: с первого вопроса экрана < уводит на последний вопрос предыдущего.
Если изменённый ответ меняет ветку — скажем, вы переключили базу с контейнера на хост — вопросы, потерявшие смысл, будут заданы заново.
Экран подтверждения
Он показывается на целевом сервере — там же, где идёт опрос. У обёртки своего экрана подтверждения нет: подтверждать ей нечего, она только копирует файлы и запускает установщик, а про каждый крупный образ спрашивает отдельно перед копированием.
Показывает три вещи:
-
сводку введённого — параметр, значение и откуда оно взялось: из командной строки, из файла ответов, по умолчанию или от вас;
-
план — пронумерованный список того, что будет сделано, и отдельно список системных файлов, которые будут изменены;
-
предупреждения предпроверок, если они есть.
Доступные действия:
| Пункт | Что делает |
|---|---|
Продолжить |
Переход к фазе применения. |
Изменить… |
Возврат на выбранный экран мастера. На повторном заходе спрашивается и то, что пришло из файла ответов или ключом: прежнее значение подставлено умолчанием, исправленное отмечается источником |
Показать пароли |
Снимает маскировку в сводке. Пароли скрыты, потому что экран остаётся в прокрутке терминала. |
Сохранить ответы |
Записывает файл ответов и выходит, ничего не меняя. |
Показать команду |
Печатает готовую неинтерактивную команду с теми же значениями. |
Отмена |
Выход. Сервер не изменён. |
Что показывается в конце
Всё, что печатает установщик на целевом сервере, видно и здесь: вывод идёт через ssh без изменений. Поэтому после применения вы увидите ту же форму «что изменилось на сервере» и те же команды для этого сервера, что и при локальном запуске — см. era_installer/install-local.adoc#era-installer-install-local-changes.
Отдельно обёртка забирает лог с целевого хоста к себе, в logs/remote/<адрес>/: разбирать отказ, заходя на сервер вручную, не придётся.
Лог забирается и после пробного прогона: он выполняется на той же стороне, и разбирать его нужно так же.
Примеры
Мастер с базой в контейнере, без единого вопроса:
bash install_ssh.sh --non-interactive \
--host=192.168.0.10 --user=user \
--ipaddress=192.168.0.10 --srvname=srv1 \
--master=y --masterdomain=example.ru \
--dopginstall=y --pgmode=d --usedockerhubpgimage=y
Узел, подключаемый к уже развёрнутому мастеру:
bash install_ssh.sh --non-interactive \
--host=192.168.0.11 --user=user \
--ipaddress=192.168.0.11 --srvname=srv2 \
--master=n --micaddress=mic@192.168.0.10 \
--dopginstall=n --pghost=192.168.0.10
Нестандартный порт ssh и вход по ключу:
bash install_ssh.sh --host=192.168.0.10 --port=2222 \
--user=user --sshkey=~/.ssh/id_ed25519
Посмотреть план и не менять ничего:
bash install_ssh.sh --dry-run --host=192.168.0.10 --user=user
--dry-run относится к целевому хосту, а не к обёртке: план строит сам сервер, и показать его может только он.
Поэтому обёртка свою работу делает по-настоящему — копирует поставку в /tmp/era_installer и запускает там установщик с тем же ключом, — а сервер при этом не изменяется.
Поставка остаётся в /tmp и исчезает при перезагрузке.