PowerFlex: Compilação sob demanda do driver do PowerFlex SDC
Summary: Este artigo da base de conhecimento descreve como habilitar a compilação sob demanda do driver do PowerFlex SDC em sistemas Linux.
Instructions
Esse recurso destina-se a acomodar alterações de interface binária de aplicativo (ABI) no kernel Linux, o que pode fazer com que um driver SDC, pré-compilado para um kernel diferente, não seja carregado.
Historicamente, um pacote de instalação do SDC para Linux (RPM/DEB) continha vários módulos de kernel SDC para vários kernels dessa distribuição Linux. Para os usuários que instalam em distribuições como o Ubuntu, que libera atualizações frequentes do kernel, existe a opção de configurar o serviço SDC para se conectar ao repositório remoto de drivers SDC da Dell e tentar fazer download de um SDC a partir dele.
Com o novo recurso, os usuários podem compilar uma correspondência perfeita do driver SDC para seu kernel em execução sem depender da disponibilidade de um SDC correspondente no repositório do driver.
Público-alvo: Usuários que frequentemente atualizam seus kernels por razões de segurança e que executam kernels personalizados especializados podem se beneficiar do recurso.
Pré-requisitos
Para que o procedimento de compilação seja bem-sucedido, os seguintes pacotes devem ser instalados no host do serviço SDC:
- A última versão do compilador GNU C (GCC), GCC
- GNU make(1).
- O pacote de desenvolvimento do kernel para o kernel em execução. Esse pacote geralmente está disponível com os seguintes nomes:
- kernel-devel para distribuições usando o gerenciador de pacotes RPM. (Red Hat, SUSE, assim por diante)
- linux-headers para distribuições usando o gerenciador de pacotes Debian (Debian, Ubuntu, etc.)
Compilação
automática sob demandaPara permitir a compilação automática e sob demanda do driver do SDC, o host deve atender a todos os pré-requisitos listados na seção Pré-requisitos, acima. Ao ativar o driver do SDC, o serviço do SDC tentará compilar o driver do SDC se todas as seguintes condições forem atendidas:
-
Um SDC que corresponda ao kernel em execução não está disponível no cache do driver.
Para obter detalhes sobre o cache do driver, consulte Cache do driver abaixo. -
Um arquivo chamado
/etc/emc/scaleio/scini_sync/.build_sciniExiste.
O conteúdo do arquivo é ignorado. No entanto, os usuários devem mantê-lo vazio para possíveis aprimoramentos futuros.
O arquivo pode ser criado executando umtouch(1).
Compilação
manualDriver SDC, o host de compilação deve atender a todos os pré-requisitos listados na seção Pré-requisitos acima.
Para compilar manualmente o driver SDC, execute estas etapas:
-
Copie o pacote de compilação de seu diretório no cache do driver para um diretório temporário. A localização do pacote depende da versão do PowerFlex e da distribuição do Linux.
Por exemplo, o pacote do PowerFlex 3.6.3 SDC para distribuições baseadas no 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
Para obter detalhes sobre o cache do driver, consulte Cache do driver abaixo. -
Vá para o diretório temporário e extraia o pacote de compilação.
Exemplo:tar xzf Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
-
Execute a
build_driver.shscript, localizado no nível superior do conteúdo extraído. Sem argumentos, o script tenta compilar o driver para o kernel em execução.
Para compilar para um kernel diferente, forneça o caminho para os diretórios de cabeçalho desse kernel com o "-o" e "-s" argumentos de linha de comando.
Para obter mais informações sobre invocação, execute:build_driver.sh -h
-
A saída do processo de compilação é impressa na saída padrão.
Após uma compilação bem-sucedida, o arquivo de driver SDC resultante, scini.ko, pode ser encontrado em./ini/scini.ko. -
Copie o arquivo de driver do host de compilação para o host do SDC de destino, em um diretório correspondente à versão do kernel de destino, no mesmo local que o pacote de compilação, no cache do driver.
Por exemplo, para um driver compatível com a versão de kernel 5.14.0-362.24.1.el9_3.x86_64, o caminho de destino do arquivo de 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 do
driverUm driver SDC compilado com sucesso para um kernel específico será copiado para o diretório apropriado do cache do driver e sua compilação não será acionada novamente.
A localização do cache do driver é /bin/emc/scaleio/scini_sync/drive_cache.
Registro de compilação
Quando a compilação sob demanda automática está habilitada, todos os registros de compilação são anexados a /bin/emc/scaleio/scini_sync/driver_build.log.
Uma compilação bem-sucedida termina com mensagens semelhantes à seguinte:
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.
Contêiner
de inicialização do SDCO contêiner de inicialização do SDC vem pré-configurado para usar o recurso. Inclui o gcc e faz pacotes, e o /etc/emc/scaleio/scini_sync/.build_scini arquivo está presente. No entanto, para que as compilações sejam bem-sucedidas, o diretório de cabeçalhos do kernel do host deve ser mapeado para o contêiner, para /usr/src. Por exemplo, para executar o contêiner manualmente com o docker, depois de instalar o pacote kernel-devel correto no host, adicione -v/usr/src:/usr/src para a linha de comando, para que o diretório de cabeçalhos do kernel esteja disponível para o script de compilação.
Limitação
Pode haver uma situação em que o compilador GCC disponibilizado na distribuição Linux do host não é avançado o suficiente para compilar o SDC em algum kernel. Essa situação deve ser rara, pois provavelmente envolverá um kernel personalizado e não um comum a essa distribuição. Nesse caso, o usuário precisa instalar um GCC mais avançado a partir de um repositório de pacotes não padrão, e o local desse GCC terá que ser especificado em $PATH. Não há uma maneira automática de fornecer um caminho alternativo do GCC para o serviço SDC.
Versões
3.6.3 ou superior
4.5.2 ou superior
Instruções em vídeo