| OLD | NEW |
| (Empty) |
| 1 # -*- coding: utf-8 -*- | |
| 2 # Copyright 2013 Google Inc. All Rights Reserved. | |
| 3 # | |
| 4 # Licensed under the Apache License, Version 2.0 (the "License"); | |
| 5 # you may not use this file except in compliance with the License. | |
| 6 # You may obtain a copy of the License at | |
| 7 # | |
| 8 # http://www.apache.org/licenses/LICENSE-2.0 | |
| 9 # | |
| 10 # Unless required by applicable law or agreed to in writing, software | |
| 11 # distributed under the License is distributed on an "AS IS" BASIS, | |
| 12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 13 # See the License for the specific language governing permissions and | |
| 14 # limitations under the License. | |
| 15 """Additional help about CRC32C and installing crcmod.""" | |
| 16 | |
| 17 from __future__ import absolute_import | |
| 18 | |
| 19 from gslib.help_provider import HelpProvider | |
| 20 | |
| 21 _DETAILED_HELP_TEXT = (""" | |
| 22 <B>OVERVIEW</B> | |
| 23 Google Cloud Storage provides a cyclic redundancy check (CRC) header that | |
| 24 allows clients to verify the integrity of object contents. For non-composite | |
| 25 objects GCS also provides an MD5 header to allow clients to verify object | |
| 26 integrity, but for composite objects only the CRC is available. gsutil | |
| 27 automatically performs integrity checks on all uploads and downloads. | |
| 28 Additionally, you can use the "gsutil hash" command to calculate a CRC for | |
| 29 any local file. | |
| 30 | |
| 31 The CRC variant used by Google Cloud Storage is called CRC32C (Castagnoli), | |
| 32 which is not available in the standard Python distribution. The implementation | |
| 33 of CRC32C used by gsutil is provided by a third-party Python module called | |
| 34 `crcmod <https://pypi.python.org/pypi/crcmod>`_. | |
| 35 | |
| 36 The crcmod module contains a pure-Python implementation of CRC32C, but using | |
| 37 it results in very poor performance. A Python C extension is also provided by | |
| 38 crcmod, which requires compiling into a binary module for use. gsutil ships | |
| 39 with a precompiled crcmod C extension for Mac OS X; for other platforms, see | |
| 40 the installation instructions below. | |
| 41 | |
| 42 At the end of each copy operation, the gsutil cp and rsync commands validate | |
| 43 that the checksum of the source file/object matches the checksum of the | |
| 44 destination file/object. If the checksums do not match, gsutil will delete | |
| 45 the invalid copy and print a warning message. This very rarely happens, but | |
| 46 if it does, please contact gs-team@google.com. | |
| 47 | |
| 48 | |
| 49 <B>CONFIGURATION</B> | |
| 50 To determine if the compiled version of crcmod is available in your Python | |
| 51 environment, you can inspect the output of the gsutil version command for the | |
| 52 "compiled crcmod" entry:: | |
| 53 | |
| 54 $ gsutil version -l | |
| 55 ... | |
| 56 compiled crcmod: True | |
| 57 ... | |
| 58 | |
| 59 If your crcmod library is compiled to a native binary, this value will be | |
| 60 True. If using the pure-Python version, the value will be False. | |
| 61 | |
| 62 To control gsutil's behavior in response to crcmod's status, you can set the | |
| 63 "check_hashes" configuration variable. For details on this variable, see the | |
| 64 surrounding comments in your gsutil configuration file. If check_hashes is not | |
| 65 present in your configuration file, rerun gsutil config to regenerate the | |
| 66 file. | |
| 67 | |
| 68 | |
| 69 <B>INSTALLATION</B> | |
| 70 CentOS, RHEL, and Fedora | |
| 71 ------------------------ | |
| 72 | |
| 73 To compile and install crcmod: | |
| 74 | |
| 75 sudo yum install gcc python-devel python-setuptools | |
| 76 sudo easy_install -U pip | |
| 77 sudo pip uninstall crcmod | |
| 78 sudo pip install -U crcmod | |
| 79 | |
| 80 Debian and Ubuntu | |
| 81 ----------------- | |
| 82 | |
| 83 To compile and install crcmod: | |
| 84 | |
| 85 sudo apt-get install gcc python-dev python-setuptools | |
| 86 sudo easy_install -U pip | |
| 87 sudo pip uninstall crcmod | |
| 88 sudo pip install -U crcmod | |
| 89 | |
| 90 Mac OS X | |
| 91 -------- | |
| 92 | |
| 93 gsutil distributes a pre-compiled version of crcmod for OS X, so you shouldn't | |
| 94 need to compile and install it yourself. If for some reason the pre-compiled | |
| 95 version is not being detected, please let the Google Cloud Storage team know | |
| 96 (see "gsutil help support"). | |
| 97 | |
| 98 To compile manually on OS X, you will first need to install | |
| 99 `XCode <https://developer.apple.com/xcode/>`_ and then run: | |
| 100 | |
| 101 sudo easy_install -U pip | |
| 102 sudo pip install -U crcmod | |
| 103 | |
| 104 Windows | |
| 105 ------- | |
| 106 | |
| 107 An installer is available for the compiled version of crcmod from the Python | |
| 108 Package Index (PyPi) at the following URL: | |
| 109 | |
| 110 https://pypi.python.org/pypi/crcmod/1.7 | |
| 111 | |
| 112 MSI installers are available for the 32-bit versions of Python 2.6 and 2.7. | |
| 113 | |
| 114 """) | |
| 115 | |
| 116 | |
| 117 class CommandOptions(HelpProvider): | |
| 118 """Additional help about CRC32C and installing crcmod.""" | |
| 119 | |
| 120 # Help specification. See help_provider.py for documentation. | |
| 121 help_spec = HelpProvider.HelpSpec( | |
| 122 help_name='crc32c', | |
| 123 help_name_aliases=['crc32', 'crc', 'crcmod'], | |
| 124 help_type='additional_help', | |
| 125 help_one_line_summary='CRC32C and Installing crcmod', | |
| 126 help_text=_DETAILED_HELP_TEXT, | |
| 127 subcommand_help_text={}, | |
| 128 ) | |
| OLD | NEW |