Первая загрузка: вопросы после cloud-init, консоль без сообщений загрузки, подсказки по шагам

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
zuevav
2026-09-24 17:20:25 +03:00
parent e75de4f27d
commit 0ceabbeed8
2 changed files with 10 additions and 2 deletions
+8 -1
View File
@@ -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'
+2 -1
View File
@@ -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