From 45c18164ce6b06ae2be8b8e760754f49d9ff1341 Mon Sep 17 00:00:00 2001 From: zuevav Date: Mon, 5 Oct 2026 22:30:00 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D0=B0=D1=8F=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B0:=20=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=BA=D0=B0=20=D0=BF=D0=B0=D1=80=D0=BE=D0=BB=D0=B5=D0=B9?= =?UTF-8?q?=20=D0=B1=D0=B5=D0=B7=20=C2=AB=D1=80=D0=BE=D0=BC=D0=B1=D0=BE?= =?UTF-8?q?=D0=B2=C2=BB=20(=D0=BF=D0=BE=D0=B2=D1=82=D0=BE=D1=80=20=D1=81?= =?UTF-8?q?=D0=B8=D0=BC=D0=B2=D0=BE=D0=BB=D0=B0=20=E2=80=94=20=D0=B1=D0=B5?= =?UTF-8?q?=D0=B7=20tr,=20=D0=BE=D0=BD=20=D1=80=D0=B5=D0=B7=D0=B0=D0=BB=20?= =?UTF-8?q?UTF-8=20=D0=BF=D0=BE=20=D0=B1=D0=B0=D0=B9=D1=82=D0=B0=D0=BC),?= =?UTF-8?q?=20=D0=BA=D0=BE=D1=80=D0=BE=D1=87=D0=B5=20=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=BA=D0=B0=20=D0=BE=20=D0=BF=D0=B0=D1=80=D0=BE=D0=BB?= =?UTF-8?q?=D0=B5;=20=D0=B2=D0=BE=D0=BF=D1=80=D0=BE=D1=81=D1=8B=20=D0=BE?= =?UTF-8?q?=20=D0=BF=D0=BE=D1=81=D1=82=D0=BE=D1=8F=D0=BD=D0=BD=D0=BE=D0=BC?= =?UTF-8?q?=20=D0=B0=D0=B4=D1=80=D0=B5=D1=81=D0=B5=20=D0=B8=20=D0=BA=D0=BB?= =?UTF-8?q?=D1=8E=D1=87=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B4=D1=83=D0=BA=D1=82?= =?UTF-8?q?=D0=B0=20=D0=B6=D0=B4=D1=83=D1=82=20=D0=BE=D1=82=D0=B2=D0=B5?= =?UTF-8?q?=D1=82=D0=B0=20=D0=B1=D0=B5=D0=B7=20=D1=82=D0=B0=D0=B9=D0=BC?= =?UTF-8?q?=D0=B5=D1=80=D0=B0=20(=D1=8D=D0=BA=D1=80=D0=B0=D0=BD=20=D0=BD?= =?UTF-8?q?=D0=B5=20=D1=83=D1=85=D0=BE=D0=B4=D0=B8=D1=82=20=D0=B4=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D1=88=D0=B5=20=D1=81=D0=B0=D0=BC,=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=82=D0=BE=D1=80?= =?UTF-8?q?=20=D1=84=D0=BE=D1=82=D0=BE=D0=B3=D1=80=D0=B0=D1=84=D0=B8=D1=80?= =?UTF-8?q?=D1=83=D0=B5=D1=82)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi --- deploy/iso/bj-firstboot | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/deploy/iso/bj-firstboot b/deploy/iso/bj-firstboot index 9412254..6d6f947 100755 --- a/deploy/iso/bj-firstboot +++ b/deploy/iso/bj-firstboot @@ -1,7 +1,7 @@ #!/bin/bash # Первая загрузка сервера, установленного с образа Bridge&Join. Спрашивает ключ продукта на консоли; # без ключа ставит ядро bj с образа (/var/lib/bj/bundle), а ключ вводится в браузере на первой -# странице настройки. Пока bj не установлен, вопрос повторяется при каждой загрузке (с таймаутом), +# странице настройки. Пока bj не установлен, вопрос повторяется при каждой загрузке (вопросы ждут ответа без таймера), # адрес и подсказки всегда есть на экране входа (bj-welcome). set -u MARK=/var/lib/bj/.bj/installed-from-iso @@ -25,6 +25,7 @@ quiet_console FONT=/usr/local/share/bj/console.psf if [ -f "$FONT" ] && setfont "$FONT" 2>/dev/null; then export BJ_SCREEN_FONT=1; fi if [ "${BJ_SCREEN_FONT:-}" = 1 ]; then BOX_T='╔══'; BOX_B='╚══'; BOX_H='═'; else BOX_T='+=='; BOX_B='+=='; BOX_H='='; fi +rep() { local i s=""; for ((i = 0; i < $2; i++)); do s="$s$1"; done; printf '%s' "$s"; } # не tr: tr режет UTF-8 по байтам LOG=/var/log/bj/firstboot-install.log SCREEN=/usr/local/sbin/bj-firstboot-screen ACC_DONE=/var/lib/bj/.bj/os-accounts-set @@ -50,7 +51,7 @@ setup_accounts() { printf ' root_bj — администратор сервера (команды через sudo)\n user_bj — обычный вход (журналы, без прав администратора)\n' printf ' Работа с bj — в браузере; эти учётные записи нужны для обслуживания ОС.\n\n' printf ' Шаг 1 из 2 — пароли. Для каждой учётной записи предложен пароль:\n' - printf ' • Enter — оставить предложенный (на следующем экране его нужно будет записать или сфотографировать);\n' + printf ' • Enter — оставить предложенный (запишите его на следующем экране);\n' printf ' • или наберите свой (не короче 10 символов, при вводе не отображается) и Enter.\n\n' PA=$(askpw root_bj "$(genpw)"); PU=$(askpw user_bj "$(genpw)") printf 'root_bj:%s\nuser_bj:%s\n' "$PA" "$PU" | chpasswd @@ -65,8 +66,8 @@ setup_accounts() { # пароли учётных записей — крупно, с просьбой сфотографировать или записать: нигде не сохраняются show_accounts() { [ -n "$ACCOUNTS" ] || return 0 - printf '\n %s СФОТОГРАФИРУЙТЕ ИЛИ ЗАПИШИТЕ ЭТИ ПАРОЛИ %s\n\n%s\n\n' "$BOX_T" "$(printf '%*s' 24 '' | tr ' ' "$BOX_H")" "$ACCOUNTS" - printf ' %s они показаны только здесь и нигде не сохраняются %s\n' "$BOX_B" "$(printf '%*s' 14 '' | tr ' ' "$BOX_H")" + printf '\n %s СФОТОГРАФИРУЙТЕ ИЛИ ЗАПИШИТЕ ЭТИ ПАРОЛИ %s\n\n%s\n\n' "$BOX_T" "$(rep "$BOX_H" 24)" "$ACCOUNTS" + printf ' %s они показаны только здесь и нигде не сохраняются %s\n' "$BOX_B" "$(rep "$BOX_H" 14)" printf ' Вход в консоль — для обслуживания сервера; работа с bj — в браузере. Сменить пароль: passwd\n\n' } # пока не нажат Enter — экран не меняется (без таймера: пароли не должны пропасть, пока их не записали) @@ -99,7 +100,7 @@ if [ ! -f /var/lib/bj/.bj/network-asked ] && [ -x /usr/local/sbin/bj-network ] & mkdir -p /var/lib/bj/.bj && date -Iseconds > /var/lib/bj/.bj/network-asked printf '\n Сейчас адрес сервера: %s\n' "$(ip -4 -o addr show scope global 2>/dev/null | awk '{print $4}' | tr '\n' ' ')" # ответ цифрой: консоль начинает в английской раскладке, «д» без переключения не набрать - read -t 60 -r -p " Задать постоянный адрес (рекомендуется)? 1 — да, Enter — нет: " ANS < /dev/tty || ANS="" + read -r -p " Задать постоянный адрес (рекомендуется)? 1 — да, Enter — нет: " ANS < /dev/tty || ANS="" case "$ANS" in 1*|[дДyYlL]*) /usr/local/sbin/bj-network < /dev/tty ;; esac fi clear @@ -119,9 +120,9 @@ done while true; do CODE="" if [ -f "$BUNDLE/manifest.json" ]; then - read -t 120 -r -p " Ключ продукта (Enter — установить с образа, ключ ввести в браузере): " CODE || true + read -r -p " Ключ продукта (Enter — установить с образа, ключ ввести в браузере): " CODE < /dev/tty || true else - read -t 120 -r -p " Ключ продукта (Enter — установить позже): " CODE || true + read -r -p " Ключ продукта (Enter — установить позже): " CODE < /dev/tty || true fi CODE=$(printf '%s' "${CODE:-}" | tr -d ' ' | tr '[:lower:]' '[:upper:]') if [ -z "$CODE" ]; then