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