CRC32C と crcmod のインストール

概要

Cloud Storage には、クライアントでオブジェクトのコンテンツの整合性を検証するための巡回冗長検査(CRC)ヘッダーが用意されています。Cloud Storage では、非複合オブジェクトの整合性を MD5 ヘッダーで検証できますが、複合オブジェクトの場合には CRC しか使用できません。gsutil は、すべてのアップロードとダウンロードに整合性検査を自動的に実行します。また、gsutil hash コマンドを使用して、ローカル ファイルの CRC を計算することもできます。

Cloud Storage で使用される CRC バリアントは CRC32C(Castagnoli)と呼ばれ、標準の Python ディストリビューションでは使用できません。gsutil で使用する CRC32C は、サードパーティの Python モジュール(crcmod)で実装されています。

crcmod モジュールには、pure Python の CRC32C が含まれていますが、これを使用すると、チェックサムの計算が遅くなり、結果としてパフォーマンスが大幅に低下します。crcmod には Python C 拡張機能も含まれていますが、使用前にバイナリ モジュールにコンパイルする必要があります。gsutil には macOS 用にプリコンパイルされている crcmod C 拡張機能が含まれています。他のプラットフォームについては、以下のインストール手順をご覧ください。

gsutil cpgsutil mvgsutil rsync コマンドは、各コピー オペレーションの最後に、コピー元ファイル / オブジェクトのチェックサムがコピー先ファイル / オブジェクトのチェックサムと一致することを確認します。チェックサムが一致しない場合、gsutil は無効なコピーを削除し、警告メッセージを表示します。これが発生するのは非常にまれですが、発生した場合はオペレーションを再試行してください。

構成

Python 環境でコンパイル済みの crcmod が使用可能かどうか確認するには、gsutil version コマンドを実行して "compiled crcmod" エントリを確認します。

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

crcmod ライブラリがネイティブ バイナリにコンパイルされていると、この値が True になっています。Python の純粋バージョンの場合には False になります。

crcmod のステータスに応じて gsutil の動作を制御するには、boto 構成ファイルcheck_hashes 変数を設定します。この変数の詳細については、boto 構成ファイル内のコメントをご覧ください。check_hashes が構成ファイル内に存在しない場合は、適切な -e フラグまたは -a フラグを指定して gsutil config を実行し、ファイルを再生成してください。

インストール

こうしたインストール手順では、次のことを想定しています。

  • pip がインストールされている。pip のインストール方法について詳しくは、pip のインストール手順をご覧ください。

  • pip のインストールは PATH 環境変数にあります。見つからない場合は、下のコマンドの pip3 を実行可能ファイルへのフルパスに置き換える必要があります。

  • Python のシステム インストールで使用する crcmod パッケージをインストールし、sudo コマンドを使用します。virtualenv など、別の Python 環境用に crcmod をインストールする場合は、下のコマンドで sudo を省略する必要があります。

  • gsutil で Python 3 バージョンを使用します。gsutil で使用されている Python のバージョンを確認するには、gsutil version -l を実行し、python version: 2.x.x または python version: 3.x.x の行を探します。

CentOS、RHEL、Fedora

crcmod をコンパイルしてインストールする:

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

Debian と Ubuntu

crcmod をコンパイルしてインストールする:

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

Enterprise SUSE

Enterprise SUSE for SAP 12 を使用しているときに crcmod をコンパイルしてインストールするには:

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

Enterprise SUSE for SAP 15 を使用しているときに crcmod をコンパイルしてインストールするには:

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

macOS

gsutil では macOS 用のコンパイル済みバージョンの crcmod が配布されるため、ご自身でコンパイルしてインストールする必要はありません。なんらかの理由でコンパイル済みバージョンが検出されない場合は、Cloud Storage チームにお知らせください(gsutil help support を参照)。

macOS で手動でコンパイルするには、Xcode をインストールしてから実行する必要があります。

pip3 install -U crcmod

Windows

コンパイル済みの crcmod のインストーラが Python Package Index(PyPi)で公開されています。次の URL をご覧ください。

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

インストーラが間違って <python_dir>\Lib\site-packages\crcmod\ にインストールする場合があります。

その場合には、crcmod ディレクトリを正しい場所に手動でコピーすると、問題が解決します。