PowerFlex: Behovsbasert kompilering av PowerFlex SDC-driveren
Summary: Denne kunnskapsbaserte artikkelen beskriver hvordan du aktiverer behovsbasert kompilering av PowerFlex SDC-driveren på Linux-systemer.
Instructions
Denne funksjonen er ment å imøtekomme ABI-endringer (Application Binary Interface) i Linux-kjernen, noe som kan føre til at en SDC-driver, forhåndskompilert for en annen kjerne, ikke kan lastes inn.
Historisk sett inneholdt en SDC-installasjonspakke for Linux (RPM/DEB) flere SDC-kjernemoduler for forskjellige kjerner av den Linux-distribusjonen. For brukere som installerer på distribusjoner som Ubuntu, som utgir hyppige kjerneoppdateringer, har det vært mulighet for å konfigurere SDC-tjenesten til å koble til Dells eksterne lager av SDC-drivere og prøve å laste ned en SDC fra den.
Med den nye funksjonen kan brukere kompilere en perfekt match av SDC-driveren for deres kjørende kjerne uten å stole på tilgjengeligheten av en matchende SDC i driverens depot.
Målgruppe: Brukere som ofte oppdaterer kjernene sine av sikkerhetsgrunner, og som kjører spesialiserte tilpassede kjerner, kan dra nytte av funksjonen.
Forutsetninger
For at kompileringsprosedyren skal lykkes, må følgende pakker installeres på verten for SDC-tjenesten:
- Den nyeste versjonen av GNU C-kompilatoren (GCC), GCC
- GNU gjør(1).
- Kjerneutviklingspakken for den kjørende kjernen. Denne pakken er vanligvis tilgjengelig med følgende navn:
- kjerneutvikling for distribusjoner ved hjelp av RPM-pakkebehandling. (Red Hat, SUSE, så videre)
- linux-headere for distribusjoner som bruker Debian pakkebehandler (Debian, Ubuntu, så videre)
Automatisk on-demand-kompilering
For å tillate automatisk kompilering av SDC-driveren på forespørsel, må verten oppfylle alle forutsetningene som er oppført under delen Forutsetninger ovenfor. Når du henter frem SDC-driveren, prøver SDC-tjenesten å kompilere SDC-driveren hvis alle følgende betingelser er oppfylt:
-
En SDC som samsvarer med den kjørende kjernen, er ikke tilgjengelig i driverbufferen.
Hvis du vil ha mer informasjon om driverbufferen, kan du se Driverbuffer nedenfor. -
En fil med navnet
/etc/emc/scaleio/scini_sync/.build_sciniFinnes.
Filens innhold ignoreres. Brukere bør imidlertid holde den tom for mulige fremtidige forbedringer.
Filen kan opprettes ved å kjøre entouch(1)kommando.
Manuell kompilering
SDC-driveren, må kompileringsverten oppfylle alle forutsetningene som er oppført under delen Forutsetninger ovenfor.
Hvis du vil kompilere SDC-driveren manuelt, gjør du følgende:
-
Kopier kompileringsbunten fra katalogen i driverbufferen til en midlertidig katalog. Plasseringen av bunten avhenger av PowerFlex-versjonen og Linux-distribusjonen.
For eksempel er bunten for PowerFlex 3.6.3 SDC for Red Hat Enterprise Linux 9-baserte distribusjoner:/bin/emc/scaleio/scini_sync/driver_cache/RHEL9/3.6.3000.128/Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
Hvis du vil ha mer informasjon om driverbufferen, kan du se Driverbuffer nedenfor. -
Gå til den midlertidige katalogen, og pakk ut kompileringspakken.
Eksempel:tar xzf Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
-
Kjør
build_driver.sh-skriptet, som du finner på øverste nivå av det utpakkede innholdet. Uten argumenter forsøker skriptet å kompilere driveren for den kjørende kjernen.
Hvis du vil kompilere for en annen kjerne, angir du banen til kjernens overskriftskataloger med "-o" og "-s" kommandolinjeargumenter.
Hvis du vil ha mer informasjon om aktivering, kjører du:build_driver.sh -h
-
Kompileringsprosessutgangen skrives ut til standard utskrift.
Etter en vellykket kompilering finner du den resulterende SDC-driverfilen, scini.ko, på./ini/scini.ko. -
Kopier driverfilen fra kompileringsverten til SDC-målverten til en katalog som samsvarer med målkjerneversjonen, på samme sted som kompileringspakken, i driverbufferen.
For en driver som for eksempel overholdes for kjerneversjon 5.14.0-362.24.1.el9_3.x86_64, er målbanen 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
Driverbuffer
En SDC-driver kompilert for en bestemt kjerne vil bli kopiert til riktig katalog i driverbufferen, og kompileringen vil ikke bli utløst igjen.
Driverbufferens plassering er /bin/emc/scaleio/scini_sync/drive_cache.
Bygge logg
Når automatisk behovsbasert kompilering er aktivert, legges alle kompileringslogger til /bin/emc/scaleio/scini_sync/driver_build.log.
En vellykket kompilering avsluttes med meldinger som ligner på 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
Init-beholderen for SDC leveres forhåndskonfigurert til å bruke funksjonen. Det inkluderer gcc og lager pakker, og /etc/emc/scaleio/scini_sync/.build_scini Filen er til stede. For at kompileringer skal lykkes, må imidlertid kjernehodekatalogen for vertskjernen tilordnes beholderen, til /usr/src. Hvis du for eksempel vil kjøre beholderen manuelt med docker, legger du til den riktige kjerneutviklingspakken på verten etter at du har installert den riktige kjerneutviklingspakken på verten -v/usr/src:/usr/src til kommandolinjen, for at katalogen kjerneoverskrifter skal være tilgjengelig for kompileringsskriptet.
Begrensning
Det kan være en situasjon der GCC-kompilatoren som er gjort tilgjengelig på vertens Linux-distribusjon, ikke er avansert nok til å kompilere SDC mot noen kjerne. Denne situasjonen bør være sjelden, da den sannsynligvis vil innebære en tilpasset kjerne og ikke en som er felles for den distribusjonen. I dette tilfellet må brukeren installere en mer avansert GCC fra et ikke-standard pakkelager, og plasseringen av den GCCen må spesifiseres i $PATH. Det finnes ingen automatisk måte å tilby en alternativ GCC-bane til SDC-tjenesten på.
Versjoner
3.6.3 eller høyere 4.5.2 eller høyere
Videoinstruksjoner