CRC32C e como instalar o crcmod

Visão geral

O Cloud Storage fornece um cabeçalho de verificação de redundância cíclica (CRC, na sigla em inglês) que permite aos clientes verificar a integridade do conteúdo do objeto. Para objetos não compostos, o Cloud Storage também fornece um cabeçalho MD5 para permitir que os clientes verifiquem a integridade do objeto, mas apenas para objetos compostos a CRC está disponível. A gsutil executa automaticamente verificações de integridade em todos os uploads e downloads. Além disso, você pode usar o comando gsutil hash para calcular uma CRC para qualquer arquivo local.

A variante CRC usada pelo Cloud Storage é chamada de CRC32 (Cast conversa), que não está disponível na distribuição padrão do Python. A implementação de CRC32C usada pelo gsutil é fornecida por um módulo Python de terceiros chamado crcmod.

O módulo crcmod contém uma implementação puramente em Python de CRC32C, mas usá-lo resulta em um desempenho muito insatisfatório. Uma extensão do Python C também é fornecida pelo crcmod, que exige a compilação em um módulo binário para uso. A gsutil vem com uma extensão crcmod C pré-compilada para macOS; Para outras plataformas, consulte as instruções de instalação abaixo.

No final de cada operação de cópia, os comandos gsutil cp e gsutil rsync validam se a soma de verificação do arquivo/objeto de origem corresponde à soma de verificação do arquivo/objeto de destino. Se as somas de verificação não corresponderem, o gsutil excluirá a cópia inválida e imprimirá uma mensagem de aviso. Isso raramente acontece, mas se isso acontecer, entre em contato com gs-team@google.com.

Configuração

Para determinar se a versão compilada do crcmod está disponível no seu ambiente Python, inspecione a saída do comando gsutil version para a entrada "crcmod compilado":

$ gsutil version -l
...
compiled crcmod: True
...

Se sua biblioteca crcmod for compilada em um binário nativo, esse valor será True. Se estiver usando a versão puramente em Python, o valor será Falso.

Para controlar o comportamento da gsutil em resposta ao status do crcmod, defina a variável de configuração "check_hashes". Para detalhes sobre essa variável, consulte os comentários ao redor no seu arquivo de configuração boto. Se "check_hashes" não estiver presente no arquivo de configuração, execute novamente gsutil config para gerar o arquivo novamente.

Instalação

Estas instruções de instalação supõem que:

  • O pip está instalado Consulte as instruções de instalação do pip para ver detalhes sobre como instalar o pip.
  • A instalação do pip pode ser encontrada na variável de ambiente PATH. Se não for possível, talvez seja necessário substituir pip3 nos comandos abaixo pelo caminho completo do executável.
  • Você está instalando o pacote crcmod para uso com a instalação do sistema do Python e, portanto, use o comando sudo. Se você estiver instalando o crcmod para um ambiente Python diferente (por exemplo, em um virtualenv), omita sudo dos comandos abaixo.
  • Você está usando uma versão do Python 3 com gsutil. É possível determinar qual versão do Python a versão está usando executando gsutil version -l e procurando a linha python version: 2.x.x ou python version: 3.x.x.

CentOS, RHEL e Fedora

Para compilar e instalar o crcmod:

yum install gcc python3-devel python3-setuptools redhat-rpm-config
sudo pip3 uninstall crcmod
sudo pip3 install --no-cache-dir -U crcmod

Debian e Ubuntu

Para compilar e instalar o crcmod:

sudo apt-get install gcc python3-dev python3-setuptools
sudo pip3 uninstall crcmod
sudo pip3 install --no-cache-dir -U crcmod

SUSE empresarial

Para compilar e instalar o crcmod:

sudo zypper install gcc python3-devel
sudo pip3 uninstall crcmod
sudo pip3 install --no-cache-dir -U crcmod

macOS

O gsutil distribui uma versão pré-compilada do crcmod para macOS, portanto, você não precisa compilar e instalá-lo por conta própria. Se, por algum motivo, a versão pré-compilada não for detectada, informe a equipe do Cloud Storage (consulte gsutil help support).

Para fazer a compilação manualmente no macOS, primeiro você precisa instalar o XCode e, em seguida, executar:

sudo pip3 install -U crcmod

Windows

Um instalador está disponível para a versão crcmod compilada do Python Package Index (PyPi) no seguinte URL:

https://pypi.python.org/pypi/crcmod/1.7

Os instaladores MSI estão disponíveis para as versões de 32 bits do Python 2.7. Certifique-se de instalar em um diretório Python de 32 bits. Se você estiver usando o Python de 64 bits, ele não funcionará com o crcmod de 32 bits. Em vez disso, você precisará instalar o Python de 32 bits para usar o crcmod.

Em alguns casos, o instalador será instalado incorretamente em <python_dir>\Lib\site-packages\crcmod

Copiar manualmente o diretório crcmod para o local correto deve resolver o problema.