Files
dtic-DIIAA/servicios/bitacoras/app-run_deps.sh
T

249 lines
7.4 KiB
Bash
Executable File

#!/bin/bash
# =============================================================================
# DTIC Bitácoras - Gestión de Dependencias
# =============================================================================
#
# Script modular para gestión de dependencias del sistema
# Actúa como API: recibe argumentos CLI y retorna códigos de salida
#
# Uso:
# ./app-run_deps.sh check-host-deps # Verifica dependencias del host
# ./app-run_deps.sh install-host-deps # Instala dependencias del host
# ./app-run_deps.sh check-docker-deps # Verifica dependencias Docker
# ./app-run_deps.sh initial-setup # Ejecuta configuración inicial
#
# Códigos de salida:
# 0: Éxito
# 1: Fallo
#
# Versión: 1.0
# Fecha: 2025-11-28
# =============================================================================
# Cargar biblioteca compartida
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/app-run_lib.sh"
# Dependencias del host con sus comandos de instalación por sistema operativo
declare -A HOST_DEPENDENCIES=(
[curl]="Utilizado para verificar conectividad de servicios"
[jq]="Utilizado para formatear respuestas JSON (opcional)"
)
declare -A INSTALL_COMMANDS_LINUX=(
[curl]="apt-get install -y curl"
[jq]="apt-get install -y jq"
)
declare -A INSTALL_COMMANDS_MACOS=(
[curl]="brew install curl"
[jq]="brew install jq"
)
# Función para obtener el gestor de paquetes del sistema
get_package_manager() {
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
if command -v apt-get &> /dev/null; then
echo "apt-get"
elif command -v yum &> /dev/null; then
echo "yum"
elif command -v dnf &> /dev/null; then
echo "dnf"
else
echo "none"
fi
elif [[ "$OSTYPE" == "darwin"* ]]; then
if command -v brew &> /dev/null; then
echo "brew"
else
echo "none"
fi
else
echo "unsupported"
fi
}
# Función para verificar dependencias del host
check_host_dependencies() {
log "🔍 Verificando dependencias del sistema host..."
local missing_deps=()
for dep in "${!HOST_DEPENDENCIES[@]}"; do
if ! command -v "$dep" &> /dev/null; then
missing_deps+=("$dep")
fi
done
if [ ${#missing_deps[@]} -eq 0 ]; then
log "✅ Dependencias del host verificadas correctamente"
return 0
else
log "⚠️ Dependencias faltantes detectadas: ${missing_deps[*]}"
return 1
fi
}
# Función para instalar dependencias automáticamente
install_host_dependencies() {
log "🛠️ Instalando dependencias del sistema host..."
local package_manager=$(get_package_manager)
case "$package_manager" in
"apt-get"|"yum"|"dnf")
sudo "$package_manager" update
;;
"brew")
# brew no necesita update para install
;;
"none")
error "❌ No se encontró un gestor de paquetes compatible"
return 1
;;
"unsupported")
error "❌ Sistema operativo no soportado para instalación automática"
return 1
;;
esac
for dep in "${!HOST_DEPENDENCIES[@]}"; do
if ! command -v "$dep" &> /dev/null; then
log "📦 Instalando $dep..."
case "$package_manager" in
"apt-get")
sudo apt-get install -y "$dep"
;;
"yum")
sudo yum install -y "$dep"
;;
"dnf")
sudo dnf install -y "$dep"
;;
"brew")
brew install "$dep"
;;
*)
error "❌ No se puede instalar $dep: $package_manager no soportado"
continue
;;
esac
if command -v "$dep" &> /dev/null; then
success "✅ $dep instalado correctamente"
else
error "❌ Error al instalar $dep"
fi
fi
done
return 0
}
# Función para verificar dependencias Docker
check_docker_dependencies() {
log "🔍 Verificando dependencias del sistema..."
local missing_deps=()
if ! command -v docker &> /dev/null; then
missing_deps+=("docker")
fi
if ! command -v docker &> /dev/null || ! docker compose version &> /dev/null; then
missing_deps+=("docker-compose")
fi
if [ ${#missing_deps[@]} -ne 0 ]; then
error "Dependencias faltantes: ${missing_deps[*]}"
error "Por favor instala las dependencias requeridas antes de continuar"
return 1
fi
# Verificar que Docker esté ejecutándose
log "🔍 Verificando que Docker daemon esté ejecutándose..."
if ! docker info &> /dev/null; then
error "Docker daemon no está ejecutándose"
error "Por favor inicia Docker y vuelve a intentar"
return 1
fi
# Verificar que docker-compose funcione
log "🔍 Verificando funcionalidad de docker-compose..."
if ! docker compose version &> /dev/null; then
error "docker-compose no funciona correctamente"
return 1
fi
log "✅ Todas las dependencias verificadas correctamente"
return 0
}
# Función para ejecutar configuración inicial
run_initial_setup() {
echo ""
echo "🚀 Configuración Inicial de DTIC Bitácoras"
echo "========================================="
echo ""
log "🔧 Esta es la primera vez que ejecutas el script en este sistema"
log "🛠️ Se verificarán e instalarán las dependencias necesarias"
echo ""
# Verificar dependencias del host
if ! check_host_dependencies; then
echo ""
warning "⚠️ Se detectaron dependencias faltantes en el sistema host:"
echo ""
echo "Dependencias que se pueden instalar automáticamente:"
for dep in "${!HOST_DEPENDENCIES[@]}"; do
echo " • $dep - ${HOST_DEPENDENCIES[$dep]}"
done
echo ""
echo "Sistemas soportados:"
echo " • Linux (Ubuntu/Debian, CentOS/RHEL, Fedora)"
echo " • macOS (con Homebrew)"
echo ""
# En modo API, siempre intentar instalar automáticamente
log "Ejecutando instalación automática de dependencias..."
if install_host_dependencies; then
success "✅ Dependencias instaladas correctamente"
else
error "❌ Error al instalar algunas dependencias"
echo ""
echo "Puedes instalar manualmente en:"
echo " • curl: https://curl.se/download.html"
echo " • jq: https://stedolan.github.io/jq/download/"
return 1
fi
else
log "✅ Todas las dependencias ya están instaladas"
fi
# Marcar configuración como completada
mark_setup_complete
echo ""
success "🎉 Configuración inicial completada"
echo ""
sleep 2
return 0
}
# Procesar argumentos CLI
case "$1" in
check-host-deps)
check_host_dependencies
;;
install-host-deps)
install_host_dependencies
;;
check-docker-deps)
check_docker_dependencies
;;
initial-setup)
run_initial_setup
;;
*)
error "Uso: $0 {check-host-deps|install-host-deps|check-docker-deps|initial-setup}"
exit 1
;;
esac