Первая загрузка образа была исправлена: libvirt больше не останавливается на вопросе о конфиге

Найдено полной установкой ISO в QEMU: панель ставится первой, и virtuality-ctl заранее создавал
/etc/default/libvirt-guests; при установке libvirt dpkg спрашивал, какую версию оставить, и падал.
- virtuality-ctl пишет этот файл только после установки libvirt
- apt ставит пакеты с --force-confdef/--force-confold, перед установкой доделывает прерванную (dpkg --configure -a)
- спиннер установщика не засоряет журнал первой загрузки
- проверка ISO в CI ищет русский пункт меню

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019LEUXMcdZo7b87mjkUsPgg
Этот коммит содержится в:
Claude
2026-09-25 18:05:11 +00:00
родитель d51b620d02
Коммит 3ad50faa46
5 изменённых файлов: 23 добавлений и 12 удалений
+15 -8
Просмотреть файл
@@ -22,6 +22,8 @@ MIN_RAM_MB="${VIRTUALITY_MIN_RAM_MB:-4096}"
MIN_CPU_CORES="${VIRTUALITY_MIN_CPU_CORES:-2}"
SKIP_REQUIREMENTS="${VIRTUALITY_SKIP_REQUIREMENTS:-0}"
export DEBIAN_FRONTEND=noninteractive
# Keep existing configuration files without asking: there is nobody to answer on first boot.
APT_OPTS=(-o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold)
ESC="\033"
RESET="${ESC}[0m"
@@ -74,15 +76,18 @@ run_logged() {
spinner=("⠋" "⠙" "⠹" "⠸" "⠼" "⠴" "⠦" "⠧" "⠇" "⠏")
i=0
while kill -0 "$pid" 2>/dev/null; do
elapsed=$(( $(date +%s) - start_ts ))
symbol="${spinner[$((i % ${#spinner[@]}))]}"
printf "\r ${CYAN}%s${RESET} %s... ${GRAY}%ss${RESET} ${GRAY}(лог: %s)${RESET}" "$symbol" "$description" "$elapsed" "$LOG_FILE"
# The spinner only makes sense on a terminal; first boot writes this output to a log.
if [[ -t 1 ]]; then
elapsed=$(( $(date +%s) - start_ts ))
symbol="${spinner[$((i % ${#spinner[@]}))]}"
printf "\r ${CYAN}%s${RESET} %s... ${GRAY}%ss${RESET} ${GRAY}(лог: %s)${RESET}" "$symbol" "$description" "$elapsed" "$LOG_FILE"
fi
sleep 1
i=$((i + 1))
done
wait "$pid"
code=$?
printf "\r%*s\r" 120 ""
code=0
wait "$pid" || code=$?
[[ -t 1 ]] && printf "\r%*s\r" 120 ""
if [[ "$code" -eq 0 ]]; then
ok "$description"
else
@@ -103,7 +108,7 @@ install_available() {
warn "Пакет ${pkg} недоступен в этом дистрибутиве, пропускаю"
fi
done
run_logged "$description" apt install -y "${available[@]}"
run_logged "$description" apt-get install -y "${APT_OPTS[@]}" "${available[@]}"
}
service_state() { systemctl is-active "$1" 2>/dev/null || echo "inactive"; }
@@ -164,7 +169,9 @@ else
fi
step "Обновляем apt cache"
run_logged "apt update выполнен" apt update
run_logged "apt update выполнен" apt-get update
# A previous attempt may have stopped half way (power loss, a question from dpkg): finish it first.
run_logged "Незавершённые установки пакетов доделаны" dpkg --configure -a --force-confdef --force-confold
step "Устанавливаем базовые утилиты и зависимости диагностики"
install_available "Базовые пакеты и диагностические утилиты установлены" \