feat: subcomando doctor (verificacion post-instalacion)

- core/doctor.sh: run_doctor_checks() — symlink estable, version.txt, clinfo, vainfo, grupos render/video; salida con print_*, exit code = numero de checks con fallo
- clinfo/vainfo con patron captura-then-parse (clinfo tiene salida enorme: grep -q SIGPIPE-mata la pipe y reportaba falso negativo bajo pipefail — verificado en sistema real con plataforma OpenCL detectada)
- main.sh: dispatch del subcomando ANTES del root check (el doctor es verificacion de usuario, sin root) — requiere el reorden routes/source antes de privilegios (resuelve la causa raiz de O2; el cambio cosmico echo->print_error queda para fase siguiente)
This commit is contained in:
stornic56
2026-09-28 23:42:12 -05:00
parent 79863de015
commit b042516ee9
2 changed files with 86 additions and 7 deletions
+70
View File
@@ -0,0 +1,70 @@
#!/bin/bash
# ------------------------------------------------------------------------------
# doctor: verificacion post-instalacion (sin root requerido).
# Sourced por main.sh (subcomando doctor) y por el menu.
# Salida con print_* de common.sh; exit code = numero de checks con fallo.
# ------------------------------------------------------------------------------
run_doctor_checks() {
print_step "Doctor: verificando la instalacion de OpenVINO..."
local fails=0
# 1. Symlink estable
if [ -L /opt/intel/openvino_2026 ]; then
print_substep "Symlink OK: /opt/intel/openvino_2026 -> $(readlink /opt/intel/openvino_2026)"
else
print_error "Falta el symlink /opt/intel/openvino_2026 (¿la instalacion no se realizo?)"
fails=$((fails+1))
fi
# 2. Version instalada
if [ -f /opt/intel/openvino_2026/runtime/version.txt ]; then
print_substep "Version instalada: $(cat /opt/intel/openvino_2026/runtime/version.txt)"
else
print_error "No se encontro runtime/version.txt"
fails=$((fails+1))
fi
# 3. OpenCL (clinfo)
if command -v clinfo >/dev/null 2>&1; then
CLINFO_OUT=$(clinfo 2>/dev/null || true) # clinfo exits !=0 when no devices
if [[ "${CLINFO_OUT^^}" == *"DEVICE NAME"* ]]; then
print_substep "OpenCL OK (dispositivo detectado)"
else
print_warning "clinfo no detecta dispositivo (¿falta el driver NEO o los grupos render/video?)"
fails=$((fails+1))
fi
else
print_warning "clinfo no esta instalado"
fails=$((fails+1))
fi
# 4. VAAPI (vainfo)
if command -v vainfo >/dev/null 2>&1; then
VAINFO_OUT=$(vainfo 2>/dev/null || true)
if [[ "${VAINFO_OUT^^}" == *"DRIVER VERSION"* ]]; then
print_substep "VAAPI OK (driver cargado)"
else
print_warning "vainfo no carga driver (¿falta intel-media-va-driver?)"
fails=$((fails+1))
fi
else
print_warning "vainfo no esta instalado"
fails=$((fails+1))
fi
# 5. Grupos render/video
if id -Gn 2>/dev/null | grep -qw render && id -Gn 2>/dev/null | grep -qw video; then
print_substep "Grupos OK: el usuario esta en render y video"
else
print_warning "El usuario NO esta en los grupos render/video (reinicia la sesion tras instalar)"
fails=$((fails+1))
fi
if [ "$fails" -eq 0 ]; then
print_substep "Doctor: TODO OK"
else
print_warning "Doctor: $fails check(s) con avisos o fallos"
fi
return "$fails"
}
+16 -7
View File
@@ -7,13 +7,6 @@ set -euo pipefail
# It supports Debian 13, Ubuntu 22.04/24.04/26.04, and Fedora (latest stable versions). # It supports Debian 13, Ubuntu 22.04/24.04/26.04, and Fedora (latest stable versions).
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# privileges
if [ "$EUID" -ne 0 ]; then
echo "ERROR: This script must be run as root. Use:"
echo " sudo bash $0"
exit 1
fi
# routes # routes
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CORE_DIR="$SCRIPT_DIR/core" CORE_DIR="$SCRIPT_DIR/core"
@@ -22,6 +15,22 @@ MODULES_DIR="$SCRIPT_DIR/modules"
# print # print
source "$CORE_DIR/common.sh" source "$CORE_DIR/common.sh"
# Subcommands (before the root check: doctor is a post-install user verification)
case "${1:-}" in
doctor)
source "$CORE_DIR/doctor.sh"
run_doctor_checks
exit 0
;;
esac
# privileges
if [ "$EUID" -ne 0 ]; then
echo "ERROR: This script must be run as root. Use:"
echo " sudo bash $0"
exit 1
fi
print_step "=============================================" print_step "============================================="
print_step " OpenVINO 2026 - SimpleInstaller" print_step " OpenVINO 2026 - SimpleInstaller"
print_step "=============================================" print_step "============================================="