CRC32C et installation de crcmod

Présentation

Cloud Storage fournit un en-tête de contrôle de redondance cyclique (CRC) permettant aux clients de valider l'intégrité du contenu des objets. Cloud Storage fournit également un en-tête MD5 pour les objets non composites afin que les clients puissent valider l'intégrité des objets. En revanche, seul le CRC est disponible pour les objets composites. gsutil vérifie automatiquement l'intégrité de l'ensemble des importations et des téléchargements. En outre, vous pouvez exécuter la commande gsutil hash pour calculer le CRC de n'importe quel fichier local.

La variante CRC utilisée par Cloud Storage est appelée CRC32C (Castagnoli). Elle n'est pas disponible dans la distribution Python standard. La mise en œuvre de CRC32C par gsutil est fournie par un module tiers de Python appelé crcmod.

Le module crcmod contient une mise en œuvre de CRC32C en Python pur, mais son utilisation entraîne des performances très médiocres. Une extension Python C est également fournie par crcmod. Pour l'utiliser, vous devez la compiler dans un module binaire. gsutil intègre une extension crcmod C précompilée pour macOS. Pour les autres plates-formes, suivez les instructions d'installation ci-dessous.

À la fin de chaque opération de copie, les commandes gsutil cp et gsutil rsync confirment que la somme de contrôle du fichier ou de l'objet source correspond à celle du fichier ou de l'objet de destination. Si les sommes de contrôle ne correspondent pas, gsutil supprime la copie non valide et affiche un message d'avertissement. Dans les rares cas où cela se produit, veuillez envoyer un e-mail à l'adresse gs-team@google.com.

Configuration

Pour déterminer si la version compilée de crcmod est disponible dans votre environnement Python, vous pouvez inspecter le résultat de la commande gsutil version pour l'entrée "compiled crcmod" :

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

Si votre bibliothèque crcmod est compilée à l'aide d'un binaire natif, cette valeur est définie sur "True". Si vous utilisez la version en Python pur, la valeur est "False".

Pour contrôler le comportement de gsutil en réponse à l'état de crcmod, vous pouvez définir la variable de configuration "check_hashes". Pour en savoir plus sur cette variable, consultez les commentaires qui s'affichent dans votre fichier de configuration boto. Si la variable "check_hashes" ne figure pas dans votre fichier de configuration, exécutez à nouveau gsutil config pour regénérer le fichier.

Installation

Ces instructions d'installation partent des principes suivants :

  • Vous avez installé pip. Pour en savoir plus sur l'installation de pip, consultez les instructions d'installation de pip.
  • Votre installation de pip se trouve dans la variable d'environnement PATH. Si ce n'est pas le cas, vous devrez peut-être remplacer pip3 par le chemin d'accès complet au fichier exécutable dans les commandes ci-dessous.
  • Vous installez le package crcmod à utiliser avec votre installation système de Python. Pour ce faire, vous exécutez la commande sudo. Si vous installez crcmod dans un autre environnement Python (par exemple, dans un environnement virtualenv), vous devez omettre sudo dans les commandes ci-dessous.
  • Vous utilisez une version de Python 3 avec gsutil. Pour déterminer la version de Python utilisée par gsutil, exécutez la commande gsutil version -l, puis recherchez la ligne python version: 2.x.x ou python version: 3.x.x.

CentOS, RHEL et Fedora

Pour compiler et installer crcmod, procédez comme suit :

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

Debian et Ubuntu

Pour compiler et installer crcmod, procédez comme suit :

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

Enterprise SUSE

Pour compiler et installer crcmod, procédez comme suit :

sudo zypper install gcc python-devel
sudo pip uninstall crcmod
sudo pip install --no-cache-dir -U crcmod

macOS

gsutil distribue une version précompilée de crcmod pour macOS. Vous n'avez donc pas besoin de le compiler et de l'installer. Si pour une raison quelconque, la version précompilée n'est pas détectée, veuillez en informer l'équipe Cloud Storage (voir gsutil help support).

Pour compiler crcmod manuellement sur macOS, vous devez d'abord installer XCode, puis exécuter la commande suivante :

pip3 install -U crcmod

Windows

Un programme d'installation est disponible pour la version compilée de crcmod à partir de l'index de packages Python (PyPi) à l'adresse suivante :

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

Des programmes d'installation MSI sont disponibles pour les versions 32 bits de Python 2.7. Assurez-vous d'effectuer l'installation dans un répertoire Python 32 bits. Si vous utilisez la version 64 bits de Python, elle ne fonctionnera pas avec crcmod 32 bits. Vous devrez installer Python 32 bits pour utiliser crcmod.

Dans certains cas, le programme d'installation l'installe malencontreusement dans le répertoire <python_dir>\Lib\site-packages\crcmod.

La copie manuelle du répertoire crcmod à l'emplacement approprié devrait résoudre le problème.