{ "info": { "author": "Andrew Peabody", "author_email": "apeabody@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Topic :: Software Development :: Build Tools" ], "description": "gdistcc\n=======\n\n|Build Status| |Dependency Status| |PyPI version|\n\nGdistcc provides easy access to compiling 'make' based software on\nGoogle Compute Engine via `distcc `__\nwith local caching via `ccache `__. The\ninclusion of ccache provides a local cache of compiled objects, to\nprevent costly repeat compilation.\n\nhttp://gdistcc.andrewpeabody.com\n\nRequirements\n------------\n\nGdistcc has been designed to require minimal dependencies outside of\nyour base distribution and the Google Cloud APIs.\n\n- Linux Distributions\n\n - CentOS 7\n - Ubuntu 16.04 LTS\n - Ubuntu 14.04 LTS\n - Debian 8\n\n- Distro Dependencies\n- python 2.7\n- ccache\n- distcc\n- git\n\n- `Google Cloud SDK `__ (Instructions\n Below)\n- google-api-python-client (Instructions Below)\n\nNOTE: Your application MUST currently be using 'make' and configured to\nuse `ccache `__. Learn more about ccache\n`here `__.\n\nSetup Instructions\n------------------\n\n1. Ensure your Linux distro is currently supported, and fully updated.\n This is critical to ensure the development toolchain is compatible.\n\nCentOS: ``sudo yum upgrade -y sudo yum install ccache distcc git``\n\nUbuntu:\n``sudo apt-get update && sudo apt-get upgrade sudo apt-get install ccache distcc git python-pip python-googleapi``\n\nNOTE: If a new kernel is installed, please reboot before continuing.\n\n2. Create a \"gdistcc\" project on the `Google\n Cloud `__\n3. Install the `Google Cloud SDK `__\n\nCentOS: https://cloud.google.com/sdk/downloads#linux\n\nUbuntu: https://cloud.google.com/sdk/downloads#apt-get\n\n4. Authenticate with the Google Cloud\n\n``gcloud init``\n\nYou CAN choose gdistcc as your default project and us-central-c as the\ndefault zone. But it is NOT mandatory.\n\n5. Install the google-api-python-client via your distro or pip.\n\n``sudo pip install --upgrade google-api-python-client``\n\n6. Install gdistcc\n\n``sudo pip install gdistcc``\n\nAlternatively you can clone the full source from github and use the\n'./gdistcc.py' wrapper in place of 'gdistcc' below.\n``git clone https://github.com/apeabody/gdistcc``\n\nUsing gdistcc\n-------------\n\nGdistcc is designed to be stateless, however there is a minimal config\nfile to customize the project, zone, and prefix if needed.\n\n::\n\n usage: gdistcc [-h] [--settingsfile SETTINGSFILE] [--qty QTY]\n [--skipfullstartup] [--globalinstances] [--version]\n {start,status,make,stop}\n\n positional arguments:\n {start,status,make,stop}\n\n optional arguments:\n -h, --help show this help message and exit\n --settingsfile SETTINGSFILE\n Custom settings file. (default:\n ./settings.json)\n --qty QTY Qty of Instances to deploy during start mode.\n (default: 8)\n --skipfullstartup Skip waiting for full instance startup during start\n --globalinstances Use all discovered instances for this prefix and\n distro, not just ones started by the local hosts\n --version show program's version number and exit\n\n Copyright 2016 Andrew Peabody. See README.md for details.\n\ngdistcc's primary modes\n~~~~~~~~~~~~~~~~~~~~~~~\n\nstart\n^^^^^\n\nAn example that starts (4) gdistcc instances in preparation for a remote\ncompile, and polls till they are fully online and ready. This normally\ntake a minute or two depending on the speed of the instance, and number\nof dependencies.\n\n``gdistcc start --qty 4``\n\nNOTE: By default gdistcc will wait for all instances to fully start,\nthis can be skiped with ``--skipfullstartup``. This may be useful if the\nlocal machine is fast enough to start the compile in advance of the\n1-2minute full startup.\n\nNOTE: The first time you use glcoud on this host you may be prompted to\nenter a passphrase - please enter twice to use no passphrase.\n\nstatus\n^^^^^^\n\nCheck the status of your gdistcc instances.\n\n``gdistcc status``\n\nNOTE: This will currently fail if the instances have been preempted by\nGoogle.\n\nmake\n^^^^\n\nBuild your 'make' based application, **be sure to be in the desired\nbuild root before running.**\n\n``gdistcc make``\n\nstop\n^^^^\n\nStop your gdistcc instances.\n\n``gdistcc stop``\n\nSample ~/.ssh/config\n~~~~~~~~~~~~~~~~~~~~\n\nIt is recommended to add these options to your ssh client to suppress\nthe hostkey checks, and default to the high performance\naes256-gcm@openssh.com cipher for your gdistcc instances.\n\n::\n\n Host *.gdistcc\n ControlMaster auto\n ControlPath ~/.ssh/%r@%h:%p\n ControlPersist 5m\n Ciphers aes256-gcm@openssh.com\n StrictHostKeyChecking no\n UserKnownHostsFile=/dev/null\n LogLevel ERROR\n\nNOTE: In some cases I've found the ControlMaster mux to be unreliable\nwith multiple streams of simulantious file transfer, but when using\ng1-small instances doing a single build I'm hoping this will work and\ngreatly speed up the ssh connection.\n\nLimitations/Warnings\n--------------------\n\n- **Always confirm all instances are shutdown after use - you are\n solely responsible for their cost.**\n- Gdistcc uses `preememptible\n instances `__\n which offer preferred pricing, but Google may shutdown on short\n notice. A ``gdistcc status`` and fresh ``gdistcc make`` will check\n (and avoid using) an instance that has been preemempted,\n ``gdistcc stop`` will delete a terminated instance as normal. One\n \"advantage\" of preemptible instances is they won't run more than\n 24hr, reducing the risk of forgotten instances.\n- Future versions may not require ccache.\n- Only SSH is supported at the transport for distcc. Distcc's native\n TCP transport is not enabled due to `security\n concerns `__.\n- Gdistcc does NOT currently use distcc's Pump Mode for the following\n reasons:\n- Gdistcc is intended for frequent re-compiles, so most header\n pre-processing will hopefully be cached by ccache anyway - mutally\n exclusive from pump mode.\n- Gdistcc uses ssh over the internet for transfers, so minimizing the\n transfered file size is advantageous. (In a local/HPC setup distcc\n can be used over TCP for higher transfer speeds.)\n- Installing the required system headers would slow the instance\n startup significantly.\n- While system headers from normal repos are easily added to the start\n up script, others would require significant customization/setup time.\n- A ``--pumpmode`` could/might be added in the future for those so\n inclined to the above notes.\n\nHistory / License\n-----------------\n\nWritten/Copyright 2016 `Andrew Peabody `__.\n(apeabody@gmail.com)\n\nBased on sample code Copyright 2015 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may\nnot use this file except in compliance with the License. You may obtain\na copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n.. |Build Status| image:: https://travis-ci.org/apeabody/gdistcc.svg?branch=master\n :target: https://travis-ci.org/apeabody/gdistcc\n.. |Dependency Status| image:: https://gemnasium.com/badges/github.com/apeabody/gdistcc.svg\n :target: https://gemnasium.com/github.com/apeabody/gdistcc\n.. |PyPI version| image:: https://badge.fury.io/py/gdistcc.svg\n :target: https://badge.fury.io/py/gdistcc", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/apeabody/gdistcc", "keywords": "google compute engine distcc make", "license": "APACHE", "maintainer": "", "maintainer_email": "", "name": "gdistcc", "package_url": "https://pypi.org/project/gdistcc/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/gdistcc/", "project_urls": { "Homepage": "https://github.com/apeabody/gdistcc" }, "release_url": "https://pypi.org/project/gdistcc/0.9.3.post3/", "requires_dist": [ "google-api-python-client", "six" ], "requires_python": "", "summary": "gdistcc: the easy way to compile in the cloud!", "version": "0.9.3.post3" }, "last_serial": 2182440, "releases": { "0.9": [ { "comment_text": "", "digests": { "md5": "96888f4646f77a0ca35bef3e145b73e9", "sha256": "a8aa1b048d1edc9eae286f194613249fb185aefe44009bd912fc40c7a5f96715" }, "downloads": -1, "filename": "gdistcc-0.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "96888f4646f77a0ca35bef3e145b73e9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8625, "upload_time": "2016-06-22T21:01:11", "url": "https://files.pythonhosted.org/packages/dd/72/6d7610fec392fdd3584e6f4154d8f070c0658275d51bf620f6258ec54685/gdistcc-0.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "de79dfb40ab86a9f4ee4830484043d92", "sha256": "2de55d2f28618c282ecfaeaad1122278e75f0888288ede88bd1550f6864a6422" }, "downloads": -1, "filename": "gdistcc-0.9.tar.gz", "has_sig": false, "md5_digest": "de79dfb40ab86a9f4ee4830484043d92", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5709, "upload_time": "2016-06-22T20:57:10", "url": "https://files.pythonhosted.org/packages/b4/fa/90de2bf8873ed88adcd76f9e8d10931d9d26c2c6c48be1fa79f0be7f0f32/gdistcc-0.9.tar.gz" } ], "0.9.1": [ { "comment_text": "", "digests": { "md5": "b97081d297c2200bfd8ec07126dea7a0", "sha256": "247584e77b89d8a629872cc449f2611722bc5dc3ced43c7fd8de19adc4ff6781" }, "downloads": -1, "filename": "gdistcc-0.9.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b97081d297c2200bfd8ec07126dea7a0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16872, "upload_time": "2016-06-22T22:16:03", "url": "https://files.pythonhosted.org/packages/ff/c2/7be1bef0ac19204a972b4a32730a090938d36267d498e1b586302741a027/gdistcc-0.9.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5601cc42f49426061137f7afda30ad45", "sha256": "5cbc4d1bfd384e4f0bd99718f7a5ddacfb41cc42e1044f6fb16795872bb4e86b" }, "downloads": -1, "filename": "gdistcc-0.9.1.tar.gz", "has_sig": false, "md5_digest": "5601cc42f49426061137f7afda30ad45", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14329, "upload_time": "2016-06-22T22:16:07", "url": "https://files.pythonhosted.org/packages/36/b8/9b58e3ff180a9b1b80517f7605d6f6051ffe9ade6411bd69b6cf81d9c6f9/gdistcc-0.9.1.tar.gz" } ], "0.9.2": [ { "comment_text": "", "digests": { "md5": "e0d15670cf23b9a87484049e51745355", "sha256": "c0d97e5575c2315efcb7975e3a5cfa3fadefcb8af298fbf47a0a0a1016430f49" }, "downloads": -1, "filename": "gdistcc-0.9.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e0d15670cf23b9a87484049e51745355", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17482, "upload_time": "2016-06-22T22:44:53", "url": "https://files.pythonhosted.org/packages/03/00/226688d13c45ca7c0361e3e6ab1bd4ebe37a50c8b5a7bf4ae30b89026448/gdistcc-0.9.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f1ecadeee670e92b50913d7bd3c15bc9", "sha256": "f95587ca0b415ee340cfe04d646cc3cd6c762621b7e550e524027c2221580743" }, "downloads": -1, "filename": "gdistcc-0.9.2.tar.gz", "has_sig": false, "md5_digest": "f1ecadeee670e92b50913d7bd3c15bc9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14536, "upload_time": "2016-06-22T22:44:57", "url": "https://files.pythonhosted.org/packages/f4/61/0bf4fa566814c8ae5fd33c58469f67821829000046fc70178a470cfb8af7/gdistcc-0.9.2.tar.gz" } ], "0.9.3": [ { "comment_text": "", "digests": { "md5": "82eda59e5cc48fa39f8aeb36ef25f114", "sha256": "a2d43c509d0b2dbf9b9144ecd358bb56ae86f14dd222566daf6535cbb0a22641" }, "downloads": -1, "filename": "gdistcc-0.9.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "82eda59e5cc48fa39f8aeb36ef25f114", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17487, "upload_time": "2016-06-23T00:22:30", "url": "https://files.pythonhosted.org/packages/c8/c9/0a7ea5c5719a7a859a2bb68a84a2eccb59304a9dd4902ff9c9bf89f62ddb/gdistcc-0.9.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9d28db3cec6107f7f513f7a98b21561c", "sha256": "dccca344beb014c35c1e0b120308c3ddf9bccd6af5958b1e169cc6c4d7e971ef" }, "downloads": -1, "filename": "gdistcc-0.9.3.tar.gz", "has_sig": false, "md5_digest": "9d28db3cec6107f7f513f7a98b21561c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14629, "upload_time": "2016-06-23T00:22:35", "url": "https://files.pythonhosted.org/packages/93/d9/91ca6a695ad8e38bad3e6a1771e850c23cafedd22be44b7954f511375841/gdistcc-0.9.3.tar.gz" } ], "0.9.3.post2": [ { "comment_text": "", "digests": { "md5": "c296100c795742dd6e9a5afe50229280", "sha256": "720146f85653e4298d5b8a46fcf37d169e3b59cad9d4295a1773ea81616d0170" }, "downloads": -1, "filename": "gdistcc-0.9.3.post2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c296100c795742dd6e9a5afe50229280", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17585, "upload_time": "2016-06-23T00:27:31", "url": "https://files.pythonhosted.org/packages/44/01/0a7ae87e35baba8dc37d49e44c918e390c8cafc49d499c42785b4cd399ef/gdistcc-0.9.3.post2-py2.py3-none-any.whl" } ], "0.9.3.post3": [ { "comment_text": "", "digests": { "md5": "205bd998fd7649280a50d41608c2709f", "sha256": "24096002567834c63aa6d344dc0c03093c25bb7301c911fb2d86782303446ac8" }, "downloads": -1, "filename": "gdistcc-0.9.3.post3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "205bd998fd7649280a50d41608c2709f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17592, "upload_time": "2016-06-23T00:30:49", "url": "https://files.pythonhosted.org/packages/69/d4/079f0767268eb9d860ce45f49e62b504ef3f768b9756723e14e01977af89/gdistcc-0.9.3.post3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fe96bebf8f4b563ecd5a5990facbd8f0", "sha256": "b2f2d4b7d1e4281e44c46c71ced4078d1fccfd51a8078e8e0450a2d1e92c6085" }, "downloads": -1, "filename": "gdistcc-0.9.3.post3.tar.gz", "has_sig": false, "md5_digest": "fe96bebf8f4b563ecd5a5990facbd8f0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14645, "upload_time": "2016-06-23T00:31:00", "url": "https://files.pythonhosted.org/packages/53/3a/e06bdda58dca3221a4b5d8d675ede148a743360d57b4d4642a61ae6c0d1d/gdistcc-0.9.3.post3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "205bd998fd7649280a50d41608c2709f", "sha256": "24096002567834c63aa6d344dc0c03093c25bb7301c911fb2d86782303446ac8" }, "downloads": -1, "filename": "gdistcc-0.9.3.post3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "205bd998fd7649280a50d41608c2709f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17592, "upload_time": "2016-06-23T00:30:49", "url": "https://files.pythonhosted.org/packages/69/d4/079f0767268eb9d860ce45f49e62b504ef3f768b9756723e14e01977af89/gdistcc-0.9.3.post3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fe96bebf8f4b563ecd5a5990facbd8f0", "sha256": "b2f2d4b7d1e4281e44c46c71ced4078d1fccfd51a8078e8e0450a2d1e92c6085" }, "downloads": -1, "filename": "gdistcc-0.9.3.post3.tar.gz", "has_sig": false, "md5_digest": "fe96bebf8f4b563ecd5a5990facbd8f0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14645, "upload_time": "2016-06-23T00:31:00", "url": "https://files.pythonhosted.org/packages/53/3a/e06bdda58dca3221a4b5d8d675ede148a743360d57b4d4642a61ae6c0d1d/gdistcc-0.9.3.post3.tar.gz" } ] }