IPMI - Hardwareverwaltung aus der Ferne
21. Jan. 2024
IPMI (Intelligent Platform Management Interface) ist eine standardisierte Schnittstelle zur Hardware und Firmware des Computers, über die sie auf Hardwareebene ferngesteuert, überwacht und verwaltet werden können, insbesondere wenn sie ausgeschaltet sind oder kein Betriebssystem installiert ist. Zentral zum IPMI ist der BMC (Baseboard Management Controller), der als anwendungsspezifische integrierte Schaltung über den IPMB (Intelligent Platform Management Bus) mit den grundlegenden Komponenten des Computers auf Hardwareebene, und den erforderlichen Kommunikationsschnittstellen (wie USB oder einer Netzwerkschnittstelle)verbunden ist.
Wie beim BIOS-Chip befindet sich auch ein BMS-Chip auf der Hauptplatine, der gestartet wird (vergleichbar mit dem Booten), sobald der Computer mit Standbystrom versorgt wird (also sobald das Netzteil eingeschaltet wird). Nachdem der BMC eine Reihe grundlegender Tests der Hardware ausgeführt hat, wird eine Schnittstelle (z.B. eine Webseite) bereitgestellt, auf die man als Administrator zugreifen kann, um den Computer zu verwalten. Um Unberechtigten den Zugriff zu verweigern, muss man sich authentifizieren, um auf diese Schnittstelle zugreifen zu können.
Erwirbt man aber eine gebrauchte Hauptplatine, besteht die Möglichkeit, dass das Benutzername und/oder Passwort geändert wurden. Um auch auf das IPMI zugreifen zu können, müssen die Zugangsdaten geändert werden. Hier können Werkzeuge, wie ipmi-config
oder ipmitool
Abhilfe verschaffen. Dieselben Werkzeuge können auch Einstellungen ändern, um z.B. die Lüftersteuerung an geänderte Hardware anzupassen. Dieser Beitrag erläutert, wie diese Werkzeuge installiert und benutzt werden können.
Installation
In meinem Home-Lab setzte ich Unraid ein, wo Docker-Container und Plugins installiert werden können. Hierbei kann das IPMI-Plugin installiert werden, wodurch auch der Befehl ipmi-config
(und weitere IPMI-Befehle) für die Konsole installiert werden. Um ipmitool
zu installieren, muss zuerst das Plugin NerdTools installiert, und dann in den Einstellungen des Plugins ipmitool
hinzugefügt werden.
Netzwerk
Sollte der BMC sich nicht mit dem Heimnetz verbinden (z.B. weil eine statische IP gespeichert war, die nicht zur neuen Netzwerkkonfiguration passt), so sollte der BMC eine neue IP-Adresse dynamisch beziehen. Hierfür ändert man die Netzwerkeinstellungen des BMC auf DHCP:
ipmi-config --commit --key-pair=Lan_Conf:IP_Address_Source=Use_DHCP
Benutzer
Sobald man dann die Admin-Webseite aufrufen kann, muss man sich anmelden.
Ab Werk sind die Zugangsdaten ADMIN und ADMIN. Sollte das Passwort jedoch geändert worden sein, kann man ein neues wie folgt definieren:
ipmi-config --commit --key-pair=User2:Password=new_password
Oder mit:
ipmitool user set password 2 new_password
Hierbei ist User2
bzw. die Benutzer-ID 2
ausgewählt, da dies das Konto des Administrators war. Welche Benutzer es gibt, und welche ID sie haben, kann mit dem folgenden Befehlen aufgeführt werden:
ipmi-config --checkout | grep User
oder
ipmitool user list
Lüfter
Da nicht jedes Home-Lab klassische Serverlüfter einsetzt (insbesondere, wenn der Server im Arbeitszimmer stehen und nicht zu laut sein soll) kann es wünschenswert sein, die Lüftereinstellungen anzupassen. Hierfür
ipmi-sensors-config --checkout | grep FAN
oder
ipmitool sensor
Die Ausgabe sollte dann z.B. folgende informationen enthalten:
Section 1009_FAN1
Section 1076_FAN2
Section 1143_FAN3
Section 1210_FAN4
Section 1277_FAN5
bzw. für ipmitool
...
FAN1 | 3100.000 | RPM | ok | 200.000 | 500.000 | 800.000 | 25300.000 | 25400.000 | 25500.000
FAN2 | 2200.000 | RPM | ok | 200.000 | 500.000 | 800.000 | 25300.000 | 25400.000 | 25500.000
FAN3 | 2200.000 | RPM | ok | 200.000 | 500.000 | 800.000 | 25300.000 | 25400.000 | 25500.000
FAN4 | na | | na | na | na | na | na | na | na
FAN5 | 3200.000 | RPM | ok | 200.000 | 500.000 | 800.000 | 25300.000 | 25400.000 | 25500.000
...
Inspiziert man nun die Einstellungen für FAN1 mit:
ipmi-sensors-config --checkout --section=1009_FAN1
erhält man folgende Informationen:
Section 1009_FAN1
## Possible values: Yes/No
Enable_All_Event_Messages Yes
## Possible values: Yes/No
Enable_Scanning_On_This_Sensor Yes
## Possible values: Yes/No
Enable_Assertion_Event_Lower_Critical_Going_Low Yes
## Possible values: Yes/No
Enable_Assertion_Event_Lower_Non_Recoverable_Going_Low Yes
## Possible values: Yes/No
Enable_Assertion_Event_Upper_Critical_Going_High Yes
## Possible values: Yes/No
Enable_Assertion_Event_Upper_Non_Recoverable_Going_High Yes
## Possible values: Yes/No
Enable_Deassertion_Event_Lower_Critical_Going_Low Yes
## Possible values: Yes/No
Enable_Deassertion_Event_Lower_Non_Recoverable_Going_Low Yes
## Possible values: Yes/No
Enable_Deassertion_Event_Upper_Critical_Going_High Yes
## Possible values: Yes/No
Enable_Deassertion_Event_Upper_Non_Recoverable_Going_High Yes
## Give valid input for sensor type = Fan; units = RPM
Lower_Non_Critical_Threshold 800.000000
## Give valid input for sensor type = Fan; units = RPM
Lower_Critical_Threshold 500.000000
## Give valid input for sensor type = Fan; units = RPM
Lower_Non_Recoverable_Threshold 200.000000
## Give valid input for sensor type = Fan; units = RPM
Upper_Non_Critical_Threshold 25300.000000
## Give valid input for sensor type = Fan; units = RPM
Upper_Critical_Threshold 25400.000000
## Give valid input for sensor type = Fan; units = RPM
Upper_Non_Recoverable_Threshold 25500.000000
## Give valid input for sensor type = Fan; units = RPM; 'None' to not use hysteresis
Positive_Going_Threshold_Hysteresis 100.000000
## Give valid input for sensor type = Fan; units = RPM; 'None' to not use hysteresis
Negative_Going_Threshold_Hysteresis 100.000000
EndSection
So kann man nun die Schwellenwerte einzeln auf die Werte ändern, die zu dem eingebauten Lüfter am besten passen. Lüfter von Noctua z.B. drehen sich so langsam, dass eine Schwelle von 500 rpm (Umdrehungen pro Minute) zu hoch sein könnte. Der Server würde dann immer einen Fehler des Lüfters erkennen und in umgehend mit 100% ansteuern. Die Schwellenwerte können dann wie folgt geändert werden:
ipmi-sensors-config --commit --key-pair=1009_FAN1:Lower_Non_Critical_Threshold=300
ipmi-sensors-config --commit --key-pair=1009_FAN1:Lower_Critical_Threshold=200
ipmi-sensors-config --commit --key-pair=1009_FAN1:Lower_Non_Recoverable_Threshold=100
Und auf vergleichbare Weise können auch die Einstellungen der anderen Lüfter geändert werden.