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.
Hallo,
ich würde das ganze sehr gern bei einer Watchguard M370 Konfigurieren.
Kannst du mir dabei helfen ?
Gruß
Tom
Hallo Tom,
ich kann dir gerne helfen. Wo funktioniert es den bei dir nicht? Oder wie weit bist du gekommen?
Gruss
Marcel
Hallo,
das finde ich auch nicht.
«IPMI Interface die Lüfter auf Max Speed einstellen».
Link Opnsense
Link watchguard
Ihr sind noch 2 Links, es gibt anscheinend ein Tool für Watchguard. Und der eine hat ein Tool für deine Box geschrieben das man sicher in einem Skript verwenden könnte
Hallo,
ja die Installation von der Software hatte ich schon gemacht, mit den Befehlen kann ich jetzt auch die Geschwindigkeit der FANs manuell steuern.
Auch das steuern der LED funktioniert.
Nur wie bekomme ich die Sache denn jetzt automatisiert mit einer Abfrage von der Temperatur.
https://www.hexhound.com/quiet-the-fan-on-your-pfsense-watchguard-firewall/
Die Befehle gehen bei mir aber leider nicht.
Linux ist für mich noch ein total neuer Bereich.
Eine fixfertige Lösung kann ich dir nicht bieten da ich alles auch nicht testen kann, und mir auch die Zeit dazu fehlt.
Aber Grundsätzlich musst du den Befehl «ipmitool raw 0x30 0x70 0x66 0x01 0x00 XXXX» durch «WGXepc yyy» ersetzen.
Die anderen Befehle oberhalb müsstest du aber auch testen ob alles funktioniert. Am besten schaust du dir mal den Aufbau eines Bash Script an und arbeitest dich dan Zeile für Zeile durch das Script durch.
Du kannst alle Linien als Befehle ansehen und 1 zu 1 in der Konsole ausführen, und sehen ob die jeweilige Ausgabe auch passen könnte.
CPU_TEMP=$(ipmitool sensor | grep CPU | awk ‹{print $4}›)
Hier wird eine Variable gesetzt die kannst du auch in der Bash machen oder du kannst einfach den Befehl ohne Variable eingeben ipmitool sensor | grep CPU | awk ‹{print $4}›
OK, danke dir erstmal für die Infos.
Ich habe mir gedacht das wäre etwas einfacher.
Dann werde ich das ganze mal versuchen.
Danke
Gruß
Hallo Marcel,
schön, dass du dich so schnell meldest.
Ich bin bis zu dem Befehl «echo ‹ipmi_load=»YES»‹ >>/boot/loader.conf.local» gekommen, was auch noch zu funktionieren scheint.
Doch ab dem Befehl „ ipmitool raw 0x30 0x70 0x66 0x01 0x00 0x16 „ kommt ein Fehler, ich glaube meine Ventilatoren werden anders angesprochen, aber wie kann ich dass denn heraus bekommen ?
Wir könnten auch sehr gern mal zusammen auf die Kiste schauen, wenn du Zeit hast.
Gruß
Tom
Bei den Lüfern wird es leider von jedem Hersteller bisschen anders gemacht. Da wirst du nicht darum rum kommen die Befehle im Internet oder von deinen Hersteller zu suchen. Ich musste da für Supermicro auch lange suchen bis ich was schlaues gefunden habe.
Das mit dem Max Speed kann auch wieder so eine Supermicro Sache sein. Wenn du im Ipmi Webinterface keine Einstellungen machen kannst wirst du den Schritt überspringen können