{ "info": { "author": "Lauri V\u00f5sandi", "author_email": "lauri.vosandi@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: Freely Distributable", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 3 :: Only", "Topic :: System :: Recovery Tools", "Topic :: System :: Software Distribution" ], "description": "Butterknife command-line utility\n================================\n\nIntroduction\n------------\n\nButterknife command-line utility can be used to serve snapshots via HTTP;\nsend and receive snapshots over SSH and multicast;\nlist local and remote snapshots.\n\nInstallation\n------------\n\nInstall dependencies:\n\n.. code:: bash\n\n sudo apt-get install lxc python3-dev cython3 python3-pip pigz btrfs-progs\n sudo apt-get install python3-lxc # Ubuntu 14.04 or older\n sudo pip3 install jinja2 click falcon\n\nInstall Butterknife:\n\n.. code:: bash\n\n sudo pip3 install butterknife\n\n\nListing templates\n-----------------\n\nList local templates at /var/lib/butterknife/pool:\n\n.. code:: bash\n\n butterknife list\n\nList local templates in a particular directory:\n\n.. code:: bash\n\n butterknife list file:///path/to/directory\n \nList templates at /var/lib/butterknife/pool on a remote machine via SSH:\n\n.. code:: bash\n\n butterknife list ssh://hostname\n \nList templates at remote machine via HTTP:\n\n.. code:: bash\n\n butterknife list http[s]://hostname[:port]\n\n\nPushing/pulling templates\n-------------------------\n\nCurrently pull over SSH is working. Following replicates\n/var/lib/butterknife/pool from machine *hostname* to local pool\nat /var/lib/butterknife/pool:\n\n.. code:: bash\n\n butterknife pull ssh://hostname\n\nYou can also pull via HTTP:\n\n.. code:: bash\n\n butterknife pull http://butterknife.koodur.com\n \nNote that symmetric push/pull requires patched btrfs-progs which has additional -p and -C flags for btrfs receive.\n\n\nMulticast\n---------\n\nSending local template via multicast:\n\n.. code:: bash\n\n butterknife multicast send @template\\:com.koodur.butterknife.Ubuntu\\:x86_64\\:snap7\n\nYou can even multicast a remote subvolume:\n\n.. code:: bash\n\n butterknife multicast send @template\\:com.koodur.butterknife.Ubuntu\\:x86_64\\:snap7 --pool ssh://hostname\n\nReceiving to local pool at /var/lib/butterknife/pool:\n\n.. code:: bash\n\n butterknife multicast receive\n\nsystemd-nspawn workflow\n-----------------------\n\nCreate a btrfs subvolume for your butterknife image under /var/lib/machines. \nReplace ArchLinux with your image name you want to use.\n\n.. code:: bash\n\n sudo btrfs subvolume create /var/lib/machines/ArchLinux\n\nInstall base system in there\n\n.. code:: bash\n\n sudo pacstrap -i -c -d /var/lib/machines/ArchLinux base\n\nNspawn into it and customize your container\n\n.. code:: bash\n\n sudo systemd-nspawn -M ArchLinux\n # do your thing\n\nYou will also need some scripts that will be ran on snapshot creation and when\ndoing deployments with provision image.\n\nlook into the `puppet-butterknife `_ repository for scripts and files you should add\n\n\nCreate butterknife config file in\n/var/lib/machines/ArchLinux/etc/butterknife/butterknife.conf\n\n.. code:: ini\n\n [template]\n name=ArchLinux\n \nAlso make sure that you have something like this on your host \netc/butterknife/butterknife.conf config file\n\n.. code:: ini\n\n [global]\n namespace=org.example.butterknife\n endpoint=https://butterknife.example.org\n\nTake a snapshot of your image\n\n.. code:: bash\n\n butterknife nspawn release ArchLinux\n\nAnd now you should be ready to serve that image to your clients", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/laurivosandi/butterknife", "keywords": "btrfs falcon multicast http snapshot bare-metal lxc jinja2", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "butterknife", "package_url": "https://pypi.org/project/butterknife/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/butterknife/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://github.com/laurivosandi/butterknife" }, "release_url": "https://pypi.org/project/butterknife/0.2.0/", "requires_dist": null, "requires_python": null, "summary": "Butterknife makes bare-metal Linux deployment dead-simple using the Linux Containers (LXC) and Btrfs filesystem.", "version": "0.2.0" }, "last_serial": 2105870, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "c5a3bef48cab1accec73d18c19a5b2cb", "sha256": "a44159f60d2892151283d3228fefafbcda1a93350fa74da7382aacde8287abad" }, "downloads": -1, "filename": "butterknife-0.1.0.tar.gz", "has_sig": false, "md5_digest": "c5a3bef48cab1accec73d18c19a5b2cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8991, "upload_time": "2015-06-09T14:31:19", "url": "https://files.pythonhosted.org/packages/dd/14/8c2d1f625fced561682dd425b09d04b2a4ae3283b079bd11ba8fe9e95be5/butterknife-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "23905c18de9cf8cd41f634fb86975cac", "sha256": "175bca1efeb7d63ac275737248544d355fe994d740af8b493bab310d9eb80fef" }, "downloads": -1, "filename": "butterknife-0.1.1.tar.gz", "has_sig": false, "md5_digest": "23905c18de9cf8cd41f634fb86975cac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8978, "upload_time": "2015-06-09T14:33:12", "url": "https://files.pythonhosted.org/packages/be/bc/9e95d90a879f60f1cac6664aeefee814cf53e0a303508683b27e548cf4da/butterknife-0.1.1.tar.gz" } ], "0.1.10": [ { "comment_text": "", "digests": { "md5": "235538e7f4bf1adc54476b118f443266", "sha256": "621cf66b3619837c4e1d9f2970cbdf9d1f1137a42aff7e55c4fdfd7f94589430" }, "downloads": -1, "filename": "butterknife-0.1.10.tar.gz", "has_sig": false, "md5_digest": "235538e7f4bf1adc54476b118f443266", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12292, "upload_time": "2015-06-09T15:58:13", "url": "https://files.pythonhosted.org/packages/00/6a/0262301e000c63facbf4fdb0578b54e791fd7532c86099a6e8622ebade53/butterknife-0.1.10.tar.gz" } ], "0.1.11": [ { "comment_text": "", "digests": { "md5": "a81b5724a9d049b4babb52128d926c51", "sha256": "f2283dd23bc6450b52712689d5d2f8e6e2d4fb857b3c35cac3a8dc35dae5aa2f" }, "downloads": -1, "filename": "butterknife-0.1.11.tar.gz", "has_sig": false, "md5_digest": "a81b5724a9d049b4babb52128d926c51", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12367, "upload_time": "2015-06-26T20:17:18", "url": "https://files.pythonhosted.org/packages/6d/66/42501e30148d5c2a283f08713b2e223ace97e4068af0388621f92334e856/butterknife-0.1.11.tar.gz" } ], "0.1.12": [ { "comment_text": "", "digests": { "md5": "97e17d88cf5d5bad26fba9568b2f7a23", "sha256": "6dae8bd98bc53ab339eef45c377a4b1f69da180a83cbf0a84005492c9795031c" }, "downloads": -1, "filename": "butterknife-0.1.12.tar.gz", "has_sig": false, "md5_digest": "97e17d88cf5d5bad26fba9568b2f7a23", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12360, "upload_time": "2015-06-26T20:40:47", "url": "https://files.pythonhosted.org/packages/a0/7d/958ae792114f77b7ba2ffff14ab149a901a1896f3c11f72eef5eeaf516bf/butterknife-0.1.12.tar.gz" } ], "0.1.13": [ { "comment_text": "", "digests": { "md5": "ddd3eeec893250d344b8f7a0ffc88de6", "sha256": "93464f4974c1a5b8a755d253ac8e13a858109e3ac540bc914081956202a039a8" }, "downloads": -1, "filename": "butterknife-0.1.13.tar.gz", "has_sig": false, "md5_digest": "ddd3eeec893250d344b8f7a0ffc88de6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12347, "upload_time": "2015-06-26T20:41:38", "url": "https://files.pythonhosted.org/packages/1f/e0/cdbc0c3533820637205d1dc52e37784e4663d1dd117a73ffcf5d61228750/butterknife-0.1.13.tar.gz" } ], "0.1.14": [ { "comment_text": "", "digests": { "md5": "0cb31fa27f5e50e72a80096d2ac75915", "sha256": "bf92493b48b96f17302526726f6c89bb4e5db8631db41ecc4c050b43fec4714a" }, "downloads": -1, "filename": "butterknife-0.1.14.tar.gz", "has_sig": false, "md5_digest": "0cb31fa27f5e50e72a80096d2ac75915", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12358, "upload_time": "2015-06-26T20:46:28", "url": "https://files.pythonhosted.org/packages/a3/02/95fc1cbedeccd0e0363d41f38c173375686582d2f5d0faf8ada798c5b9fb/butterknife-0.1.14.tar.gz" } ], "0.1.15": [ { "comment_text": "", "digests": { "md5": "7250b83a3d78e8b497bdf1f05021ca49", "sha256": "b48e0eb394f4e50601d7a73a0b23de0d8bdd033b6c104a49b721bb8948757d0c" }, "downloads": -1, "filename": "butterknife-0.1.15.tar.gz", "has_sig": false, "md5_digest": "7250b83a3d78e8b497bdf1f05021ca49", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12354, "upload_time": "2015-06-26T20:47:24", "url": "https://files.pythonhosted.org/packages/3d/25/792337cacd37d2a97ffd43e38f53f2060225eae3a731d50ccbc283962f89/butterknife-0.1.15.tar.gz" } ], "0.1.16": [ { "comment_text": "", "digests": { "md5": "f55671b570888f19659e8e969a99ffc7", "sha256": "ccafeb5f378a6357a2cc341d74fdad645383f636fd3bd89e61e24f0ec87ac5cf" }, "downloads": -1, "filename": "butterknife-0.1.16.tar.gz", "has_sig": false, "md5_digest": "f55671b570888f19659e8e969a99ffc7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20120, "upload_time": "2015-12-30T10:21:32", "url": "https://files.pythonhosted.org/packages/de/bc/2ad87d2bcfa311bb7b42065c2766f4be8180becf7d8f411ceaf14b37eadf/butterknife-0.1.16.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "cf0065396a3c08ad627c4c37a6e26897", "sha256": "65646a29b5be470112330a1302bc7c8f4b374d0f964b8f099cb0edd4bc588685" }, "downloads": -1, "filename": "butterknife-0.1.2.tar.gz", "has_sig": false, "md5_digest": "cf0065396a3c08ad627c4c37a6e26897", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9069, "upload_time": "2015-06-09T14:39:25", "url": "https://files.pythonhosted.org/packages/1d/0d/44a49c8a950d225742b1a9bc1a6d08c10a8f0dbb4cf963c6cce555a2a3de/butterknife-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "ec075fe4fd26ed60598adf819759d7f0", "sha256": "cff2fe57a2340aac08e36dc146b3d154b9d5f7ac257e6a44c3892d5635d85a85" }, "downloads": -1, "filename": "butterknife-0.1.3.tar.gz", "has_sig": false, "md5_digest": "ec075fe4fd26ed60598adf819759d7f0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9119, "upload_time": "2015-06-09T14:41:43", "url": "https://files.pythonhosted.org/packages/cc/73/4e68dad22b78a0ab126a34e34a2516625d4b12482c44463608dda990dce9/butterknife-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "d96505646d6ab6a2a74d4f823fbce4b5", "sha256": "09f6f417c63d78035651f38a91bf418479c2438103e43f32a071005b3245053c" }, "downloads": -1, "filename": "butterknife-0.1.4.tar.gz", "has_sig": false, "md5_digest": "d96505646d6ab6a2a74d4f823fbce4b5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9117, "upload_time": "2015-06-09T14:43:40", "url": "https://files.pythonhosted.org/packages/98/aa/bbcbba39589968be7d59bfe1afe9ffb9f2c559ec16971684dbf0425b287e/butterknife-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "9a0526ec61a036b7c03b2e05605ab7a1", "sha256": "956db443ca3283a266882f9087dc8eb2059bc0f905cf64f96c036d1615a8df05" }, "downloads": -1, "filename": "butterknife-0.1.5.tar.gz", "has_sig": false, "md5_digest": "9a0526ec61a036b7c03b2e05605ab7a1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12218, "upload_time": "2015-06-09T15:01:40", "url": "https://files.pythonhosted.org/packages/ee/03/2e5d35f7ee04d838060a0e1af1b70a6aedd3e45b35a0302049c2e8f6e59b/butterknife-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "21c307a728f16cfe4cca0ace2cc01dc0", "sha256": "8069d537e970a33166405a1f3037b2f774d61781a6fc2d5517c46a904dea1d38" }, "downloads": -1, "filename": "butterknife-0.1.6.tar.gz", "has_sig": false, "md5_digest": "21c307a728f16cfe4cca0ace2cc01dc0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12237, "upload_time": "2015-06-09T15:13:25", "url": "https://files.pythonhosted.org/packages/37/14/ba767c2b91607db9c3f0925c50b8dba49e8c52d8b7606a8c6a2711d7f013/butterknife-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "95726f0fafc9cb9afe5c54363e245afc", "sha256": "c16212e40b70b81e809ef7cf089a9982bc45a03d00a2517ee61e5788e3d150a4" }, "downloads": -1, "filename": "butterknife-0.1.7.tar.gz", "has_sig": false, "md5_digest": "95726f0fafc9cb9afe5c54363e245afc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12310, "upload_time": "2015-06-09T15:50:45", "url": "https://files.pythonhosted.org/packages/1e/75/24cdd6342a7352a7821ab29c4d02b21ec723a4bea56810b97cf60c4cfd90/butterknife-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "cc45bca65acbd45e67a95d67631e93f5", "sha256": "b521c8801a73bc6f1174bd9fb269da4518ca1177cf5c48a5ea8b4e813e2e48a1" }, "downloads": -1, "filename": "butterknife-0.1.8.tar.gz", "has_sig": false, "md5_digest": "cc45bca65acbd45e67a95d67631e93f5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12287, "upload_time": "2015-06-09T15:55:36", "url": "https://files.pythonhosted.org/packages/e6/dc/eb16ec6665281ed3ffbadaaa2b9f8707198a4899c4d1f4d89e9fe840da54/butterknife-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "3c4aad0bf819a666c7c92916ad767304", "sha256": "3698e52e8d879142e24b77dffcd2f7437e9523b97e9a63c3c6e29043a78165eb" }, "downloads": -1, "filename": "butterknife-0.1.9.tar.gz", "has_sig": false, "md5_digest": "3c4aad0bf819a666c7c92916ad767304", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12287, "upload_time": "2015-06-09T15:57:06", "url": "https://files.pythonhosted.org/packages/7a/59/00865349583ded33a779b56fd25317c02ef511208b4b3a12734832d66586/butterknife-0.1.9.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "3f3648c11a41fbff15b9c9ed5dd84abf", "sha256": "71b9bc4753c26d71b62eac33c49805966f765b8a3199f2214dfd3e545ee52be7" }, "downloads": -1, "filename": "butterknife-0.2.0.tar.gz", "has_sig": false, "md5_digest": "3f3648c11a41fbff15b9c9ed5dd84abf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19264, "upload_time": "2016-05-09T06:12:38", "url": "https://files.pythonhosted.org/packages/9a/38/a82310c322873de40d3545619e5c0924b844d21dd78eec52cb36a74a7217/butterknife-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3f3648c11a41fbff15b9c9ed5dd84abf", "sha256": "71b9bc4753c26d71b62eac33c49805966f765b8a3199f2214dfd3e545ee52be7" }, "downloads": -1, "filename": "butterknife-0.2.0.tar.gz", "has_sig": false, "md5_digest": "3f3648c11a41fbff15b9c9ed5dd84abf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19264, "upload_time": "2016-05-09T06:12:38", "url": "https://files.pythonhosted.org/packages/9a/38/a82310c322873de40d3545619e5c0924b844d21dd78eec52cb36a74a7217/butterknife-0.2.0.tar.gz" } ] }