PowerFlex: On-Demand-Kompilierung des PowerFlex-SDC-Treibers
Summary: In diesem wissensbasierten Artikel wird beschrieben, wie Sie die On-Demand-Kompilierung des PowerFlex SDC-Treibers auf Linux-Systemen aktivieren.
Instructions
Diese Funktion ist für ABI-Änderungen (Application Binary Interface) im Linux-Kernel vorgesehen, die dazu führen können, dass ein für einen anderen Kernel vorkompilierter SDC-Treiber nicht geladen wird.
In der Vergangenheit enthielt ein SDC-Installationspaket für Linux (RPM/DEB) mehrere SDC-Kernel-Module für verschiedene Kernels dieser Linux-Distribution. Für Nutzer, die auf Distributionen wie Ubuntu installieren, die häufige Kernel-Updates veröffentlichen, gibt es die Möglichkeit, den SDC-Service einzurichten, um eine Verbindung zum Remote-Repository der SDC-Treiber von Dell herzustellen und zu versuchen, einen SDC davon herunterzuladen.
Mit der neuen Funktion können Nutzer eine perfekte Übereinstimmung des SDC-Treibers für ihren laufenden Kernel zusammenstellen, ohne auf die Verfügbarkeit eines passenden SDC im Repository des Treibers angewiesen zu sein.
Zielgruppe: Benutzer, die ihre Kernel aus Sicherheitsgründen häufig aktualisieren und spezialisierte angepasste Kernel ausführen, können von dieser Funktion profitieren.
Voraussetzungen
Damit das Kompilierungsverfahren erfolgreich ist, müssen die folgenden Pakete auf dem Host des SDC-Services installiert werden:
- Die neueste Version des GNU C Compiler (GCC), GCC
- GNU make(1).
- Das Kernel-Entwicklungspaket für den ausgeführten Kernel. Dieses Paket ist allgemein unter den folgenden Namen verfügbar:
- kernel-devel für Distributionen mit dem RPM-Paketmanager. (Red Hat, SUSE usw.)
- linux-header für Distributionen, die den Debian-Paketmanager verwenden (Debian, Ubuntu usw.)
Automatische On-Demand-Kompilierung
Um eine automatische On-Demand-Kompilierung des SDC-Treibers zu ermöglichen, sollte der Host alle Voraussetzungen erfüllen, die oben im Abschnitt Voraussetzungen aufgeführt sind. Beim Aufrufen des SDC-Treibers versucht der SDC-Service, den SDC-Treiber zu kompilieren, wenn alle folgenden Bedingungen erfüllt sind:
-
Ein SDC, der mit dem ausgeführten Kernel übereinstimmt, ist im Treibercache nicht verfügbar.
Weitere Informationen zum Treiber-Cache finden Sie unter Treiber-Cache unten. -
Eine Datei mit dem Namen
/etc/emc/scaleio/scini_sync/.build_sciniexistiert.
Der Inhalt der Datei wird ignoriert. Nutzer sollten es jedoch für mögliche zukünftige Verbesserungen leer lassen.
Die Datei kann erstellt werden, indem eintouch(1).
Manuelle Kompilierung
SDC-Treiber, sollte der Kompilierungshost alle Voraussetzungen erfüllen, die oben im Abschnitt Voraussetzungen aufgeführt sind.
Gehen Sie folgendermaßen vor, um den SDC-Treiber manuell zu kompilieren:
-
Kopieren Sie das Kompilierungspaket aus dem zugehörigen Verzeichnis im Treibercache in ein temporäres Verzeichnis. Der Speicherort des Bundles hängt von der PowerFlex-Version und der Linux-Distribution ab.
Das Bundle für den PowerFlex 3.6.3 SDC für Red Hat Enterprise Linux 9-basierte Distributionen lautet beispielsweise:/bin/emc/scaleio/scini_sync/driver_cache/RHEL9/3.6.3000.128/Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
Weitere Informationen zum Treiber-Cache finden Sie unter Treiber-Cache unten. -
Navigieren Sie zum temporären Verzeichnis und extrahieren Sie das Kompilierungspaket.
Beispiel:tar xzf Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
-
Führen Sie
build_driver.shSkript, das sich auf der obersten Ebene des extrahierten Inhalts befindet. Ohne Argumente versucht das Skript, den Treiber für den ausgeführten Kernel zu kompilieren.
Um für einen anderen Kernel zu kompilieren, geben Sie den Pfad zu den Header-Verzeichnissen dieses Kernels mit dem Befehl "-o" und "-s" Befehlszeilenargumente.
Weitere Informationen zum Aufrufen erhalten Sie, indem Sie Folgendes ausführen:build_driver.sh -h
-
Die Ausgabe des Kompilierungsprozesses wird auf die Standardausgabe gedruckt.
Nach erfolgreicher Kompilierung ist die resultierende SDC-Treiberdatei scini.ko unter folgendem Link verfügbar:./ini/scini.ko. -
Kopieren Sie die Treiberdatei vom Kompilierungshost auf den SDC-Zielhost in ein Verzeichnis, das der Zielkernel-Version entspricht, und zwar am selben Speicherort wie das Kompilierungspaket im Treibercache.
Beispiel: Für einen Treiber, der für die Kernel-Version 5.14.0-362.24.1.el9_3.x86_64 kompiliert wurde, lautet der Zielpfad für die Treiberdatei/bin/emc/scaleio/scini_sync/driver_cache/RHEL9/3.6.3000.128/5.14.0-362.24.1.el9_3.x86_64/scini.ko.
Additional Information
Treiber-Cache
Ein für einen bestimmten Kernel erfolgreich kompilierter SDC-Treiber wird in das entsprechende Verzeichnis des Treibercaches kopiert und seine Kompilierung wird nicht erneut ausgelöst.
Der Speicherort des Treiber-Caches ist /bin/emc/scaleio/scini_sync/drive_cache.
Build-Protokoll
Wenn die automatische On-Demand-Kompilierung aktiviert ist, werden alle Kompilierungsprotokolle an /bin/emc/scaleio/scini_sync/driver_build.logaus.
Eine erfolgreiche Kompilierung endet mit Meldungen ähnlich der folgenden:
make: Entering directory '/usr/src/linux-headers-5.15.0-30-generic' "Following additional compilation's conditions are defined:" BLK_MQ_HEADER BLK_DEV_MAX_SEGMENTS SOCKET_HAS_NET_IN_CREATE BIO_BI_BDEV BIO_BI_STATUS BLK_QUEUE_FLAG_FUNCS BLK_INITIALIZE_RMQ_FN WAIT_QUEUE_ENTRY_T HAS_SCSI_REQUEST HAS_SCSI_REQ HAS_SCSI_CMND HAS_SCSI_IOCTL HAS_SCSI_IOCTL_WITH_GENDISK HAS_QUEUE_FLAG_DISCARD HAS_DISK_LIVE_IN_GENHD CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_main.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_mos.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_net.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_ioctl.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_blk_io.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_blk_dev.o LD [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.o "Following additional compilation's conditions are defined:" BLK_MQ_HEADER BLK_DEV_MAX_SEGMENTS SOCKET_HAS_NET_IN_CREATE BIO_BI_BDEV BIO_BI_STATUS BLK_QUEUE_FLAG_FUNCS BLK_INITIALIZE_RMQ_FN WAIT_QUEUE_ENTRY_T HAS_SCSI_REQUEST HAS_SCSI_REQ HAS_SCSI_CMND HAS_SCSI_IOCTL HAS_SCSI_IOCTL_WITH_GENDISK HAS_QUEUE_FLAG_DISCARD HAS_DISK_LIVE_IN_GENHD MODPOST /tmp/PowerFlex_driver_build_hpoM6l/ini/Module.symvers CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.mod.o LD [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.ko BTF [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.ko Skipping BTF generation for /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.ko due to unavailability of vmlinux make: Leaving directory '/usr/src/linux-headers-5.15.0-30-generic' 02-Apr-2024 11:46:48 INFO: Success.
SDC-Init-Container
Der SDC-Init-Container ist für die Verwendung der Funktion vorkonfiguriert. Es enthält den gcc und erstellt Pakete, und die /etc/emc/scaleio/scini_sync/.build_scini Datei ist vorhanden. Damit Kompilierungen jedoch erfolgreich sind, muss das Kernel-Header-Verzeichnis für den Hostkernel dem Container zugeordnet werden, um /usr/src. Um den Container beispielsweise manuell mit Docker auszuführen, fügen Sie nach der Installation des richtigen kernel-devel-Pakets auf dem Host Folgendes hinzu: -v/usr/src:/usr/src in die Befehlszeile, damit das Kernel-Header-Verzeichnis für das Kompilierungsskript verfügbar ist.
Einschränkung
Es kann vorkommen, dass der GCC-Compiler, der auf der Linux-Distribution des Hosts zur Verfügung gestellt wird, nicht fortschrittlich genug ist, um den SDC mit einem Kernel zu kompilieren. Diese Situation sollte selten auftreten, da es sich wahrscheinlich um einen angepassten Kernel handelt und nicht um einen, der für diese Distribution üblich ist. In diesem Fall muss der Nutzer einen erweiterten GCC aus einem nicht standardmäßigen Paket-Repository installieren, und der Speicherort dieses GCC muss in $PATH angegeben werden. Es gibt keine automatische Möglichkeit, einen alternativen GCC-Pfad für den SDC-Service bereitzustellen.
Versionen
3.6.3 oder höher
4.5.2 oder höher
Videoanleitungen