492e226e54
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
62 lines
4.0 KiB
Bash
Executable File
62 lines
4.0 KiB
Bash
Executable File
#!/bin/sh
|
||
# Первая загрузка сервера, установленного с образа Bridge&Join. Спрашивает ключ продукта на консоли;
|
||
# без ключа ставит ядро bj с образа (/var/lib/bj/bundle), а ключ вводится в браузере на первой
|
||
# странице настройки. Пока bj не установлен, вопрос повторяется при каждой загрузке (с таймаутом),
|
||
# адрес и подсказки всегда есть на экране входа (bj-welcome).
|
||
set -u
|
||
MARK=/var/lib/bj/.bj/installed-from-iso
|
||
SERVER=https://lic.zetit.ru
|
||
CHANNEL=stable
|
||
BUNDLE=/var/lib/bj/bundle
|
||
[ -s /etc/bj/channel ] && CHANNEL=$(tr -d ' \n' < /etc/bj/channel)
|
||
finish() {
|
||
mkdir -p "$(dirname "$MARK")" && date -Iseconds > "$MARK"
|
||
systemctl disable bj-firstboot.service >/dev/null 2>&1
|
||
[ -x /usr/local/sbin/bj-welcome ] && /usr/local/sbin/bj-welcome
|
||
}
|
||
urls() { ip -4 -o addr show scope global 2>/dev/null | awk '{split($4,a,"/"); printf " http://%s:8080%s\n", a[1], "'"$1"'"}'; }
|
||
clear
|
||
printf '\n Bridge&Join: установка на сервер\n ────────────────────────────────────────────────────────────\n'
|
||
printf ' Debian установлен. Осталось установить bj.\n\n'
|
||
if [ -f "$BUNDLE/manifest.json" ]; then
|
||
printf ' Ключ продукта (BJ-XXXX-XXXX-XXXX) есть в портале клиента %s/portal/.\n' "$SERVER"
|
||
printf ' Вводить его здесь необязательно: нажмите Enter — ядро bj установится с образа,\n а ключ вы введёте в браузере на первой странице настройки (там его удобно вставить).\n\n'
|
||
else
|
||
printf ' Нужен ключ продукта (BJ-XXXX-XXXX-XXXX): он есть в портале клиента %s/portal/\n\n' "$SERVER"
|
||
fi
|
||
for i in $(seq 1 30); do
|
||
curl -fsS -m 5 -o /dev/null "$SERVER/healthz" && break
|
||
[ "$i" = 1 ] && printf ' Жду сеть и связь с %s…\n' "$SERVER"
|
||
sleep 2
|
||
done
|
||
while true; do
|
||
CODE=""
|
||
if [ -f "$BUNDLE/manifest.json" ]; then
|
||
read -t 120 -r -p " Ключ продукта (Enter — установить с образа, ключ ввести в браузере): " CODE || true
|
||
else
|
||
read -t 120 -r -p " Ключ продукта (Enter — установить позже): " CODE || true
|
||
fi
|
||
CODE=$(printf '%s' "${CODE:-}" | tr -d ' ' | tr '[:lower:]' '[:upper:]')
|
||
if [ -z "$CODE" ]; then
|
||
if [ -f "$BUNDLE/manifest.json" ]; then
|
||
if /usr/local/sbin/bj-installer install --bundle "$BUNDLE" --server "$SERVER" --channel "$CHANNEL"; then
|
||
finish
|
||
printf '\n Ключ продукта спросит первая страница настройки в браузере:\n'; urls /first-run; printf '\n'
|
||
read -t 60 -r -p " Нажмите Enter, чтобы перейти к экрану входа. " _ || true
|
||
exit 0
|
||
fi
|
||
printf '\n Установка с образа не завершилась. Подробности выше; повторить:\n sudo bj-installer install --bundle %s\n\n' "$BUNDLE"
|
||
sleep 5; exit 0
|
||
fi
|
||
printf '\n Установка bj отложена. Вопрос повторится при следующей загрузке; вручную:\n sudo bj-installer install --code КЛЮЧ-ПРОДУКТА\n\n'
|
||
sleep 3
|
||
exit 0
|
||
fi
|
||
if /usr/local/sbin/bj-installer install --code "$CODE" --server "$SERVER" --channel "$CHANNEL"; then
|
||
finish
|
||
read -t 60 -r -p " Нажмите Enter, чтобы перейти к экрану входа. " _ || true
|
||
exit 0
|
||
fi
|
||
printf '\n Установка не завершилась. Проверьте ключ продукта и сеть и попробуйте ещё раз.\n\n'
|
||
done
|