CRC32C e instalación de crcmod

Descripción general

Cloud Storage proporciona un encabezado de verificación de redundancia cíclica (CRC) que permite a los clientes verificar la integridad del contenido de los objetos. En el caso de los objetos no compuestos, Cloud Storage también proporciona un encabezado MD5 a fin de permitir que los clientes verifiquen la integridad de los objetos, pero para los objetos compuestos solo se encuentra disponible la CRC. De forma automática, gsutil realiza verificaciones de integridad en todas las cargas y descargas. Además, puedes usar el comando gsutil hash a fin de calcular una CRC para cualquier archivo local.

La variante de CRC que usa Cloud Storage se denomina CRC32C (Castagnoli) y no está disponible en la distribución estándar de Python. Un módulo de Python de terceros llamado crcmod proporciona la implementación de CRC32C que usa gsutil.

El módulo crcmod contiene una implementación de CRC32C pura de Python, pero su uso genera un rendimiento muy bajo. Un crcmod también proporciona una extensión C de Python, lo que requiere la compilación en un módulo binario con el fin de usarla. gsutil se envía con una extensión C de crcmod precompilada para macOS. Si deseas usar otras plataformas, consulta las instrucciones de instalación que se muestran a continuación.

Al final de cada operación de copia, los comandos gsutil cp y gsutil rsync validan que la suma de verificación del objeto o archivo de origen coincida con la suma de verificación del objeto o archivo de destino. Si las sumas de verificación no coinciden, gsutil borrará la copia no válida y mostrará un mensaje de advertencia. Esto ocurre muy pocas veces, pero si es así, comunícate con gs-team@google.com.

Configuración

A fin de determinar si la versión compilada de crcmod está disponible en tu entorno de Python, puedes inspeccionar el resultado del comando gsutil version para la entrada “compiled crcmod”:

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

Si tu biblioteca de crcmod se compila en un objeto binario nativo, este valor será verdadero. Si usas la versión pura de Python, el valor será falso.

Para controlar el comportamiento de gsutil en respuesta al estado de crcmod, puedes establecer la variable de configuración “check_hashes”. Para obtener detalles sobre esta variable, consulta los comentarios que rodean tu archivo de configuración boto. Si “check_hashes” no está presente en tu archivo de configuración, vuelve a ejecutar gsutil config para volver a generar el archivo.

Instalación

En estas instrucciones de instalación, se supone lo siguiente:

  • Ya instalaste pip. Consulta las instrucciones de instalación de pip para obtener detalles sobre cómo instalar pip.
  • La instalación de pip se puede encontrar en la variable de entorno PATH. Si no la encuentras, es posible que debas reemplazar pip3 en los siguientes comandos por la ruta completa al ejecutable.
  • Instalas el paquete crcmod para usarlo con la instalación de tu sistema de Python, por lo tanto, usas el comando sudo. Si instalas crcmod para un entorno de Python diferente (p. ej., en un virtualenv), debes omitir sudo de los siguientes comandos.
  • Estás usando una versión de Python 3 con gsutil. Para determinar qué versión de Python usa gsutil, ejecuta gsutil version -l y busca la línea python version: 2.x.x o python version: 3.x.x.

CentOS, RHEL y Fedora

Para compilar e instalar crcmod, ejecuta el siguiente comando:

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

Debian y Ubuntu

Para compilar e instalar crcmod, ejecuta el siguiente comando:

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

Enterprise de SUSE

Para compilar e instalar crcmod, ejecuta el siguiente comando:

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

macOS

gsutil distribuye una versión precompilada de crcmod para macOS, por lo que no deberías necesitar compilar ni instalarla tú mismo. Si, por algún motivo, no se detecta la versión precompilada, comunícate con el equipo de Cloud Storage (consulta gsutil help support).

Para compilar de forma manual en macOS, primero debes instalar XCode y, luego, ejecutar lo siguiente:

sudo pip3 install -U crcmod

Windows

Hay un instalador disponible para la versión compilada de crcmod del índice de paquetes de Python (PyPi) en la siguiente URL:

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

Los instaladores MSI están disponibles para las versiones de 32 bits de Python 2.7. Asegúrate de realizar la instalación en un directorio de Python de 32 bits. Si usas Python de 64 bits, no funcionará con crcmod de 32 bits y, en su lugar, deberás instalar Python de 32 bits para usar crcmod.

En algunos casos, el instalador se instalará de forma incorrecta en <python_dir>\Lib\site-packages\crcmod

La copia manual del directorio crcmod en la ubicación correcta debería resolver el problema.