Monitoring eines Fujitsu D3417-B1 unter Debian Jessie

Inzwischen läuft mein neuer Heimserver ja auch schon wieder eine Weile (und das auch zu meiner Zufriedenheit), eine Sache gefiel mir allerdings noch nicht. Nachdem ich bisweilen ein kleiner Kontrollfreak bin, läuft auf meinem Server unter anderem auch die Monitoringlösung Cacti, mit deren Hilfe ich eine ganze Reihe von Parametern des Systems überwachen kann. Was allerdings noch fehlte, war eine Überwachung einiger hardwarenaher Parameter wie zum Beispiel Prozessor-Temperatur und Lüfterdrehzahlen. Seitens Cacti ist das auch schnell eingerichtet, Eric Hall hält dafür dankenswerterweise einige Templates bereit. Das Problem dabei ist allerdings in meinem konkreten Fall das eigentliche Auslesen der Werte mittels lmsensors, was nicht so richtig funktionieren wollte: Über dessen coretemp-isa-0000-Modul ließen sich zwar immerhin die CPU-Temperaturen auslesen, der Rest blieb lmsensors zunächst verschlossen.

Ich erspare dem geneigten Leser an dieser Stelle die ganzen Irrungen und Wirrungen, die ich durchlief, bis es endlich funktionierte und beschreibe stattdessen direkt den Lösungsweg:

    1. Ein wesentliches Problem ist, dass das eingesetzte Mainboard Fujitsu D3417-B1 einen SMBus-Controller verwendet (8086:A123, „Intel Sunrise Point-H“), dessen Treiber erst ab Version 3.18 im Linux-Kernel enthalten ist, während Debian Jessie standardmäßig einen 3.16er Kernel mitbringt. Also muss man sich zunächst einen neueren Kernel beschaffen – zum Glück ist über die Debian Backports ein 4.6er Kernel verfügbar.
      Entsprechend muss zunächst in der /etc/apt/sources.list zunächst die Zeile

      deb http://ftp.debian.org/debian jessie-backports main

      ergänzt werden.

    2. Danach muss mit
      aptitude update

      zunächst die Paketliste aktualisiert werden, worauf hin man mittels

      aptitude install linux-image-4.6.0-0.bpo.1-amd64 linux-headers-4.6.0-0.bpo.1-amd64 make lm-sensors

      sowohl den eigentlichen Kernel als auch die zugehörigen Header-Dateien nebst Make-Tool und lm-sensors (sofern nicht ohnehin schon vorhanden) installieren kann.

    3. Ein Reboot an dieser Stelle würde allerdings auf Grund eines Hardware-Konfliktes dennoch nicht dazu führen, dass der Treiber des SMBus-Controllers korrekt geladen würde. Daher muss zuvor noch in der Datei /etc/default/grub der Parameter „GRUB_CMDLINE_LINUX_DEFAULT“ um den Wert „acpi_enforce_resources=lax“ ergänzt werden. Das kann dann zum Beispiel so aussehen:
      GRUB_CMDLINE_LINUX_DEFAULT="quiet acpi_enforce_resources=lax"

      Diese Änderung muss noch mittels

      update-grub

      in die eigentlichen Grub-Konfigurationsdateien übernommen werden. Danach kann ein Reboot erfolgen.

    4. Nach dem Reboot sollte die Ausgabe von lspci nun so aussehen:
      # lspci -s 1f.4 -vvv
      00:1f.4 SMBus: Intel Corporation Device a123 (rev 31)
              Subsystem: Fujitsu Technology Solutions Device 121d
              Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
              Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
              Interrupt: pin A routed to IRQ 16
              Region 0: Memory at f7336000 (64-bit, non-prefetchable) [size=256]
              Region 4: I/O ports at f040 [size=32]
              Kernel driver in use: i801_smbus
       
      #

      Ist die Zeile „Kernel driver in use“ in der Ausgabe enthalten, funktioniert zumindest schon einmal der SMBus-Controller.

    5. Nun kann man sich den Quellcode des Treibers für das eigentliche Monitoring-IC „Teutates“ vom Fujitsu-FTP-Server herunterladen und in ein Verzeichnis nach Wahl entpacken. Dort findet sich auch eine Installationsanleitung für den Treiber, die zwar grundsätzlich nicht schlecht, aber leider nicht ganz fehlerfrei ist.
    6. Auch das mit dem Treiber mitgelieferte Makefile ist leider nicht korrekt. Entsprechend muss man es ergänzen:
      obj-m += ftsteutates.o
       
      all:
              make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
       
      clean:
              make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

      Die erste Zeile des obigen Inhalts ist bereits in der Datei enthalten, der Rest muss ergänzt werden.

    7. Danach kann durch den Aufruf von
      make all

      der Treiber in Form eines Kernel-Moduls kompiliert werden. Als Ergebnis erhält man die Datei „ftsteutates.ko“.

    8. Die Datei kopiert man in ein Unterverzeichnis von /lib/modules/4.6.0-0.bpo.1-amd64/, ich habe mich für das selbst angelegte Verzeichnis /lib/modules/4.6.0-0.bpo.1-amd64/kernel/fujitsu/ entschieden.
    9. Durch einen Aufruf von
      depmod -a

      weist man Debian an, nach neuen Kernelmodulen zu suchen und damit das frisch kompilierte in die eigene Verwaltung mit aufzunehmen.

    10. Nun kann man das Modul mit
      modprobe ftsteutates

      laden, was ohne Fehlermeldung passieren sollte.

    11. Ist dies geschehen, gilt es, lm-sensors auf den Umgang mit dem Teutates-Chip vorzubereiten. Hierzu muss zunächst das Skript zum Erkennen der Sensoren modifiziert werden, wozu Fujitsu dankenswerterweise eine Patch-Datei im „assets“-Unterverzeichnis des Downloadpakets bereitstellt. Dieser wird mittels
      patch /usr/sbin/sensors-detect ./assets/add-fts-teutates-to-lm-sensors-detect.patch

      angewendet.

    12. Anschließend muss noch die Datei „fts-teutates-D3417-B1.conf“ aus dem gleichen „assets“-Unterverzeichnis nach „/etc/sensors.d“ kopiert werden.
    13. Jetzt kann endlich das Skript
      sensors-detect

      aufgerufen werden. Die Fragen können alle mit „yes“ beantwortet werden inklusive der abschließenden Frage, ob die Datei „/etc/modules“ um die beiden Module „coretemp“ und „ftsteutates“ ergänzt werden sollen.

    14. Nach dem Durchlauf von sensors-detect sollte die Ausgabe von sensors nun wie folgt aussehen:
      # sensors
      coretemp-isa-0000
      Adapter: ISA adapter
      Physical id 0:  +23.0°C  (high = +80.0°C, crit = +100.0°C)
      Core 0:         +19.0°C  (high = +80.0°C, crit = +100.0°C)
      Core 1:         +20.0°C  (high = +80.0°C, crit = +100.0°C)
      Core 2:         +19.0°C  (high = +80.0°C, crit = +100.0°C)
      Core 3:         +20.0°C  (high = +80.0°C, crit = +100.0°C)
       
      ftsteutates-i2c-6-73
      Adapter: SMBus I801 adapter at f040
      in0:         +11.86 V
      VCC 3.3V:     +3.25 V
      3.3V AUX:     +3.36 V
      V_IN (12V):   +3.13 V
      CPU Fan:     1320 RPM
      SYS Fan:      840 RPM
      OEM Fan:        FAULT
      PSU Fan:        FAULT
      n.a.:           FAULT
      n.a.:           FAULT
      n.a.:           FAULT
      n.a.:           FAULT
      PECI:         +24.0°C
      Graphics:     +23.0°C
      Ambient:      +23.0°C
      Core:         +21.0°C
      Memory:       +22.0°C
      PCH:          +32.0°C
      Teutates:       FAULT
      n.a.:           FAULT
      n.a.:           FAULT
      n.a.:           FAULT
      n.a.:           FAULT
      n.a.:           FAULT
      n.a.:           FAULT
      n.a.:           FAULT
      n.a.:           FAULT
      n.a.:           FAULT
       
      #

      Eventuell muss zuvor sensors auch einmal mit dem Parameter „sensors -s“ aufgerufen werden

    15. Damit wäre dann das Einbinden des Treibers erfolgreich abgeschlossen. Zur Einbindung der Werte in Cacti kann man einfach der beiligenden Anleitung der oben genannten Cacti-Templates folgen.

Abschließend bleibt noch festzuhalten, dass das Kompilieren des Kernel-Treibermoduls für das Monitoring-IC natürlich am Debian Paketmanagement vorbei erfolgte. D.h., bei zukünftigen Wechseln des Kernels muss das Modul immer jeweils wieder neu kompiliert werden. (Es sei denn, es wird irgendwann offiziell in den Kernel aufgenommen.)

Schreibe einen Kommentar