Supermicro IPMI Fan Speed über Opnsense

Um die Lüfter zu Steuern müssen wir zuerst im IPMI Interface die Lüfter auf Max Speed einstellen. Dazu gehen wir über das Web Interface auf Configuration->Fan Mode und da müsst ihr Set Fan to Full Speed auswählen, und über Save speichern.

Um alles zu Konfigurieren brauchen wir SSH auf der Opnsense. Dazu auf System->Einstellungen->Verwaltung

Dort SSH aktivieren und falls nötig bei Anmeldegruppe die admins hinzufügen, Erlaube Anmeldung mit Root-Benutzer und die Anmeldung mit Passwort. Die hörende Schnittstelle auf LAN ändern. Diese Einstellung kann nach dem Konfigurieren wieder Rückgängig gemacht werden, und wird nicht für den weiteren Betrieb benötigt.

Jetzt loggen wir uns per Root auf der Opnsense ein und mit drücken von 8 auf die Konsole.

Als erstes brauchen wir das Ipmitool, dieses können wir nachinstallieren mit:

pkg install ipmitool

Ich installier mir noch den nano da ich damit besser klar komme als mit vi:

pkg install nano

Jetzt müssen wir noch den Ipmi Device laden, dieser ist nicht aktiv im Normalfall:

kldload ipmi

Und damit es auch nach dem booten geladen wird noch brauchen wir noch folgendes eingeben:

echo 'ipmi_load="YES"' >>/boot/loader.conf.local

Jetzt sind wir endlich soweit das wir unser Script für die Lüfter einrichten können. Auf meinem Board werden alle gleichzeitig runtergeregelt so das ich nur einen Lüfter ansteuern muss. Falls ihr mehr als einen Lüfter habt müsst ihr ausprobieren welcher welcher ist. Das kann je nach Board bisschen unterschiedlich sein mit X10SDV habe ich es getestet.

ipmitool raw 0x30 0x70 0x66 0x01 0x00 0x16

Die 0x00 seht für Zone 0 -> FAN1,FAN2,FAN3,…(0x01 wäre für Zone 1 -> FANA, FANB…)

Die 0x16 steht für den Fan Speed 16 müssten 25% entsprechen. 32 50% und 64 sind 100%. Je nach Lüfter könnte es sein das noch eine Fehlermeldung auftaucht wenn die Lüfter zu langsam drehen. Die können wir auch per Befehl ändern.

Um dir alle Lüfter anzuzeigen kannst du erstmal

ipmitool sensor

Dadurch kannst du jetzt alle Lüfter die richtigen Werte für Lower mitgeben. Dadurch werden auch bei Langsamer Drehzahl die Lüfter nicht auf Max Speed gepusht.

ipmitool sensor thresh FAN1 lower 150 175 200

ipmitool sensor thresh FAN2 lower 150 175 200

Diese beiden Befehle brauchen wir jetzt für das Script. Dadurch wird zuerst geschaut ob der Wert für Lower schon gesetzt ist wenn ja dann wird der Teil übersprungen. Danach wird die CPU Temperatur ausgelesen und der jeweilige Speed gesetzt.

#!/bin/sh
# Ausgabe ins Logfile
exec >> /var/log/ipmi_fan.log 2>&1
# Datum Ausgabe
echo "`date`"

# Sensor Werte von Lüfter 1 holen und in Int umwandeln
SENSOR=$(ipmitool sensor | grep FAN1 | awk '{print $9}')
SENSOR_INT=$(printf "%.0f" "$SENSOR")

# If Abfrage ob der Sensor schon gesetzt wurde wenn nicht wird es gemacht für FAN1-3

if [ 200 -ne $SENSOR_INT ]
then
ipmitool sensor thresh FAN1 lower 150 175 200

ipmitool sensor thresh FAN2 lower 150 175 200

ipmitool sensor thresh FAN3 lower 150 175 200
echo "set sensor"
fi

# Sensor Werte für CPU auslesen
CPU_TEMP=$(ipmitool sensor | grep CPU | awk '{print $4}')
echo $CPU_TEMP
# CPU Temp in Int umwandeln
CPU_TEMP_INT=$(printf "%.0f" "$CPU_TEMP")

# Schwellenwerte für die CPU
TEMP0=40
TEMP1=50
TEMP2=70


# If Abfrage für CPU TEMP und setzen des FAN Speed
if [ $CPU_TEMP_INT -le $TEMP0 ]
then
        ipmitool raw 0x30 0x70 0x66 0x01 0x00 0x16
        echo "set 16"

elif [ $CPU_TEMP_INT -le $TEMP1 ]
then
        ipmitool raw 0x30 0x70 0x66 0x01 0x00 0x32
        echo "set 32"
elif [ $CPU_TEMP_INT -le $TEMP2 ]
then
        ipmitool raw 0x30 0x70 0x66 0x01 0x00 0x48
        echo "set 32"


elif [ $CPU_TEMP_INT -ge $TEMP2 ]
then
        ipmitool raw 0x30 0x70 0x66 0x01 0x00 0x64
        echo "set 64"

fi

Das speichern wir unter/etc/ipmi.sh

Um die Datei ausführbar zu machen brauchen wir noch folgenden Befehl:

chmod +x /etc/ipmi.sh

Damit wir es unter Opnsense als cron ausführen können brauchen wir noch eine weitere Datei.

Dazu erstellen wir noch folgende Datei:

nano /usr/local/opnsense/service/conf/actions.d/actions_ipmi.conf

Inhalt ist folgender:

[start]
command:/etc/ipmi.sh
parameters:
type:script
message:Custom IPMI Fan Speed
description:Custom IPMI Fan Speed

Das war nun alles in der Shell für den Moment wieder zurück in das Webinterface.

Unter System->Einstellungen->Cron erstellen wir nun einen neuen Cron. Dazu auf Hinzufügen und unter Befehl wählen wir Custom IPMI Fan Speed aus. * Bedeutet das es immer zu jeder Zeit ausgeführt wird und das wollen wir damit es jede Min einmal durchläuft.

Das war es auch schon, nun am besten einmal rebooten und schauen ob alles passt. Die Fan sollten jetzt 1 mal pro Minute an der CPU Temperatur angepasst werden.

https://www.deko-mueller.ch/