118 lines
2.9 KiB
Bash
Executable File
118 lines
2.9 KiB
Bash
Executable File
#!/bin/bash
|
|
# IPMI Controller - lm-sensors HTTP Server Setup
|
|
# Run this on your Proxmox/Dell server to expose sensors over HTTP
|
|
|
|
set -e
|
|
|
|
echo "🌡️ IPMI Controller - lm-sensors HTTP Setup"
|
|
echo "============================================"
|
|
|
|
# Check if running as root
|
|
if [ "$EUID" -ne 0 ]; then
|
|
echo "❌ Please run as root (sudo)"
|
|
exit 1
|
|
fi
|
|
|
|
# Install lm-sensors if not present
|
|
echo ""
|
|
echo "📦 Checking lm-sensors..."
|
|
if ! command -v sensors &> /dev/null; then
|
|
echo "Installing lm-sensors..."
|
|
apt-get update
|
|
apt-get install -y lm-sensors
|
|
|
|
echo ""
|
|
echo "🔧 Running sensors-detect..."
|
|
echo "Answer YES to all questions or use default values"
|
|
sensors-detect --auto
|
|
else
|
|
echo "✓ lm-sensors already installed"
|
|
fi
|
|
|
|
# Install netcat if not present
|
|
if ! command -v nc &> /dev/null; then
|
|
echo "Installing netcat..."
|
|
apt-get install -y netcat-openbsd
|
|
fi
|
|
|
|
# Create the HTTP sensors server script
|
|
SERVER_SCRIPT="/usr/local/bin/sensors-http-server.sh"
|
|
|
|
echo ""
|
|
echo "📝 Creating HTTP server script..."
|
|
cat > "$SERVER_SCRIPT" << 'EOF'
|
|
#!/bin/bash
|
|
# lm-sensors HTTP Server for IPMI Controller
|
|
# Serves sensor data on port 8888
|
|
|
|
PORT=${1:-8888}
|
|
|
|
echo "Starting lm-sensors HTTP server on port $PORT..."
|
|
echo "Access via: http://$(hostname -I | awk '{print $1}'):$PORT"
|
|
|
|
while true; do
|
|
{
|
|
echo -e "HTTP/1.1 200 OK\r"
|
|
echo -e "Content-Type: text/plain\r"
|
|
echo -e "Access-Control-Allow-Origin: *\r"
|
|
echo -e "\r"
|
|
sensors -u 2>/dev/null || echo "Error reading sensors"
|
|
} | nc -l -p "$PORT" -q 1
|
|
done
|
|
EOF
|
|
|
|
chmod +x "$SERVER_SCRIPT"
|
|
echo "✓ Created $SERVER_SCRIPT"
|
|
|
|
# Create systemd service
|
|
SERVICE_FILE="/etc/systemd/system/sensors-http.service"
|
|
|
|
echo ""
|
|
echo "🔧 Creating systemd service..."
|
|
cat > "$SERVICE_FILE" << EOF
|
|
[Unit]
|
|
Description=lm-sensors HTTP Server for IPMI Controller
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
ExecStart=$SERVER_SCRIPT 8888
|
|
Restart=always
|
|
RestartSec=5
|
|
User=root
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
|
|
echo "✓ Created $SERVICE_FILE"
|
|
|
|
# Reload systemd and enable service
|
|
echo ""
|
|
echo "🚀 Enabling and starting service..."
|
|
systemctl daemon-reload
|
|
systemctl enable sensors-http.service
|
|
systemctl start sensors-http.service
|
|
|
|
# Check status
|
|
sleep 2
|
|
if systemctl is-active --quiet sensors-http.service; then
|
|
echo "✓ Service is running!"
|
|
echo ""
|
|
echo "🌐 HTTP Endpoint: http://$(hostname -I | awk '{print $1}'):8888"
|
|
echo ""
|
|
echo "Test with: curl http://$(hostname -I | awk '{print $1}'):8888"
|
|
else
|
|
echo "⚠️ Service failed to start. Check logs:"
|
|
echo " journalctl -u sensors-http.service -f"
|
|
fi
|
|
|
|
echo ""
|
|
echo "📋 Management Commands:"
|
|
echo " Start: sudo systemctl start sensors-http"
|
|
echo " Stop: sudo systemctl stop sensors-http"
|
|
echo " Status: sudo systemctl status sensors-http"
|
|
echo " Logs: sudo journalctl -u sensors-http -f"
|
|
echo ""
|
|
echo "✅ Setup complete!"
|