PowerFlex: On-demand-kompilering af PowerFlex SDC-driveren
Summary: Denne vidensbaserede artikel beskriver, hvordan du aktiverer on-demand-kompilering af PowerFlex SDC-driveren på Linux-systemer.
Instructions
Denne funktion er beregnet til at imødekomme ændringer i ABI (Application Binary Interface) i Linux-kernen, som kan medføre, at en SDC-driver, der er prækompileret til en anden kerne, ikke kan indlæses.
Historisk set indeholdt en SDC-installationspakke til Linux (RPM/DEB) flere SDC-kernemoduler til forskellige kerner i den Linux-distribution. For brugere, der installerer på distributioner som Ubuntu, der udgiver hyppige kerneopdateringer, har der været mulighed for at konfigurere SDC-tjenesten til at oprette forbindelse til Dells fjernlager med SDC-drivere og forsøge at downloade en SDC fra den.
Med den nye funktion kan brugerne kompilere et perfekt match af SDC-driveren til deres kørende kerne uden at stole på tilgængeligheden af en matchende SDC i driverens lager.
Målgruppe: Brugere, der ofte opdaterer deres kerner af sikkerhedsmæssige årsager, og som kører specialiserede brugerdefinerede kerner, kan drage fordel af funktionen.
Forudsætninger
For at kompileringsproceduren skal lykkes, skal følgende pakker installeres på værten for SDC-tjenesten:
- Den seneste version af GNU C-kompilatoren (GCC), GCC
- GNU make(1).
- Kerneudviklingspakken til den kørende kerne. Denne pakke er almindeligt tilgængelig med følgende navne:
- kernel-devel til distributioner ved hjælp af RPM-pakkehåndteringen. (Red Hat, SUSE, så videre)
- linux-headere til distributioner ved hjælp af Debians pakkehåndtering (Debian, Ubuntu, så videre)
Automatisk on-demand-kompilering
For at muliggøre automatisk on-demand-kompilering af SDC-driveren skal værten opfylde alle de forudsætninger, der er anført under afsnittet Forudsætninger ovenfor. Når SDC-driveren åbnes, forsøger SDC-tjenesten at kompilere SDC-driveren, hvis alle følgende betingelser er opfyldt:
-
En SDC, der matcher den kørende kerne, er ikke tilgængelig i drivercachen.
Du kan finde flere oplysninger om drivercachen under Drivercache nedenfor. -
En fil med navnet
/etc/emc/scaleio/scini_sync/.build_sciniFindes.
Filens indhold ignoreres. Brugere bør dog holde den tom for mulige fremtidige forbedringer.
Filen kan oprettes ved at køre entouch(1)kommando.
Manuel kompilering
SDC-driver, skal kompileringsværten opfylde alle de forudsætninger, der er anført i afsnittet Forudsætninger ovenfor.
Følg disse trin for manuelt at kompilere SDC-driveren:
-
Kopier kompileringsbundtet fra dets mappe i drivercachen til en midlertidig mappe. Pakkens placering afhænger af PowerFlex-versionen og Linux-distributionen.
For eksempel er pakken til PowerFlex 3.6.3 SDC, til Red Hat Enterprise Linux 9-baserede distributioner:/bin/emc/scaleio/scini_sync/driver_cache/RHEL9/3.6.3000.128/Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
Du kan finde flere oplysninger om drivercachen under Drivercache nedenfor. -
Gå til den midlertidige mappe, og udpak kompileringsbundtet.
Eksempel:tar xzf Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
-
Kør
build_driver.shscript, placeret på øverste niveau af det udpakkede indhold. Uden argumenter forsøger scriptet at kompilere driveren til den kørende kerne.
For at kompilere til en anden kerne skal du angive stien til kernens headermapper med "-o" og "-s" kommandolinjeargumenter.
Du kan få flere oplysninger om aktivering ved at køre:build_driver.sh -h
-
Outputtet fra kompileringsprocessen udskrives til standardoutput.
Efter en vellykket kompilering kan den resulterende SDC-driverfil, scini.ko, findes på./ini/scini.ko. -
Kopiér driverfilen fra kompileringsværten til SDC-destinationsværten til en mappe, der matcher målkerneversionen, på samme placering som kompileringsbundtet i drivercachen.
For en driver, der er overholdt kerneversion 5.14.0-362.24.1.el9_3.x86_64, er målstien for driverfilen/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
Drivercache
En SDC-driver, der er kompileret til en bestemt kerne, kopieres til den relevante mappe i drivercachen, og dens kompilering udløses ikke igen.
Drivercachens placering er /bin/emc/scaleio/scini_sync/drive_cache.
Build-log
Når automatisk on-demand-kompilering er aktiveret, føjes alle kompileringslogfiler til /bin/emc/scaleio/scini_sync/driver_build.log.
En vellykket samling slutter med meddelelser, der ligner følgende:
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
SDC init-beholderen leveres forudkonfigureret til at bruge funktionen. Det omfatter GCC og fremstiller pakker, og /etc/emc/scaleio/scini_sync/.build_scini Filen er til stede. Men hvis kompileringer skal lykkes, skal kerneheadermappen for værtskernen knyttes til beholderen for at /usr/src. Hvis du f.eks. vil køre beholderen manuelt med docker, skal du tilføje -v/usr/src:/usr/src til kommandolinjen, for at mappen kernel headers skal være tilgængelig for kompileringsscriptet.
Begrænsning
Der kan være en situation, hvor GCC-compileren, der er tilgængelig på værtens Linux-distribution, ikke er avanceret nok til at kompilere SDC mod en kerne. Denne situation bør være sjælden, da den sandsynligvis vil involvere en brugerdefineret kerne og ikke en, der er fælles for den distribution. I dette tilfælde skal brugeren installere et mere avanceret GCC fra et ikke-standardpakkelager, og placeringen af dette GCC skal angives i $PATH. Der er ingen automatisk måde at levere en alternativ GCC-sti til SDC-tjenesten på.
Versioner
3.6.3 eller højere
4.5.2 eller højere
Videoinstruktioner