#!/bin/bash

# ============================================================
# LibreNMS Client Installation Script
# För Debian/Ubuntu-servrar
# ============================================================

SUBNET="192.168.1.0/24"
SNMP_COMMUNITY="public"

# Färger
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m'

log() { echo -e "${GREEN}[OK]${NC} $1"; }
warn() { echo -e "${YELLOW}[INFO]${NC} $1"; }
error() { echo -e "${RED}[FEL]${NC} $1"; exit 1; }

# Kontrollera root
if [ "$EUID" -ne 0 ]; then
    error "Scriptet måste köras som root"
fi

echo "============================================================"
echo " LibreNMS Client Installation"
echo "============================================================"
echo ""

# Steg 1 – Installera paket
warn "Installerar snmpd och python-is-python3..."
apt update -qq && apt install -y snmpd python-is-python3 wget sudo || error "Kunde inte installera paket"
log "Paket installerade"

# Steg 2 – Ladda ner scripts
warn "Laddar ner LibreNMS agent-scripts..."

wget -q -O /usr/bin/librenms-agent.sh https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/distro || error "Kunde inte ladda ner librenms-agent.sh"
chmod +x /usr/bin/librenms-agent.sh
log "librenms-agent.sh nedladdad"

wget -q -O /usr/local/bin/check_mk_agent https://raw.githubusercontent.com/librenms/librenms-agent/master/check_mk_agent || error "Kunde inte ladda ner check_mk_agent"
chmod +x /usr/local/bin/check_mk_agent
log "check_mk_agent nedladdad"

wget -q -O /etc/snmp/osupdate https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/osupdate || error "Kunde inte ladda ner osupdate"
chmod +x /etc/snmp/osupdate
log "osupdate nedladdad"

wget -q -O /etc/snmp/systemd https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/systemd.py || error "Kunde inte ladda ner systemd"
chmod +x /etc/snmp/systemd
log "systemd nedladdad"

wget -q -O /etc/snmp/ss.py https://github.com/librenms/librenms-agent/raw/master/snmp/ss.py || error "Kunde inte ladda ner ss.py"
chmod +x /etc/snmp/ss.py
log "ss.py nedladdad"

# Steg 3 – Fixa ss.py sökväg
warn "Fixar sökväg för ss i ss.py..."
SS_PATH=$(which ss)
sed -i "s|/sbin/ss|$SS_PATH|g" /etc/snmp/ss.py
log "ss.py uppdaterad med sökväg: $SS_PATH"

# Steg 4 – Sätt upp sudo-regler för Debian-snmp
warn "Konfigurerar sudo-rättigheter för Debian-snmp..."
cat > /etc/sudoers.d/librenms-snmp << EOF
Debian-snmp ALL=(ALL) NOPASSWD: /etc/snmp/osupdate
Debian-snmp ALL=(ALL) NOPASSWD: /etc/snmp/systemd
Debian-snmp ALL=(ALL) NOPASSWD: /etc/snmp/ss.py
Debian-snmp ALL=(ALL) NOPASSWD: /usr/bin/librenms-agent.sh
Debian-snmp ALL=(ALL) NOPASSWD: /usr/local/bin/check_mk_agent
EOF
chmod 440 /etc/sudoers.d/librenms-snmp
log "sudo-rättigheter konfigurerade"

# Steg 5 – Konfigurera snmpd.conf
warn "Konfigurerar snmpd.conf..."

cat > /etc/snmp/snmpd.conf << EOF
###########################################################################
# snmpd.conf - LibreNMS konfiguration
###########################################################################

# Systeminformation
sysLocation    Server
sysContact     Admin
sysServices    72

# AgentX
master agentx

# Lyssna på alla interface
agentAddress udp:161

# SNMP Community - tillåt access från LibreNMS-subnät
rocommunity $SNMP_COMMUNITY $SUBNET
rocommunity6 $SNMP_COMMUNITY default

# Extend-scripts (med sudo för Debian-snmp kompatibilitet)
extend .1.3.6.1.4.1.2021.7890.1 distro /usr/bin/sudo /usr/bin/librenms-agent.sh
extend .1.3.6.1.4.1.2021.7890.2 check_mk /usr/bin/sudo /usr/local/bin/check_mk_agent
extend osupdate /usr/bin/sudo /etc/snmp/osupdate
extend systemd /usr/bin/sudo /etc/snmp/systemd
extend ss-stats /usr/bin/sudo /etc/snmp/ss.py
EOF

log "snmpd.conf konfigurerad"

# Steg 6 – Starta om och aktivera snmpd
warn "Startar om snmpd..."
systemctl restart snmpd || error "Kunde inte starta snmpd"
systemctl enable snmpd
log "snmpd startad och aktiverad"

# Steg 7 – Verifiera
echo ""
echo "============================================================"
echo " Verifiering"
echo "============================================================"

warn "Testar osupdate..."
OSUPDATE_OUT=$(/etc/snmp/osupdate 2>&1)
echo "  osupdate: $OSUPDATE_OUT"

warn "Testar systemd..."
SYSTEMD_OUT=$(/etc/snmp/systemd 2>&1 | head -c 80)
echo "  systemd: ${SYSTEMD_OUT}..."

warn "Testar ss.py..."
SS_OUT=$(/etc/snmp/ss.py 2>&1 | head -c 80)
echo "  ss.py: ${SS_OUT}..."

SERVER_IP=$(hostname -I | awk '{print $1}')

echo ""
echo "============================================================"
log "Installation klar!"
echo ""
echo "  Kör dessa kommandon i LibreNMS-containern:"
echo ""
echo "  su - librenms -s /bin/bash -c '/opt/librenms/lnms device:add $SERVER_IP'"
echo "  su - librenms -s /bin/bash -c '/opt/librenms/lnms device:discover $SERVER_IP'"
echo "  su - librenms -s /bin/bash -c '/opt/librenms/lnms device:poll $SERVER_IP'"
echo "============================================================"