Add preflight system requirements checks
Этот коммит содержится в:
@@ -16,6 +16,11 @@ RUN_TEST_VM="${VIRTUALITY_CREATE_TEST_VM:-0}"
|
|||||||
WEB_PORT="${VIRTUALITY_WEB_PORT:-8088}"
|
WEB_PORT="${VIRTUALITY_WEB_PORT:-8088}"
|
||||||
LOG_DIR="/var/log/virtuality"
|
LOG_DIR="/var/log/virtuality"
|
||||||
LOG_FILE="${LOG_DIR}/bootstrap_$(date +%Y%m%d_%H%M%S).log"
|
LOG_FILE="${LOG_DIR}/bootstrap_$(date +%Y%m%d_%H%M%S).log"
|
||||||
|
MIN_ROOT_FREE_MB="${VIRTUALITY_MIN_ROOT_FREE_MB:-8192}"
|
||||||
|
MIN_VAR_FREE_MB="${VIRTUALITY_MIN_VAR_FREE_MB:-20480}"
|
||||||
|
MIN_RAM_MB="${VIRTUALITY_MIN_RAM_MB:-4096}"
|
||||||
|
MIN_CPU_CORES="${VIRTUALITY_MIN_CPU_CORES:-2}"
|
||||||
|
SKIP_REQUIREMENTS="${VIRTUALITY_SKIP_REQUIREMENTS:-0}"
|
||||||
|
|
||||||
ESC="\033"
|
ESC="\033"
|
||||||
RESET="${ESC}[0m"
|
RESET="${ESC}[0m"
|
||||||
@@ -55,6 +60,56 @@ require_root() {
|
|||||||
[[ "$EUID" -eq 0 ]] || fail "Запусти от root: curl ... | sudo bash"
|
[[ "$EUID" -eq 0 ]] || fail "Запусти от root: curl ... | sudo bash"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free_mb_for_path() {
|
||||||
|
local path="$1"
|
||||||
|
mkdir -p "$path" 2>/dev/null || true
|
||||||
|
df -Pm "$path" | awk 'NR==2 {print $4}'
|
||||||
|
}
|
||||||
|
|
||||||
|
check_requirements() {
|
||||||
|
step "Проверяем минимальные системные требования"
|
||||||
|
if [[ "$SKIP_REQUIREMENTS" == "1" ]]; then
|
||||||
|
warn "Проверка требований отключена через VIRTUALITY_SKIP_REQUIREMENTS=1"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
local root_free var_free ram_mb cpu_cores
|
||||||
|
root_free="$(free_mb_for_path /)"
|
||||||
|
var_free="$(free_mb_for_path /var/lib 2>/dev/null || free_mb_for_path /)"
|
||||||
|
ram_mb="$(awk '/MemTotal/ {printf "%d", $2/1024}' /proc/meminfo)"
|
||||||
|
cpu_cores="$(nproc 2>/dev/null || echo 1)"
|
||||||
|
|
||||||
|
if (( root_free >= MIN_ROOT_FREE_MB )); then
|
||||||
|
ok "Свободно на /: ${root_free} MB минимум ${MIN_ROOT_FREE_MB} MB"
|
||||||
|
else
|
||||||
|
fail "Недостаточно места на /: ${root_free} MB. Нужно минимум ${MIN_ROOT_FREE_MB} MB. Очисти диск: apt clean; journalctl --vacuum-time=3d"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (( var_free >= MIN_VAR_FREE_MB )); then
|
||||||
|
ok "Свободно для /var/lib: ${var_free} MB минимум ${MIN_VAR_FREE_MB} MB"
|
||||||
|
else
|
||||||
|
fail "Недостаточно места для VM-хранилища /var/lib: ${var_free} MB. Нужно минимум ${MIN_VAR_FREE_MB} MB"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (( ram_mb >= MIN_RAM_MB )); then
|
||||||
|
ok "RAM: ${ram_mb} MB минимум ${MIN_RAM_MB} MB"
|
||||||
|
else
|
||||||
|
warn "RAM: ${ram_mb} MB меньше рекомендуемых ${MIN_RAM_MB} MB. Установка возможна, но VM будут ограничены"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (( cpu_cores >= MIN_CPU_CORES )); then
|
||||||
|
ok "CPU cores: ${cpu_cores} минимум ${MIN_CPU_CORES}"
|
||||||
|
else
|
||||||
|
warn "CPU cores: ${cpu_cores} меньше рекомендуемых ${MIN_CPU_CORES}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if grep -E -q '(vmx|svm)' /proc/cpuinfo; then
|
||||||
|
ok "CPU virtualization vmx/svm найдена"
|
||||||
|
else
|
||||||
|
warn "CPU virtualization vmx/svm не найдена. Проверь BIOS/UEFI или настройки VPS"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
ensure_user() {
|
ensure_user() {
|
||||||
if id "$INSTALL_USER" >/dev/null 2>&1; then
|
if id "$INSTALL_USER" >/dev/null 2>&1; then
|
||||||
ok "Пользователь уже существует: ${INSTALL_USER}"
|
ok "Пользователь уже существует: ${INSTALL_USER}"
|
||||||
@@ -78,6 +133,8 @@ command -v apt >/dev/null 2>&1 || fail "apt не найден. Нужен Debian
|
|||||||
ok "root подтверждён"
|
ok "root подтверждён"
|
||||||
ok "apt найден"
|
ok "apt найден"
|
||||||
|
|
||||||
|
check_requirements
|
||||||
|
|
||||||
step "Устанавливаем базовые пакеты"
|
step "Устанавливаем базовые пакеты"
|
||||||
run_logged "apt update выполнен" apt update
|
run_logged "apt update выполнен" apt update
|
||||||
run_logged "Установлены sudo/git/curl/ca-certificates" apt install -y sudo git curl ca-certificates openssh-client nano htop
|
run_logged "Установлены sudo/git/curl/ca-certificates" apt install -y sudo git curl ca-certificates openssh-client nano htop
|
||||||
@@ -85,6 +142,13 @@ run_logged "Установлены sudo/git/curl/ca-certificates" apt install -y
|
|||||||
step "Создаём или проверяем пользователя"
|
step "Создаём или проверяем пользователя"
|
||||||
ensure_user
|
ensure_user
|
||||||
|
|
||||||
|
step "Проверяем место после создания пользователя"
|
||||||
|
root_free_after="$(free_mb_for_path /)"
|
||||||
|
if (( root_free_after < MIN_ROOT_FREE_MB )); then
|
||||||
|
fail "После подготовки пользователя свободного места стало мало: ${root_free_after} MB на /. Очисти диск и повтори установку"
|
||||||
|
fi
|
||||||
|
ok "Место после подготовки пользователя: ${root_free_after} MB на /"
|
||||||
|
|
||||||
step "Клонируем или обновляем репозиторий"
|
step "Клонируем или обновляем репозиторий"
|
||||||
if [[ -d "$PROJECT_DIR/.git" ]]; then
|
if [[ -d "$PROJECT_DIR/.git" ]]; then
|
||||||
run_logged "Репозиторий обновлён" run_as_user "cd '$PROJECT_DIR' && git reset --hard origin/main && git pull"
|
run_logged "Репозиторий обновлён" run_as_user "cd '$PROJECT_DIR' && git reset --hard origin/main && git pull"
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user