PowerFlex: Sammanställning på begäran av PowerFlex SDC-drivrutinen
Summary: I den här kunskapsbaserade artikeln beskrivs hur du aktiverar kompilering på begäran av PowerFlex SDC-drivrutinen på Linux-system.
Instructions
Den här funktionen är avsedd att hantera ABI-ändringar (Application Binary Interface) i Linux-kärnan, vilket kan göra att en SDC-drivrutin, som är förkompilerad för en annan kärna, inte kan läsas in.
Historiskt sett innehöll ett SDC-installationspaket för Linux (RPM/DEB) flera SDC-kärnmoduler för olika kärnor i Linux-distributionen. För användare som installerar på distributioner som Ubuntu, som släpper frekventa kerneluppdateringar, har det funnits möjlighet att ställa in SDC-tjänsten så att den ansluter till Dells fjärrlagringsplats med SDC-drivrutiner och försöker ladda ner en SDC från den.
Med den nya funktionen kan användare kompilera en perfekt matchning av SDC-drivrutinen för sin pågående kärna utan att förlita sig på tillgängligheten av en matchande SDC i drivrutinens förråd.
Målgrupp: Användare som ofta uppdaterar sina kernels av säkerhetsskäl och som kör specialiserade anpassade kernels kan dra nytta av funktionen.
Förutsättningar
För att kompileringsproceduren ska lyckas måste följande paket vara installerade på SDC-tjänstens värd:
- Den senaste versionen av GNU C-kompilatorn (GCC), GCC
- GNU make(1).
- Kernelutvecklingspaketet för den kernel kernel som körs. Det här paketet är ofta tillgängligt med följande namn:
- kernel-devel för distributioner som använder RPM-pakethanteraren. (Red Hat, SUSE, så vidare)
- linux-headers för distributioner som använder Debians pakethanterare (Debian, Ubuntu, osv.)
Automatisk kompilering
på begäranFör att tillåta automatisk kompilering på begäran av SDC-drivrutinen bör värden uppfylla alla krav som anges i avsnittet Förutsättningar ovan. När du tar fram SDC-drivrutinen försöker SDC-tjänsten kompilera SDC-drivrutinen om alla följande villkor är uppfyllda:
-
En SDC som matchar den kernel som körs är inte tillgänglig i drivrutinscachen.
Mer information om drivrutinscachen finns i Drivrutinscache nedan. -
En fil med namnet
/etc/emc/scaleio/scini_sync/.build_sciniFinns.
Filens innehåll ignoreras. Användare bör dock hålla den tom för eventuella framtida förbättringar.
Filen kan skapas genom att köra entouch(1)befallning.
Manuell kompilering
SDC-drivrutinen bör kompileringsvärden uppfylla alla krav som anges i avsnittet Förutsättningar ovan.
Följ dessa steg om du vill kompilera SDC-drivrutinen manuellt:
-
Kopiera kompileringspaketet från katalogen i drivrutinscachen till en tillfällig katalog. Var paketet finns beror på PowerFlex-versionen och Linux-distributionen.
Till exempel är paketet för PowerFlex 3.6.3 SDC för Red Hat Enterprise Linux 9-baserade distributioner:/bin/emc/scaleio/scini_sync/driver_cache/RHEL9/3.6.3000.128/Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
Mer information om drivrutinscachen finns i Drivrutinscache nedan. -
Gå till den temporära katalogen och packa upp kompileringspaketet.
Exempel:tar xzf Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
-
Kör
build_driver.shskriptet, som finns på den översta nivån i det extraherade innehållet. Utan argument försöker skriptet kompilera drivrutinen för den kernel som körs.
För att kompilera för en annan kärna, tillhandahåll sökvägen till den kärnans huvudkataloger med "-o" och "-s" kommandoradsargument.
Om du vill ha mer information om anrop kör du:build_driver.sh -h
-
Kompileringsprocessens utdata skrivs ut till standardutdata.
Efter en lyckad kompilering kan den resulterande SDC-drivrutinsfilen, scini.ko, hittas på./ini/scini.ko. -
Kopiera drivrutinsfilen från kompileringsvärden till SDC-målvärden till en katalog som matchar målkernelversionen på samma plats som kompileringspaketet i drivrutinscachen.
För en drivrutin som följs för kernelversion 5.14.0-362.24.1.el9_3.x86_64 är till exempel målsökvägen för drivrutinsfilen/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
Drivrutinscache
En SDC-drivrutin som kompilerats för en viss kärna kopieras till lämplig katalog i drivrutinscachen, och dess kompilering utlöses inte igen.
Platsen för drivrutinscachen är /bin/emc/scaleio/scini_sync/drive_cache.
Skapa logg
När automatisk kompilering på begäran är aktiverat läggs alla kompileringsloggar till i /bin/emc/scaleio/scini_sync/driver_build.log. – Herr talman,
En lyckad kompilering slutar med meddelanden som liknar följande:
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-behållare
SDC-init-containern är förkonfigurerad för att använda funktionen. Den innehåller gcc och gör paket, och /etc/emc/scaleio/scini_sync/.build_scini filen finns. Men för att kompileringar ska lyckas måste kernel-huvudkatalogen för värdkerneln mappas till containern för att /usr/src. Om du till exempel vill köra behållaren manuellt med docker lägger du till -v/usr/src:/usr/src till kommandoraden, för att kernel headers-katalogen ska vara tillgänglig för kompileringsskriptet.
Begränsning
Det kan finnas en situation där GCC-kompilatorn som görs tillgänglig på värdens Linux-distribution inte är tillräckligt avancerad för att kompilera SDC mot en viss kärna. Denna situation bör vara sällsynt, eftersom den förmodligen kommer att involvera en anpassad kärna och inte en gemensam för den distributionen. I det här fallet måste användaren installera en mer avancerad GCC från en icke-standardiserad paketlagringsplats, och platsen för den GCC:n måste anges i $PATH. Det finns inget automatiskt sätt att tillhandahålla en alternativ GCC-sökväg till SDC-tjänsten.
Versioner
3.6.3 och senare
4.5.2 eller senare
Videoinstruktioner