Образ: установка без вопросов (DHCP, весь диск) с одним подтверждением стирания; приветствие на консоли не перерисовывается без нужды

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 20:14:10 +03:00
parent d7d7e2105f
commit a6c3511349
3 changed files with 11 additions and 7 deletions
+2 -1
View File
@@ -88,7 +88,8 @@ xorriso -osirrox on -indev "$SRC" -extract /boot/grub/grub.cfg "$WORK/grub/grub.
echo "loadfont unicode"
echo "menuentry --hotkey=b 'Install Bridge&Join $VERSION (Ubuntu 22.04)' {"
echo " set gfxpayload=keep"
echo " linux /casper/vmlinuz autoinstall ds=nocloud\;s=/cdrom/nocloud/ ---"
# без «autoinstall» в параметрах установщик один раз спросит подтверждение перед стиранием диска
echo " linux /casper/vmlinuz ds=nocloud\;s=/cdrom/nocloud/ ---"
echo " initrd /casper/initrd"
echo "}"
# пункт с ядром HWE убираем — его файлы из образа удаляются
+4 -4
View File
@@ -1,13 +1,13 @@
#cloud-config
# Автоустановка Ubuntu 22.04 для образа Bridge&Join (deploy/iso/build-iso-ubuntu.sh).
# Спрашиваются только сеть (если DHCP нет — задать вручную) и диск (подтверждение стирания).
# Вопросов нет: сеть — DHCP (нет DHCP — установка идёт без сети: обновления и пакеты bj уже в образе),
# диск — весь первый диск целиком. Единственный вопрос — подтверждение «Continue with autoinstall?»
# перед стиранием диска: его задаёт установщик Ubuntu, потому что в меню загрузки нет параметра
# autoinstall (защита от случайной загрузки с образа на машине с данными).
# Учётная запись root_bj (sudo) создаётся с неизвестным никому паролем — настоящие пароли
# root_bj и user_bj задаёт bj-firstboot при первой загрузке и показывает один раз.
autoinstall:
version: 1
interactive-sections:
- network
- storage
locale: ru_RU.UTF-8
keyboard:
layout: us,ru
+5 -2
View File
@@ -20,12 +20,15 @@ if [ -r "$SETUP" ]; then
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])
# только устойчивое состояние: сообщение о продлении меняется каждые 15 минут, и экран
# перерисовывался бы (перезапуск входа на консоли) без нужды
print("да" if l.get("key") else "нет")
except Exception: print("")
PY
)
fi
{
printf '\033[H\033[2J' # очистить экран: при повторном показе приглашения текст не копится
printf '\n ┌────────────────────────────────────────────────────────────────┐\n'
printf ' │ Bridge&Join (bj) — шлюз переводов ценных бумаг M2M / НРД │\n'
printf ' └────────────────────────────────────────────────────────────────┘\n'
@@ -50,7 +53,7 @@ fi
else
printf ' Состояние: bj работает. Вход в веб-интерфейс:\n'; url /admin
case "$lic" in
да*) printf ' Лицензия: %s\n' "${lic#да }";;
да*) printf ' Лицензия: ключ продукта введён (подробности — «Настройка → Лицензия»).\n';;
*) printf ' Лицензия НЕ АКТИВИРОВАНА: введите ключ продукта в «Настройка → Лицензия».\n';;
esac
fi