PowerFlex: Compilación según demanda del controlador de SDC de PowerFlex
Summary: En este artículo basado en conocimientos, se describe cómo habilitar la compilación según demanda del controlador de SDC de PowerFlex en sistemas Linux.
Instructions
Esta función está diseñada para adaptarse a los cambios de la interfaz binaria de aplicaciones (ABI) en el kernel de Linux, lo que puede provocar que un controlador de SDC, precompilado para un kernel diferente, no se cargue.
Históricamente, un paquete de instalación de SDC para Linux (RPM/DEB) contenía varios módulos de kernel de SDC para varios kernels de esa distribución de Linux. Para los usuarios que instalan distribuciones como Ubuntu, que lanza actualizaciones frecuentes del kernel, existe la opción de configurar el servicio SDC para conectarse al repositorio remoto de controladores de SDC de Dell e intentar descargar un SDC desde él.
Con la nueva función, los usuarios pueden compilar una coincidencia perfecta del controlador de SDC para su kernel en ejecución sin depender de la disponibilidad de un SDC coincidente en el repositorio del controlador.
Público objetivo: Los usuarios que actualizan sus kernels con frecuencia por razones de seguridad y que ejecutan kernels personalizados especializados pueden beneficiarse de la función.
Prerrequisitos
Para que el procedimiento de compilación se realice correctamente, se deben instalar los siguientes paquetes en el host del servicio de SDC:
- La versión más reciente del compilador de C de GNU (GCC), GCC
- GNU make(1).
- El paquete de desarrollo del kernel para el kernel en ejecución. Por lo general, este paquete está disponible con los siguientes nombres:
- kernel-devel para distribuciones que usan el administrador de paquetes RPM. (Red Hat, SUSE, etc.)
- linux-headers para distribuciones que usan el gestor de paquetes Debian (Debian, Ubuntu, etc.)
Compilación
automática bajo demandaPara permitir la compilación automática y según demanda del controlador de SDC, el host debe cumplir con todos los requisitos previos enumerados en la sección Requisitos previos anterior. Cuando se abre el controlador de SDC, el servicio de SDC intenta compilar el controlador de SDC si se cumplen todas las siguientes condiciones:
-
Un SDC que coincida con el kernel en ejecución no está disponible en la caché del controlador.
Para obtener detalles sobre la caché del controlador, consulte Caché del controlador a continuación. -
Un archivo denominado
/etc/emc/scaleio/scini_sync/.build_sciniExiste.
Se ignora el contenido del archivo. Sin embargo, los usuarios deben mantenerlo vacío para posibles mejoras futuras.
El archivo se puede crear mediante la ejecución de untouch(1)comando.
Compilación
manualEl controlador de SDC, el host de compilación debe cumplir con todos los requisitos previos enumerados en la sección Requisitos previos anterior.
Para compilar manualmente el controlador de SDC, siga estos pasos:
-
Copie el paquete de compilación de su directorio en la caché del controlador a un directorio temporal. La ubicación del paquete depende de la versión de PowerFlex y de la distribución de Linux.
Por ejemplo, el paquete del SDC PowerFlex 3.6.3 para distribuciones basadas en Red Hat Enterprise Linux 9 es el siguiente:/bin/emc/scaleio/scini_sync/driver_cache/RHEL9/3.6.3000.128/Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
Para obtener detalles sobre la caché del controlador, consulte Caché del controlador a continuación. -
Vaya al directorio temporal y extraiga el paquete de compilación.
Ejemplo:tar xzf Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
-
Ejecute el comando
build_driver.shscript, ubicado en el nivel superior del contenido extraído. Sin argumentos, el script intenta compilar el controlador para el kernel en ejecución.
Para compilar para un kernel diferente, proporcione la ruta a los directorios de encabezado de ese kernel con "-o" y "-s" argumentos de la línea de comandos.
Para obtener más información acerca de la invocación, ejecute:build_driver.sh -h
-
La salida del proceso de compilación se imprime en la salida estándar.
Después de una compilación exitosa, el archivo del controlador de SDC resultante, scini.ko, se puede encontrar en./ini/scini.ko. -
Copie el archivo de controlador del host de compilación al host de SDC de destino, a un directorio que coincida con la versión del kernel de destino, en la misma ubicación que el paquete de compilación, en la caché del controlador.
Por ejemplo, para un controlador que cumple con la versión del kernel 5.14.0-362.24.1.el9_3.x86_64, la ruta de destino para el archivo del controlador es/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
Caché
del controladorUn controlador de SDC compilado correctamente para un kernel específico se copiará en el directorio correspondiente de la caché del controlador y su compilación no se volverá a activar.
La ubicación de la caché del controlador es /bin/emc/scaleio/scini_sync/drive_cache.
Registro de compilación
Cuando se habilita la compilación automática según demanda, todos los registros de compilación se anexan a /bin/emc/scaleio/scini_sync/driver_build.log.
Una compilación correcta finaliza con mensajes similares a los siguientes:
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.
Contenedor
de inicialización de SDCEl contenedor de inicialización de SDC viene preconfigurado para usar la característica. Incluye el gcc y hace paquetes, y el /etc/emc/scaleio/scini_sync/.build_scini El archivo está presente. Sin embargo, para que las compilaciones se realicen correctamente, el directorio de encabezados de kernel para el kernel host debe asignarse al contenedor, a /usr/src. Por ejemplo, para ejecutar el contenedor manualmente con Docker, después de instalar el paquete kernel-devel correcto en el host, agregue -v/usr/src:/usr/src a la línea de comandos, para que el directorio de encabezados del kernel esté disponible para el script de compilación.
Limitación
Puede darse una situación en la que el compilador de GCC disponible en la distribución de Linux del host no sea lo suficientemente avanzado como para compilar el SDC contra algún kernel. Esta situación debería ser poco frecuente, ya que probablemente implicará un kernel personalizado y no uno común a esa distribución. En este caso, el usuario tiene que instalar un GCC más avanzado desde un repositorio de paquetes no estándar, y la ubicación de ese GCC tendrá que especificarse en $PATH. No hay ninguna manera automática de proporcionar una ruta de GCC alternativa al servicio de SDC.
Versiones
3.6.3 o superior
4.5.2 o superior
Instrucciones en video