249 lines
7.4 KiB
Bash
Executable File
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 |