PowerFlex : Compilation à la demande du pilote PowerFlex SDC
Summary: Cet article de la base de connaissances explique comment activer la compilation à la demande du pilote PowerFlex SDC sur les systèmes Linux.
Instructions
Cette fonctionnalité est destinée à prendre en charge les modifications de l’interface binaire d’application (ABI) dans le noyau Linux, ce qui peut entraîner l’échec du chargement d’un pilote SDC, précompilé pour un noyau différent.
Historiquement, un module d’installation SDC pour Linux (RPM/DEB) contenait plusieurs modules de noyau SDC pour différents noyaux de cette distribution Linux. Pour les utilisateurs qui installent sur des distributions telles qu’Ubuntu, qui publie des mises à jour fréquentes du noyau, il est possible de configurer le service SDC pour se connecter au référentiel distant de pilotes SDC de Dell et tenter de télécharger un SDC à partir de celui-ci.
Avec cette nouvelle fonctionnalité, les utilisateurs peuvent compiler une correspondance parfaite du pilote SDC pour leur noyau en cours d’exécution sans dépendre de la disponibilité d’un SDC correspondant dans le référentiel du pilote.
Public cible : Les utilisateurs qui mettent fréquemment à jour leurs noyaux pour des raisons de sécurité et qui exécutent des noyaux personnalisés spécialisés peuvent bénéficier de cette fonctionnalité.
Conditions préalables
Pour que la procédure de compilation réussisse, les packages suivants doivent être installés sur l’hôte du service SDC :
- La dernière version du compilateur C GNU (GCC), GCC
- GNU make(1).
- Package de développement du noyau pour le noyau en cours d’exécution. Ce package est généralement disponible sous les noms suivants :
- kernel-devel pour les distributions à l’aide du gestionnaire de paquets RPM. (Red Hat, SUSE, etc.)
- linux-headers pour les distributions utilisant le gestionnaire de paquets Debian (Debian, Ubuntu, etc.)
Compilation
automatique à la demandePour permettre la compilation automatique et à la demande du pilote SDC, l’hôte doit remplir toutes les conditions préalables répertoriées dans la section Conditions préalables ci-dessus. Lors de l’affichage du pilote SDC, le service SDC tente de compiler le pilote SDC si toutes les conditions suivantes sont remplies :
-
Un SDC correspondant au noyau en cours d’exécution n’est pas disponible dans le cache de pilotes.
Pour plus d’informations sur le cache de pilotes, reportez-vous à la section Cache de pilotes ci-dessous. -
Un fichier nommé
/etc/emc/scaleio/scini_sync/.build_sciniExiste.
Le contenu du fichier est ignoré. Toutefois, les utilisateurs doivent le laisser vide pour d’éventuelles améliorations futures.
Le fichier peut être créé en exécutant une commandetouch(1).
Compilation
manuelleSDC, l’hôte de compilation doit remplir toutes les conditions préalables répertoriées dans la section Conditions préalables ci-dessus.
Pour compiler manuellement le pilote SDC, procédez comme suit :
-
Copiez l’offre groupée de compilation à partir de son répertoire dans le cache de pilotes vers un répertoire temporaire. L’emplacement du bundle dépend de la version de PowerFlex et de la distribution Linux.
Par exemple, l’offre groupée du SDC PowerFlex 3.6.3 pour les distributions basées sur Red Hat Enterprise Linux 9 est la suivante :/bin/emc/scaleio/scini_sync/driver_cache/RHEL9/3.6.3000.128/Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
Pour plus d’informations sur le cache de pilotes, reportez-vous à la section Cache de pilotes ci-dessous. -
Accédez au répertoire temporaire et extrayez le bundle de compilation.
Exemple :tar xzf Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
-
Exécutez la commande
build_driver.shscript, situé au niveau supérieur du contenu extrait. Sans arguments, le script tente de compiler le pilote du noyau en cours d’exécution.
Pour compiler pour un noyau différent, indiquez le chemin d’accès aux répertoires d’en-tête de ce noyau avec la commande "-o» et «-s" arguments de ligne de commande.
Pour plus d’informations sur l’appel, exécutez :build_driver.sh -h
-
La sortie du processus de compilation est imprimée dans la sortie standard.
Après une compilation réussie, le fichier du pilote SDC qui en résulte, scini.ko, est disponible à l’adresse suivante :./ini/scini.ko. -
Copiez le fichier de pilote de l’hôte de compilation vers l’hôte SDC cible, dans un répertoire correspondant à la version du noyau cible, sous le même emplacement que l’offre groupée de compilation, dans le cache de pilotes.
Par exemple, pour un pilote conforme à la version de noyau 5.14.0-362.24.1.el9_3.x86_64, le chemin cible du fichier de pilote est/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
de pilotesUn pilote SDC compilé avec succès pour un noyau spécifique est copié dans le répertoire approprié du cache de pilotes et sa compilation n’est pas déclenchée à nouveau.
L’emplacement du cache du pilote est /bin/emc/scaleio/scini_sync/drive_cache.
Journal de
buildLorsque la compilation automatique à la demande est activée, tous les journaux de compilation sont ajoutés à /bin/emc/scaleio/scini_sync/driver_build.log.
Une compilation réussie se termine avec des messages similaires à ce qui suit :
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
Le conteneur d’initialisation du SDC est préconfiguré pour utiliser la fonctionnalité. Il inclut le gcc et fait des paquets, et le /etc/emc/scaleio/scini_sync/.build_scini Le fichier est présent. Toutefois, pour que les compilations réussissent, le répertoire des en-têtes du noyau hôte doit être mappé au conteneur, pour /usr/src. Par exemple, pour exécuter le conteneur manuellement avec docker, après avoir installé le package kernel-devel approprié sur l’hôte, ajoutez -v/usr/src:/usr/src à la ligne de commande, pour que le répertoire d’en-têtes du noyau soit disponible pour le script de compilation.
Limitation
Il peut arriver que le compilateur GCC mis à disposition sur la distribution Linux de l’hôte ne soit pas suffisamment avancé pour compiler le SDC sur certains noyaux. Cette situation devrait être rare, car elle impliquera probablement un noyau personnalisé et non un noyau commun à cette distribution. Dans ce cas, l’utilisateur doit installer un GCC plus avancé à partir d’un dépôt de paquets non standard, et l’emplacement de ce GCC devra être spécifié dans $PATH. Il n’existe aucun moyen automatique de fournir un chemin GCC alternatif au service SDC.
Versions
3.6.3 ou version ultérieure
4.5.2 ou version ultérieure
Instructions vidéo