CRC32C 및 crcmod 설치

개요

Cloud Storage는 클라이언트가 객체 콘텐츠의 무결성을 확인할 수 있도록 순환 중복 검사(CRC) 헤더를 제공합니다. 비복합 객체의 경우 Cloud Storage는 클라이언트가 객체 무결성을 확인할 수 있도록 MD5 헤더도 제공하지만 복합 객체에는 CRC만 사용할 수 있습니다. gsutil은 모든 업로드와 다운로드 시 자동으로 무결성 검사를 수행합니다. 또한 gsutil hash 명령어를 사용하여 로컬 파일의 CRC를 계산할 수 있습니다.

Cloud Storage에서 사용되는 변형 CRC를 CRC32C(Castagnoli)라고 하며 표준 Python 배포에서는 제공되지 않습니다. gsutil에서 사용되는 CRC32C 구현은 crcmod라는 타사 Python 모듈에서 제공됩니다.

crcmod 모듈에는 순수 Python의 CRC32C 구현이 포함되어 있지만 성능이 매우 낮습니다. Python C 확장 프로그램은 crcmod에서도 제공되며, 이를 사용하려면 바이너리 모듈로 컴파일해야 합니다. macOS에서는 gsutil이 사전 컴파일된 crcmod C 확장 프로그램과 함께 제공됩니다. 다른 플랫폼의 경우에는 아래의 설치 안내를 참조하세요.

각 복사 작업이 끝나면 gsutil cp 명령어와 gsutil rsync 명령어는 소스 파일/객체의 체크섬이 대상 파일/객체의 체크섬과 일치하는지 확인합니다. 체크섬이 일치하지 않으면 gsutil은 유효하지 않은 복사본을 삭제하고 경고 메시지를 표시합니다. 이러한 경우는 거의 없지만 만약 발생하면 gs-team@google.com으로 문의하세요.

구성

crcmod의 컴파일된 버전을 Python 환경에서 사용할 수 있는지 확인하려면 다음과 같이 gsutil version 명령어 출력에서 'compiled crcmod' 항목을 검사하면 됩니다.

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

crcmod 라이브러리가 네이티브 바이너리로 컴파일되면 이 값은 True입니다. 순수 Python 버전을 사용하면 값은 False입니다.

crcmod 상태에 따른 gsutil 동작을 제어하려면 'check_hashes' 구성 변수를 설정하면 됩니다. 이 변수에 대한 자세한 내용은 boto 구성 파일의 주변 주석을 참조하세요. 구성 파일에 'check_hashes'가 없으면 gsutil config를 다시 실행하여 파일을 다시 생성합니다.

설치

본 설치 안내에서는 다음을 가정합니다.

  • pip를 설치했습니다. pip 설치 방법에 대한 자세한 내용은 pip 설치 안내를 참조하세요.
  • PATH 환경 변수에서 pip 설치를 확인할 수 있습니다. 그렇지 않으면 아래 명령어의 pip를 실행 파일의 전체 경로로 바꿔야 할 수 있습니다.
  • Python의 시스템 설치에 사용할 crcmod 패키지를 설치하므로 sudo 명령어를 사용합니다. 다른 Python 환경(예: Virtualenv)에 crcmod를 설치할 경우 아래 명령어에서 sudo를 생략해야 합니다.

CentOS, RHEL, Fedora

CentOS 6 및 유사한 변형에서는 기본적으로 Python 2.6을 사용하며 gsutil이 실행되지 않습니다. Python 2.7을 사용 설정하고 CentOS 6에서 crcmod를 컴파일/설치하려면 다음을 실행합니다.

sudo su  # Run as root; need shell session with Python 2.7 enabled
yum install gcc python-devel python-setuptools redhat-rpm-config
source /opt/rh/python27/enable  # Make default `python` executable use 2.7.X
python -m pip install -U pip  # Upgrade old default version of pip
python -m pip uninstall crcmod
python -m pip install --no-cache-dir -U crcmod
exit  # Exit su session

기본적으로 Python 2.7을 사용하는 OS 버전에서 crcmod를 컴파일하고 설치하려면 다음을 실행합니다.

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

Debian 및 Ubuntu

crcmod를 컴파일하고 설치하려면 다음을 실행합니다.

sudo apt-get install gcc python-dev python-setuptools
sudo pip uninstall crcmod
sudo pip install --no-cache-dir -U crcmod

Enterprise SUSE

crcmod를 컴파일하고 설치하려면 다음을 실행합니다.

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

macOS

gsutil은 사전 컴파일된 macOS용 crcmod 버전을 배포하므로 개발자가 직접 컴파일하고 설치할 필요가 없습니다. 이유에 관계없이 사전 컴파일된 버전이 감지되지 않으면 Cloud Storage팀에 문의하세요(gsutil help support 참조).

macOS에서 수동으로 컴파일하려면 먼저 XCode를 설치한 후 다음을 실행해야 합니다.

sudo pip3 install -U crcmod

Windows

다음 URL의 Python 패키지 색인(PyPi)에서 컴파일된 crcmod 버전의 설치 프로그램이 제공됩니다.

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

MSI 설치 프로그램은 32비트 Python 2.7 버전에서 사용할 수 있습니다. 32비트 Python 디렉터리에 설치해야 합니다. 64비트 Python을 사용하는 경우에는 32비트 crcmod가 작동하지 않으며 crcmod를 사용하려면 대신 32비트 Python을 설치해야 합니다.

하지만 경우에 따라 설치 프로그램이 <python_dir>\Lib\site-packages\crcmod에 잘못 설치될 수 있습니다.

이 문제는 수동으로 crcmod 디렉터리를 올바른 위치에 복사하면 해결됩니다.