Adds leases hoook to kea config

pull/12/head
Nicolas Arenas 2026-04-17 20:58:32 +02:00
parent 54eab1342b
commit ba461ead15
1 changed files with 39 additions and 1 deletions

View File

@ -24,6 +24,28 @@ restore_config_if_modified() {
} }
# 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" KEA_CTRL_AGENT_CONF="/etc/kea/kea-ctrl-agent.conf"
PUBLIC_DIR=/opt/opengnsys/ogdhcp/api/public PUBLIC_DIR=/opt/opengnsys/ogdhcp/api/public
db_get opengnsys/ogdhcp_interfaces db_get opengnsys/ogdhcp_interfaces
@ -95,13 +117,23 @@ EOF
echo "Configurando kea-dhcp4..." echo "Configurando kea-dhcp4..."
IFS=',' read -r -a INTERFACES <<< "$OGDHCP_INTERFACES" IFS=',' read -r -a INTERFACES <<< "$OGDHCP_INTERFACES"
KEA_CONFIG="/etc/kea/kea-dhcp4.conf" KEA_CONFIG="/etc/kea/kea-dhcp4.conf"
# Detectar la ruta de libdhcp_lease_cmds.so (varía según arquitectura)
LEASE_CMDS_LIB=$(find /usr/lib -name "libdhcp_lease_cmds.so" 2>/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 if [ -e "$KEA_CONFIG" ]; then
dpkg-divert --package ogdhcp --divert "$KEA_CONFIG.dpkg-dist" --rename "$KEA_CONFIG" 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" <<EOF cat > "$KEA_CONFIG" <<EOF
{ {
"Dhcp4": { "Dhcp4": {
"interfaces-config": { "interfaces-config": {
"interfaces": [ $( "interfaces": [ $(
for interface in "${INTERFACES[@]}"; do for interface in "${INTERFACES[@]}"; do
echo "\"$interface\"" echo "\"$interface\""
done | paste -sd "," - done | paste -sd "," -
@ -128,6 +160,8 @@ EOF
} }
} }
EOF EOF
# Añadir el hook tras generar el fichero (la función verifica que no esté ya)
ensure_lease_cmds_hook "$KEA_CONFIG" "$LEASE_CMDS_LIB"
fi fi
else else
@ -137,6 +171,10 @@ EOF
restore_config_if_modified "/opt/opengnsys/ogdhcp/api/.env" restore_config_if_modified "/opt/opengnsys/ogdhcp/api/.env"
restore_config_if_modified "/etc/nginx/sites-available/ogdhcp.conf" restore_config_if_modified "/etc/nginx/sites-available/ogdhcp.conf"
restore_config_if_modified "/etc/php/$PHP_VERSION/fpm/pool.d/ogdhcp.conf" restore_config_if_modified "/etc/php/$PHP_VERSION/fpm/pool.d/ogdhcp.conf"
# En upgrade: añadir el hook si se instaló kea-hook-lease-cmds y no estaba configurado
LEASE_CMDS_LIB=$(find /usr/lib -name "libdhcp_lease_cmds.so" 2>/dev/null | head -1)
ensure_lease_cmds_hook "/etc/kea/kea-dhcp4.conf" "$LEASE_CMDS_LIB"
fi fi
echo ">>> Configuración de ogdhcp completada." echo ">>> Configuración de ogdhcp completada."
;; ;;