From 0ceabbeed8f709c19120e3761e692b76e6f52554 Mon Sep 17 00:00:00 2001 From: zuevav Date: Thu, 24 Sep 2026 17:20:25 +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=D0=B2=D0=BE?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D1=81=D1=8B=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5?= =?UTF-8?q?=20cloud-init,=20=D0=BA=D0=BE=D0=BD=D1=81=D0=BE=D0=BB=D1=8C=20?= =?UTF-8?q?=D0=B1=D0=B5=D0=B7=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B9=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8?= =?UTF-8?q?,=20=D0=BF=D0=BE=D0=B4=D1=81=D0=BA=D0=B0=D0=B7=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D1=88=D0=B0=D0=B3=D0=B0=D0=BC?= 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 | 9 ++++++++- deploy/iso/bj-firstboot.service | 3 ++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/deploy/iso/bj-firstboot b/deploy/iso/bj-firstboot index 8ba82ca..a7d5013 100755 --- a/deploy/iso/bj-firstboot +++ b/deploy/iso/bj-firstboot @@ -15,6 +15,10 @@ finish() { [ -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"'"}'; } +# Пока идут вопросы, сообщения загрузки на консоль не выводятся (ядро — только аварийные, +# systemd — без строк «[ OK ] Started …»), иначе они перемешиваются с текстом на экране. +quiet_console() { dmesg -n 1 2>/dev/null; kill -s RTMIN+21 1 2>/dev/null; sleep 2; } +quiet_console ACC_DONE=/var/lib/bj/.bj/os-accounts-set ACCOUNTS="" genpw() { local p=""; while [ ${#p} -lt 12 ]; do p="$p$(head -c 48 /dev/urandom | tr -dc 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789')"; done; printf '%s-%s-%s' "${p:0:4}" "${p:4:4}" "${p:8:4}"; } @@ -37,6 +41,9 @@ setup_accounts() { printf '\n Bridge&Join: учётные записи сервера\n ────────────────────────────────────────────────────────────\n' printf ' root_bj — администратор сервера (команды через sudo)\n user_bj — обычный вход (журналы, без прав администратора)\n' printf ' Работа с bj — в браузере; эти учётные записи нужны для обслуживания ОС.\n\n' + printf ' Шаг 1 из 2 — пароли. Для каждой учётной записи предложен пароль:\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 mkdir -p "$(dirname "$ACC_DONE")" && date -Iseconds > "$ACC_DONE" @@ -52,7 +59,7 @@ show_accounts() { setup_accounts clear printf '\n Bridge&Join: установка на сервер\n ────────────────────────────────────────────────────────────\n' -printf ' Система установлена. Осталось установить bj.\n\n' +printf ' Шаг 2 из 2 — установка bj. Система установлена, осталось поставить bj.\n\n' if [ -f "$BUNDLE/manifest.json" ]; then printf ' Ключ продукта (BJ-XXXX-XXXX-XXXX) есть в портале клиента %s/portal/.\n' "$SERVER" printf ' Вводить его здесь необязательно: нажмите Enter — ядро bj установится с образа,\n а ключ вы введёте в браузере на первой странице настройки (там его удобно вставить).\n\n' diff --git a/deploy/iso/bj-firstboot.service b/deploy/iso/bj-firstboot.service index 24d7c08..08d5e09 100644 --- a/deploy/iso/bj-firstboot.service +++ b/deploy/iso/bj-firstboot.service @@ -1,6 +1,7 @@ [Unit] Description=Bridge&Join: установка bj при первой загрузке (ключ продукта на экране сервера) -After=network-online.target systemd-user-sessions.service +# после этапа cloud-init «Config» и snapd: иначе их сообщения ложатся поверх вопросов на экране +After=network-online.target systemd-user-sessions.service cloud-config.service snapd.seeded.service Wants=network-online.target Before=getty@tty1.service ConditionPathExists=!/var/lib/bj/.bj/installed-from-iso