#!/bin/bash set -e . /usr/share/debconf/confmodule restore_config_if_modified() { local new="$1" local backup="$1.bak.upgrade_package" if [ -f "$backup" ]; then if ! cmp -s "$new" "$backup"; then echo ">>> Archivo modificado por el usuario detectado en $new" echo " - Guardando archivo nuevo como ${new}.new" mv -f "$new" "${new}.new" echo " - Restaurando archivo anterior desde backup" mv -f "$backup" "$new" else echo ">>> El archivo $new no ha cambiado desde la última versión, eliminando backup" rm -f "$backup" fi fi } # Añade el hook lease-cmds a kea-dhcp4.conf solo si no está ya presente ensure_lease_cmds_hook() { local config="$1" local lib="$2" [ -f "$config" ] || return 0 [ -n "$lib" ] || return 0 if grep -q "libdhcp_lease_cmds" "$config"; then echo "El hook lease-cmds ya está presente en $config, no se añade de nuevo." return 0 fi echo "Añadiendo hook lease-cmds a $config..." local tmp tmp=$(mktemp) jq --arg lib "$lib" \ '.Dhcp4["hooks-libraries"] = (.Dhcp4["hooks-libraries"] // []) + [{"library": $lib}]' \ "$config" > "$tmp" && mv "$tmp" "$config" chown _kea:_kea "$config" } KEA_CTRL_AGENT_CONF="/etc/kea/kea-ctrl-agent.conf" PUBLIC_DIR=/opt/opengnsys/ogdhcp/api/public db_get opengnsys/ogdhcp_interfaces OGDHCP_INTERFACES="$RET" db_get opengnsys/ogdhcp_ip OGDHCP_IP="$RET" db_get opengnsys/ogdhcp_ogbootIP OGBOOT_IP="$RET" # Get PHP version PHP_VERSION=$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;') if [ -z "$PHP_VERSION" ]; then echo "Error: No se pudo determinar la versión de PHP." exit 1 fi case "$1" in configure) if [ -z "$2" ]; then echo ">>> Configuración de ogdhcp, realizando instalacion nueva" # Configuración de kea-ctrl-agent echo "Eliminando autenticación de kea-ctrl-agent..." if [ -e "$KEA_CTRL_AGENT_CONF" ]; then dpkg-divert --package ogdhcp --divert "$KEA_CTRL_AGENT_CONF.dpkg-dist" --rename "$KEA_CTRL_AGENT_CONF" cp -a "$KEA_CTRL_AGENT_CONF.dpkg-dist" "$KEA_CTRL_AGENT_CONF" if grep -q '^[^#]*"authentication": {' "$KEA_CTRL_AGENT_CONF"; then sed -i '/"authentication": {/,/^[[:space:]]*},/ { s/^\([[:space:]]*\)\([^#]\)/\1#\2/ }' "$KEA_CTRL_AGENT_CONF" fi fi # Configuración de AppArmor APPARMOR_LOCAL_PROFILE="/etc/apparmor.d/local/usr.sbin.kea-dhcp4" echo "Añadiendo permisos personalizados a AppArmor para kea-dhcp4..." mkdir -p "$(dirname "$APPARMOR_LOCAL_PROFILE")" cat > "$APPARMOR_LOCAL_PROFILE" </dev/null | head -1) if [ -z "$LEASE_CMDS_LIB" ]; then echo "Advertencia: no se encontró libdhcp_lease_cmds.so. El hook lease-cmds no estará activo." else echo "Librería lease-cmds encontrada en: $LEASE_CMDS_LIB" fi if [ -e "$KEA_CONFIG" ]; then dpkg-divert --package ogdhcp --divert "$KEA_CONFIG.dpkg-dist" --rename "$KEA_CONFIG" # El fichero se genera desde cero, no hay riesgo de duplicación cat > "$KEA_CONFIG" </dev/null | head -1) ensure_lease_cmds_hook "/etc/kea/kea-dhcp4.conf" "$LEASE_CMDS_LIB" fi echo ">>> Configuración de ogdhcp completada." ;; abort-upgrade|abort-remove|abort-deconfigure) echo ">>> Abortando la configuración de ogdhcp" echo "No se realizaron cambios en la configuración." exit 0 ;; *) echo "postinst called with unknown argument '$1'" >&2 exit 1 ;; esac chown opengnsys:www-data /opt/opengnsys/ chown -R opengnsys:www-data /opt/opengnsys/ogdhcp chown -R _kea:_kea /etc/kea # Reiniciar servicios systemctl daemon-reload systemctl restart nginx || echo "Error al reiniciar nginx" systemctl restart kea-dhcp4-server || echo "Error al reiniciar kea-dhcp4-server" systemctl restart kea-ctrl-agent || echo "Error al reiniciar kea-ctrl-agent" systemctl restart php$PHP_VERSION-fpm || echo "Error al reiniciar php$PHP_VERSION-fpm" exit 0