Установка: приветственный экран консоли (bj-welcome: адрес веб-входа и состояние, всегда), ядро с образа без ключа продукта (--bundle), ключ продукта на первой веб-странице, повтор вопроса при каждой загрузке
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
This commit is contained in:
Executable
+66
@@ -0,0 +1,66 @@
|
||||
#!/bin/sh
|
||||
# bj-welcome — приветственный экран на консоли до входа (/etc/issue.d/10-bj.issue):
|
||||
# адреса веб-входа и состояние bj. Вызывается службой bj-welcome при загрузке и по таймеру,
|
||||
# а также установщиком после шагов, меняющих состояние. Читает только локальные файлы.
|
||||
set -u
|
||||
ISSUE=/etc/issue.d/10-bj.issue
|
||||
BJ=/opt/bj/bj-server
|
||||
SETUP=/var/lib/bj/.bj/setup.json
|
||||
USERS=/var/lib/bj/.bj/users.json
|
||||
FIRSTRUN=/var/lib/bj/.bj/first-run.json
|
||||
PORT=8080
|
||||
HOST=$(hostname 2>/dev/null || echo bj)
|
||||
ADDRS=$(ip -4 -o addr show scope global 2>/dev/null | awk '{split($4,a,"/"); print a[1]}' | tr '\n' ' ')
|
||||
[ -z "$ADDRS" ] && ADDRS="<адрес не получен: проверьте сеть>"
|
||||
url() { for a in $ADDRS; do case "$a" in \<*) printf ' http://%s:%s%s\n' "<IP сервера>" "$PORT" "$1";; *) printf ' http://%s:%s%s\n' "$a" "$PORT" "$1";; esac; done; }
|
||||
lic=""
|
||||
if [ -r "$SETUP" ]; then
|
||||
lic=$(python3 - "$SETUP" 2>/dev/null <<'PY'
|
||||
import json,sys
|
||||
try:
|
||||
d=json.load(open(sys.argv[1])); l=d.get("license",{})
|
||||
print("да" if l.get("key") else "нет", l.get("last_msg","")[:60])
|
||||
except Exception: print("")
|
||||
PY
|
||||
)
|
||||
fi
|
||||
{
|
||||
printf '\n ┌────────────────────────────────────────────────────────────────┐\n'
|
||||
printf ' │ Bridge&Join (bj) — шлюз переводов ценных бумаг M2M / НРД │\n'
|
||||
printf ' └────────────────────────────────────────────────────────────────┘\n'
|
||||
printf ' Сервер: %s Адреса: %s\n\n' "$HOST" "$ADDRS"
|
||||
if [ ! -x "$BJ" ]; then
|
||||
printf ' Состояние: bj НЕ УСТАНОВЛЕН.\n'
|
||||
if [ -f /var/lib/bj/bundle/manifest.json ]; then
|
||||
printf ' Установка с образа (ключ продукта — потом, в браузере):\n sudo bj-installer install --bundle /var/lib/bj/bundle\n'
|
||||
printf ' Или с ключом продукта: sudo bj-installer install --code BJ-XXXX-XXXX-XXXX\n'
|
||||
else
|
||||
printf ' Установка: sudo bj-installer install --code BJ-XXXX-XXXX-XXXX (ключ — в портале клиента)\n'
|
||||
fi
|
||||
elif ! grep -q '"login"' "$USERS" 2>/dev/null; then
|
||||
printf ' Состояние: bj установлен, ПЕРВИЧНАЯ НАСТРОЙКА НЕ ВЫПОЛНЕНА.\n'
|
||||
printf ' Откройте в браузере на своём компьютере:\n'; url /first-run
|
||||
if [ -f "$FIRSTRUN" ]; then
|
||||
printf ' Введите одноразовый код, показанный установщиком. Код потерян или истёк —\n новый код: sudo bj-installer first-run-code\n'
|
||||
else
|
||||
printf ' Нужен одноразовый код: sudo bj-installer first-run-code\n'
|
||||
fi
|
||||
case "$lic" in да*) ;; *) printf ' Ключ продукта ещё не введён — его спросит первая страница.\n';; esac
|
||||
else
|
||||
printf ' Состояние: bj работает. Вход в веб-интерфейс:\n'; url /admin
|
||||
case "$lic" in
|
||||
да*) printf ' Лицензия: %s\n' "${lic#да }";;
|
||||
*) printf ' Лицензия НЕ АКТИВИРОВАНА: введите ключ продукта в «Настройка → Лицензия».\n';;
|
||||
esac
|
||||
fi
|
||||
printf '\n Вход в консоль сервера — учётной записью ОС (для обслуживания). Веб-вход — по адресу выше.\n\n'
|
||||
} > "$ISSUE.tmp"
|
||||
if ! cmp -s "$ISSUE.tmp" "$ISSUE" 2>/dev/null; then
|
||||
mv -f "$ISSUE.tmp" "$ISSUE"
|
||||
# обновить приглашение на tty1, если там никто не вошёл
|
||||
if command -v systemctl >/dev/null && ! who 2>/dev/null | grep -qE '^\S+\s+tty1\b'; then
|
||||
systemctl try-restart getty@tty1.service 2>/dev/null || true
|
||||
fi
|
||||
else
|
||||
rm -f "$ISSUE.tmp"
|
||||
fi
|
||||
Reference in New Issue
Block a user