#!/bin/bash

# Establecer nuevo límite
NEW_LIMIT=65535

echo "Estableciendo límite de archivos abiertos a $NEW_LIMIT..."

# 1. Modificar límites temporales para la sesión actual
ulimit -n $NEW_LIMIT
echo "ulimit temporal establecido a $NEW_LIMIT"

# 2. Modificar límites permanentes para el usuario
LIMITS_CONF="/etc/security/limits.conf"
echo -e "\n* soft nofile $NEW_LIMIT\n* hard nofile $NEW_LIMIT" | sudo tee -a $LIMITS_CONF

# 3. Configurar PAM para aplicar límites
PAM_FILE="/etc/pam.d/common-session"
if ! grep -q "pam_limits.so" $PAM_FILE; then
    echo "session required pam_limits.so" | sudo tee -a $PAM_FILE
fi

# 4. Modificar sysctl para el sistema
SYSCTL_FILE="/etc/sysctl.conf"
echo "fs.file-max = $NEW_LIMIT" | sudo tee -a $SYSCTL_FILE
sudo sysctl -p

echo "?? Configurando systemd para aumentar el límite de archivos abiertos a $LIMIT..."

# 5. Modificar systemd

# Archivos de configuración
SYSTEM_CONF="/etc/systemd/system.conf"
USER_CONF="/etc/systemd/user.conf"

# Función para actualizar archivo systemd
update_systemd_conf() {
    local file=$1
    sudo sed -i '/^DefaultLimitNOFILE=/d' "$file"
    echo "DefaultLimitNOFILE=$NEW_LIMIT" | sudo tee -a "$file"
}

# Actualizar ambos archivos
update_systemd_conf "$SYSTEM_CONF"
update_systemd_conf "$USER_CONF"

# Recargar systemd
echo "?? Recargando systemd..."
sudo systemctl daemon-reexec

echo "? Configuración completada. Reinicia el sistema para aplicar los cambios."
