#!/bin/bash # Entrypoint para el contenedor CSF set -e # Función para manejo de señales cleanup() { echo "Recibida señal de terminación..." # Detener CSF de forma controlada if [ -x /usr/local/csf/bin/csf ]; then echo "Deteniendo CSF..." /usr/local/csf/bin/csf --stop || true fi # Detener LFD si está ejecutándose if pidof lfd > /dev/null; then echo "Deteniendo LFD..." killall lfd || true fi # Detener rsyslog if pidof rsyslogd > /dev/null; then echo "Deteniendo rsyslog..." killall rsyslogd || true fi echo "Limpieza completada" exit 0 } # Configurar manejo de señales trap cleanup SIGTERM SIGINT # Iniciar rsyslog en background echo "Iniciando rsyslog..." rsyslogd & # Esperar un momento para que rsyslog se inicie sleep 2 # Verificar capacidades necesarias if [ ! -w /proc/sys/net/ipv4/ip_forward ]; then echo "Advertencia: No se pueden modificar configuraciones de red del kernel" echo "Asegúrese de ejecutar el contenedor con --privileged o las capacidades necesarias" fi case "$1" in csf) echo "Iniciando CSF en modo contenedor..." # Ejecutar script de inicio de CSF /usr/local/bin/csf-start.sh # Mantener el contenedor ejecutándose echo "CSF iniciado. Manteniendo contenedor activo..." # Loop infinito para mantener el contenedor vivo while true; do # Verificar cada 30 segundos que CSF sigue ejecutándose if ! /usr/local/csf/bin/csf --status > /dev/null 2>&1; then echo "CSF no está ejecutándose. Reintentando inicio..." /usr/local/bin/csf-start.sh || { echo "Error: No se pudo reiniciar CSF" cleanup exit 1 } fi sleep 30 done ;; bash|sh) echo "Iniciando shell interactivo..." exec /bin/bash ;; *) echo "Ejecutando comando personalizado: $@" exec "$@" ;; esac