PowerFlex: Compilazione on-demand del driver PowerFlex SDC
Summary: Questo articolo della Knowledge Base descrive come abilitare la compilazione on-demand del driver PowerFlex SDC sui sistemi Linux.
Instructions
Questa funzione ha lo scopo di supportare le modifiche ABI (Application Binary Interface) nel kernel Linux, che potrebbero impedire il caricamento di un driver SDC, precompilato per un kernel diverso.
In passato, un pacchetto di installazione SDC per Linux (RPM/DEB) conteneva diversi moduli kernel SDC per vari kernel di quella distribuzione Linux. Per gli utenti che eseguono l'installazione su distribuzioni come Ubuntu, che rilascia frequenti aggiornamenti del kernel, è stata possibile configurare il servizio SDC in modo che si connetta al repository remoto di Dell dei driver SDC e tenti di scaricare un SDC da esso.
Con la nuova funzionalità, gli utenti possono compilare una corrispondenza perfetta del driver SDC per il kernel in esecuzione senza fare affidamento sulla disponibilità di un SDC corrispondente nel repository del driver.
Target: Gli utenti che aggiornano frequentemente i propri kernel per motivi di sicurezza e che eseguono kernel personalizzati specializzati possono trarre vantaggio da questa funzionalità.
Prerequisiti
Affinché la procedura di compilazione abbia esito positivo, è necessario installare i seguenti pacchetti sull host del servizio SDC:
- L'ultima versione del compilatore GNU C (GCC), GCC
- GNU make(1).
- Il pacchetto di sviluppo del kernel per il kernel in esecuzione. Questo pacchetto è comunemente disponibile con i seguenti nomi:
- kernel-devel per le distribuzioni che utilizzano il gestore di pacchetti RPM. (Red Hat, SUSE e così via)
- linux-headers per le distribuzioni che usano il gestore di pacchetti Debian (Debian, Ubuntu, ecc.)
Compilazione
automatica on-demandPer consentire la compilazione automatica on-demand del driver SDC, l'host deve soddisfare tutti i prerequisiti elencati nella sezione Prerequisiti sopra. Quando si attiva il driver SDC, il servizio SDC tenta di compilare il driver SDC se vengono soddisfatte tutte le seguenti condizioni:
-
Un SDC corrispondente al kernel in esecuzione non è disponibile nella cache dei driver.
Per informazioni dettagliate sulla cache dei driver, vedere Cache dei driver di seguito. -
Un file denominato
/etc/emc/scaleio/scini_sync/.build_sciniEsiste.
Il contenuto del file viene ignorato. Tuttavia, gli utenti dovrebbero mantenerlo vuoto per eventuali miglioramenti futuri.
Il file può essere creato eseguendo untouch(1).
Compilazione
manualeSDC, l'host di compilazione deve soddisfare tutti i prerequisiti elencati nella sezione Prerequisiti precedente.
Per compilare manualmente il driver SDC, attenersi alla seguente procedura:
-
Copiare il pacchetto di compilazione dalla relativa directory nella cache dei driver in una directory temporanea. La posizione del pacchetto dipende dalla versione di PowerFlex e dalla distribuzione Linux.
Ad esempio, il pacchetto per l SDC PowerFlex 3.6.3 per le distribuzioni basate su Red Hat Enterprise Linux 9 è:/bin/emc/scaleio/scini_sync/driver_cache/RHEL9/3.6.3000.128/Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
Per informazioni dettagliate sulla cache dei driver, vedere Cache dei driver di seguito. -
Passare alla directory temporanea ed estrarre il pacchetto di compilazione.
Esempio:tar xzf Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
-
Eseguire
build_driver.shche si trova al livello superiore del contenuto estratto. Senza argomenti, lo script tenta di compilare il driver per il kernel in esecuzione.
Per eseguire la compilazione per un kernel diverso, fornire il percorso alle directory di intestazione del kernel con "-o" e "-s" argomenti della riga di comando.
Per ulteriori informazioni sulla chiamata, eseguire:build_driver.sh -h
-
L'output del processo di compilazione viene stampato nell'output standard.
Al termine della compilazione, il file del driver SDC risultante, scini.ko, è disponibile all'indirizzo./ini/scini.ko. -
Copiare il file del driver dall'host di compilazione all host SDC di destinazione in una directory corrispondente alla versione del kernel di destinazione, nella stessa posizione del pacchetto di compilazione, nella cache del driver.
Ad esempio, per un driver conforme alla versione del kernel 5.14.0-362.24.1.el9_3.x86_64, il percorso di destinazione per il file del driver è/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
Cache
driverUn driver SDC compilato correttamente per un kernel specifico verrà copiato nella directory appropriata della cache del driver e la sua compilazione non verrà nuovamente attivata.
La posizione della cache del driver è /bin/emc/scaleio/scini_sync/drive_cache.
Log
di compilazioneQuando la compilazione automatica on-demand è abilitata, tutti i registri di compilazione vengono aggiunti a /bin/emc/scaleio/scini_sync/driver_build.log.
Una compilation corretta termina con messaggi simili ai seguenti:
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.
Contenitore
di inizializzazione SDCIl contenitore di inizializzazione SDC è preconfigurato per l'utilizzo della funzione. Include il gcc e crea pacchetti, e il /etc/emc/scaleio/scini_sync/.build_scini Il file è presente. Tuttavia, affinché le compilazioni abbiano esito positivo, la directory delle intestazioni del kernel per il kernel host deve essere mappata al container, a /usr/src. Ad esempio, per eseguire manualmente il container con Docker, dopo aver installato il pacchetto kernel-devel corretto sull host, aggiungere -v/usr/src:/usr/src alla riga di comando, affinché la directory delle intestazioni del kernel sia disponibile per lo script di compilazione.
Limitazione
È possibile che il compilatore GCC reso disponibile sulla distribuzione Linux dell host non sia sufficientemente avanzato per compilare l SDC su un kernel. Questa situazione dovrebbe essere rara, in quanto probabilmente coinvolgerà un kernel personalizzato e non uno comune a quella distribuzione. In questo caso, l'utente deve installare un GCC più avanzato da un repository di pacchetti non standard e la posizione di tale GCC dovrà essere specificata in $PATH. Non esiste un modo automatico per fornire un percorso GCC alternativo al servizio SDC.
Versioni
3.6.3 o versioni successive
4.5.2 o versioni successive
Istruzioni video