JotunMonitoring / install.sh
install.sh
Raw
#!/bin/bash

INSTALL_DIR="$HOME/JotunMonitoring"
PROMETHEUS_VERSION="3.0.1"
SNMP_EXPORTER_VERSION="0.26.0"
ARCH="linux-arm64"  # Adjust if running on another architecture

echo "๐Ÿš€ Starting installation of Esports Monitoring System..."

# Update system packages
echo "๐Ÿ“ฆ Updating package lists..."
sudo apt update && sudo apt upgrade -y

# Install required packages
echo "๐Ÿ“ฅ Installing dependencies..."
sudo apt-get install -y apt-transport-https software-properties-common wget python3 python3-venv python3-pip tar arp-scan

# โœ… Install Grafana from the official APT repository
echo "๐Ÿ“Š Installing Grafana..."
sudo mkdir -p /etc/apt/keyrings/
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install -y grafana

# Enable and start Grafana service
sudo systemctl enable grafana-server
sudo systemctl start grafana-server
echo "โœ… Grafana installed and running!"

# Create necessary directories inside JotunMonitoring
mkdir -p "$INSTALL_DIR/prometheus" "$INSTALL_DIR/snmp_exporter" "$INSTALL_DIR/PcMonitor"

# Download and install Prometheus (if not already installed)
cd "$INSTALL_DIR/prometheus"
if [ ! -f "prometheus-${PROMETHEUS_VERSION}.${ARCH}.tar.gz" ]; then
    echo "๐Ÿ“ฅ Downloading Prometheus v$PROMETHEUS_VERSION..."
    wget https://github.com/prometheus/prometheus/releases/download/v${PROMETHEUS_VERSION}/prometheus-${PROMETHEUS_VERSION}.${ARCH}.tar.gz
    tar -xzf prometheus-${PROMETHEUS_VERSION}.${ARCH}.tar.gz --strip-components=1
    chmod +x prometheus promtool
    echo "โœ… Prometheus installed successfully!"
else
    echo "โšก Prometheus v$PROMETHEUS_VERSION already exists."
fi

# Download and install SNMP Exporter (if not already installed)
cd "$INSTALL_DIR/snmp_exporter"
if [ ! -f "snmp_exporter-${SNMP_EXPORTER_VERSION}.${ARCH}.tar.gz" ]; then
    echo "๐Ÿ“ฅ Downloading SNMP Exporter v$SNMP_EXPORTER_VERSION..."
    wget https://github.com/prometheus/snmp_exporter/releases/download/v${SNMP_EXPORTER_VERSION}/snmp_exporter-${SNMP_EXPORTER_VERSION}.${ARCH}.tar.gz
    tar -xzf snmp_exporter-${SNMP_EXPORTER_VERSION}.${ARCH}.tar.gz --strip-components=1
    chmod +x snmp_exporter
    echo "โœ… SNMP Exporter installed successfully!"
else
    echo "โšก SNMP Exporter v$SNMP_EXPORTER_VERSION already exists."
fi

# โœ… Setting up Python environment for PcMonitor in the same folder
echo "๐Ÿ Setting up Python environment..."
cd "$INSTALL_DIR/PcMonitor"
python3 -m venv venv
source venv/bin/activate
pip install prometheus_client ping3 scapy
# Create requirements.txt if it doesn't exist
if [ ! -f "requirements.txt" ]; then
    echo "prometheus_client" > requirements.txt
    echo "ping3" >> requirements.txt
    echo "scapy" >> requirements.txt
fi
pip install -r requirements.txt || echo "โš ๏ธ Some Python dependencies failed to install!"
deactivate

# โœ… Copy Prometheus configuration
echo "โš™๏ธ  Configuring Prometheus..."
if [ ! -f "$INSTALL_DIR/prometheus/prometheus.yml" ]; then
    cp "$INSTALL_DIR/prometheus/prometheus.yml" "$INSTALL_DIR/prometheus/"
fi

# โœ… Copy SNMP Exporter configuration
echo "๐Ÿ“ก Configuring SNMP Exporter..."
if [ ! -f "$INSTALL_DIR/snmp_exporter/snmp.yml" ]; then
    cp "$INSTALL_DIR/snmp_exporter/snmp.yml" "$INSTALL_DIR/snmp_exporter/"
fi


# โœ… Create systemd services for Prometheus and SNMP Exporter
echo "๐Ÿ›  Setting up Prometheus and SNMP Exporter as systemd services..."

# Prometheus Service
PROMETHEUS_SERVICE="/etc/systemd/system/prometheus.service"
echo "[Unit]
Description=Prometheus Service
After=network.target

[Service]
ExecStart=$INSTALL_DIR/prometheus/prometheus --config.file=$INSTALL_DIR/prometheus/prometheus.yml --storage.tsdb.path=$INSTALL_DIR/prometheus/data
WorkingDirectory=$INSTALL_DIR/prometheus
Restart=always
User=$USER
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target" | sudo tee $PROMETHEUS_SERVICE

# SNMP Exporter Service
SNMP_EXPORTER_SERVICE="/etc/systemd/system/snmp_exporter.service"
echo "[Unit]
Description=SNMP Exporter Service
After=network.target

[Service]
ExecStart=$INSTALL_DIR/snmp_exporter/snmp_exporter --config.file=$INSTALL_DIR/snmp_exporter/snmp.yml
WorkingDirectory=$INSTALL_DIR/snmp_exporter
Restart=always
User=$USER
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target" | sudo tee $SNMP_EXPORTER_SERVICE


# โœ… Create systemd service file for PcMonitor
PC_MONITOR_SERVICE="/etc/systemd/system/pc_monitor.service"

echo "๐Ÿ”ง Creating pc_monitor.service..."
echo "[Unit]
Description=PcMonitor Service
After=network.target

[Service]
ExecStart=$INSTALL_DIR/PcMonitor/venv/bin/python3 $INSTALL_DIR/PcMonitor/PcMonitorV2.py
WorkingDirectory=$INSTALL_DIR/PcMonitor
Restart=always
User=root
# Add a reasonable restart delay to prevent rapid restart loops
RestartSec=10
# Add environment variables
Environment=\"PATH=$INSTALL_DIR/PcMonitor/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\"
# Capture stdout and stderr to system journal
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target" | sudo tee $PC_MONITOR_SERVICE

echo "๐Ÿ”ง Configuring PcMonitor as a systemd service..."
sudo systemctl daemon-reload
sudo systemctl enable pc_monitor

# โœ… Enable services on boot
echo "โณ Enabling services on boot..."
sudo systemctl enable prometheus
sudo systemctl enable snmp_exporter
sudo systemctl enable pc_monitor
sudo systemctl enable grafana-server

# โœ… Restart services to apply changes
echo "๐Ÿ”„ Restarting services..."
sudo systemctl restart prometheus
sudo systemctl restart snmp_exporter
sudo systemctl restart pc_monitor
sudo systemctl restart grafana-server

echo "โœ… Installation completed successfully! ๐ŸŽ‰"
echo "๐Ÿ–ฅ๏ธ Access Grafana at: http://<raspberrypi-ip>:3000"
echo "๐Ÿ“Š Access Prometheus at: http://<raspberrypi-ip>:9090"
echo "๐Ÿ” Monitoring metrics: http://<raspberrypi-ip>:8003/metrics"
echo "๐Ÿ“ก Access SNMP Exporter: http://<raspberrypi-ip>:9116/snmp?target=<fortigate-switch-ip>"