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 der 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 installieren mit:

pkg install ipmitool

Ich installiere für mich noch den nano, da ich damit besser klarkomme 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, brauchen wir noch folgendes eingeben:

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

Jetzt sind wir endlich so weit, dass wir unser Script für die Lüfter einrichten können. Auf meinem Board werden alle gleichzeitig heruntergeregelt, sodass ich nur einen Lüfter ansteuern muss. Falls ihr mehr als einen Lüfter habt, müsst ihr ausprobieren, welcher Lüfter 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 steht 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, dass 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 folgendes ausführen.

ipmitool sensor

Dadurch kannst du jetzt allen Lüftern 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

Der 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 jetzt einen neuen Cron. Dazu auf Hinzufügen und unter Befehl wählen wir Custom IPMI Fan Speed aus. * Bedeutet, dass es immer zu jeder Zeit ausgeführt wird und das wollen wir, damit es jede Minute einmal durchläuft.

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

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