{ "info": { "author": "", "author_email": "", "bugtrack_url": null, "classifiers": [ "Framework :: Buildout :: Recipe", "Programming Language :: Python" ], "description": "=====================\n slapos.recipe.build\n=====================\n\n.. contents::\n\nExamples\n--------\n\nRecipe to build the software.\n\nExample buildout::\n\n [buildout]\n parts =\n script\n\n [script]\n # default way with using script\n recipe = slapos.recipe.build\n url_0 = http://host/path/file.tar.gz\n md5sum = 9631070eac74f92a812d4785a84d1b4e\n script =\n import os\n os.chdir(%(work_directory)s)\n unpack(%(url_0), strip_path=True)\n execute('make')\n execute('make install DEST=%(location)s')\n slapos_promise =\n directory:bin\n dynlib:bin/file linked:libz.so.1,libc.so.6,libmagic.so.1 rpath:${zlib:location}/lib,!/lib\n directory:include\n file:include/magic.h\n directory:lib\n statlib:lib/libmagic.a\n statlib:lib/libmagic.la\n dynlib:lib/libmagic.so linked:libz.so.1,libc.so.6 rpath:${zlib:location}/lib\n dynlib:lib/libmagic.so.1 linked:libz.so.1,libc.so.6 rpath:${zlib:location}/lib\n dynlib:lib/libmagic.so.1.0.0 linked:libz.so.1,libc.so.6 rpath:${zlib:location}/lib\n directory:share\n directory:share/man\n directory:share/man/man1\n file:share/man/man1/file.1\n directory:share/man/man3\n file:share/man/man3/libmagic.3\n directory:share/man/man4\n file:share/man/man4/magic.4\n directory:share/man/man5\n directory:share/misc\n file:share/misc/magic.mgc\n\n [multiarchitecture]\n recipe = slapos.recipe.build\n slapos_promise =\n ...\n x86 = http://host/path/x86.zip [md5sum]\n x86-64 = http://host/path/x64.zip [md5sum]\n script =\n if not self.options.get('url'): self.options['url'], self.options['md5sum'] = self.options[guessPlatform()].split(' ')\n extract_dir = self.extract(self.download(self.options['url'], self.options.get('md5sum')))\n workdir = guessworkdir(extract_dir)\n self.copyTree(workdir, \"%(location)s\")\n\nYou can remove formatting by using option \u201cformat = no\u201d (default is \u201cyes\u201d)\n\nFor example::\n\n [escaping]\n recipe = slapos.recipe.build\n example = foobar's one\n script =\n print('%%s' %% self.options['example'])\n # will print \u201cfoobar's one\u201d\n\n [no-escaping]\n recipe = slapos.recipe.build\n example = foobar's one\n foo = bar\n format = no\n script =\n print('%s' % self.options['example'])\n # will print \u201cfoobar's one\u201d\n print('%(foo)s')\n # will print \u201c%(foo)s\u201d\n\nPure download\n~~~~~~~~~~~~~\n\nNote: deprecated entry-point.\n\n::\n\n [buildout]\n parts =\n download\n\n [download]\n recipe = slapos.recipe.build:download\n url = https://some.url/file\n\nSuch profile will download https://some.url/file and put it in\nbuildout:parts-directory/download/download\n\nfilename parameter can be used to change destination named filename.\n\ndestination parameter allows to put explicit destination.\n\nmd5sum parameter allows pass md5sum.\n\nmode (octal, so for rw-r--r-- use 0644) allows to set mode\n\nExposes target attribute which is path to downloaded file.\n\nNotes\n-----\n\nThis recipe suffers from buildout download utility issue, which will do not\ntry to redownload resource with wrong md5sum.\n\n==============================\n slapos.recipe.build:gitclone\n==============================\n\nCheckout a git repository and its submodules by default.\nSupports slapos.libnetworkcache if present, and if boolean 'use-cache' option\nis true.\n\nExamples\n--------\n\nThose examples use slapos.recipe.build repository as an example.\n\nSimple clone\n~~~~~~~~~~~~\n\nOnly `repository` parameter is required. For each buildout run,\nthe recipe will pick up the latest commit on the remote master branch::\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = git-clone\n ...\n ... [git-clone]\n ... recipe = slapos.recipe.build:gitclone\n ... repository = https://lab.nexedi.com/nexedi/slapos.recipe.build.git\n ... use-cache = true\n ... \"\"\")\n\nThis will clone the git repository in `parts/git-clone` directory.\nThen let's run the buildout::\n\n >>> print(system(buildout))\n Installing git-clone.\n Cloning into '/sample-buildout/parts/git-clone'...\n\nLet's take a look at the buildout parts directory now::\n\n >>> ls(sample_buildout, 'parts')\n d git-clone\n\nWhen updating, it will do a \"git fetch; git reset @{upstream}\"::\n\n >>> print(system(buildout))\n Updating git-clone.\n Fetching origin\n HEAD is now at ...\n\nSpecific branch\n~~~~~~~~~~~~~~~\n\nYou can specify a specific branch using `branch` option. For each\nrun it will take the latest commit on this remote branch::\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = git-clone\n ...\n ... [git-clone]\n ... recipe = slapos.recipe.build:gitclone\n ... repository = https://lab.nexedi.com/nexedi/slapos.recipe.build.git\n ... branch = build_remove_downloaded_files\n ... \"\"\")\n\nThen let's run the buildout::\n\n >>> print(system(buildout))\n Uninstalling git-clone.\n Running uninstall recipe.\n Installing git-clone.\n Cloning into '/sample-buildout/parts/git-clone'...\n\nLet's take a look at the buildout parts directory now::\n\n >>> ls(sample_buildout, 'parts')\n d git-clone\n\nAnd let's see that current branch is \"build\"::\n\n >>> import subprocess\n >>> cd('parts', 'git-clone')\n >>> print(subprocess.check_output(['git', 'branch'], universal_newlines=True))\n * build_remove_downloaded_files\n\nWhen updating, it will do a \"git fetch; git reset build\"::\n\n >>> cd(sample_buildout)\n >>> print(system(buildout))\n Updating git-clone.\n Fetching origin\n HEAD is now at ...\n\nSpecific revision\n~~~~~~~~~~~~~~~~~\n\nYou can specify a specific commit hash or tag using `revision` option.\nThis option has priority over the \"branch\" option::\n\n >>> cd(sample_buildout)\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = git-clone\n ...\n ... [git-clone]\n ... recipe = slapos.recipe.build:gitclone\n ... repository = https://lab.nexedi.com/nexedi/slapos.recipe.build.git\n ... revision = 2566127\n ... \"\"\")\n\nThen let's run the buildout::\n\n >>> print(system(buildout))\n Uninstalling git-clone.\n Running uninstall recipe.\n Installing git-clone.\n Cloning into '/sample-buildout/parts/git-clone'...\n HEAD is now at 2566127 ...\n\nLet's take a look at the buildout parts directory now::\n\n >>> ls(sample_buildout, 'parts')\n d git-clone\n\nAnd let's see that current revision is \"2566127\"::\n\n >>> import subprocess\n >>> cd(sample_buildout, 'parts', 'git-clone')\n >>> print(subprocess.check_output(['git', 'rev-parse', '--short', 'HEAD'], universal_newlines=True))\n 2566127\n\nWhen updating, it shouldn't do anything as revision is mentioned::\n\n >>> cd(sample_buildout)\n >>> print(system(buildout))\n Updating git-clone.\n ...\n\nEmpty revision/branch\n~~~~~~~~~~~~~~~~~~~~~\n\nSpecifying an empty revision or an empty branch will make buildout\nignore those values as if it was not present at all (allowing to easily\nextend an existing section specifying a branch)::\n\n >>> cd(sample_buildout)\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = git-clone\n ...\n ... [git-clone-with-branch]\n ... recipe = slapos.recipe.build:gitclone\n ... repository = https://lab.nexedi.com/nexedi/slapos.recipe.build.git\n ... revision = 2566127\n ...\n ... [git-clone]\n ... <= git-clone-with-branch\n ... revision =\n ... branch = master\n ... \"\"\")\n\n >>> print(system(buildout))\n Uninstalling git-clone.\n Running uninstall recipe.\n Installing git-clone.\n Cloning into '/sample-buildout/parts/git-clone'...\n\n >>> cd(sample_buildout, 'parts', 'git-clone')\n >>> print(system('git branch'))\n * master\n\nRevision/branch priority\n~~~~~~~~~~~~~~~~~~~~~~~~\n\nIf both revision and branch parameters are set, revision parameters is used\nand branch parameter is ignored::\n\n >>> cd(sample_buildout)\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = git-clone\n ...\n ... [git-clone]\n ... recipe = slapos.recipe.build:gitclone\n ... repository = https://lab.nexedi.com/nexedi/slapos.recipe.build.git\n ... branch = mybranch\n ... revision = 2566127\n ... \"\"\")\n\n >>> print(system(buildout))\n Uninstalling git-clone.\n Running uninstall recipe.\n Installing git-clone.\n Warning: \"branch\" parameter with value \"mybranch\" is ignored. Checking out to revision 2566127...\n Cloning into '/sample-buildout/parts/git-clone'...\n HEAD is now at 2566127 ...\n\n >>> cd(sample_buildout, 'parts', 'git-clone')\n >>> print(system('git branch'))\n * master\n\nSetup a \"develop\" repository\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIf you need to setup a repository that will be manually altered over time for\ndevelopment purposes, you need to make sure buildout will NOT alter it and NOT\nerase your local modifications by specifying the \"develop\" flag::\n\n [buildout]\n parts = git-clone\n\n [git-clone]\n recipe = slapos.recipe.build:gitclone\n repository = https://example.net/example.git/\n develop = true\n\n >>> cd(sample_buildout)\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = git-clone\n ...\n ... [git-clone]\n ... recipe = slapos.recipe.build:gitclone\n ... repository = https://lab.nexedi.com/nexedi/slapos.recipe.build.git\n ... develop = true\n ... \"\"\")\n\n >>> print(system(buildout))\n Uninstalling git-clone.\n Running uninstall recipe.\n Installing git-clone.\n Cloning into '/sample-buildout/parts/git-clone'...\n\nBuildout will then keep local modifications, instead of resetting the\nrepository::\n\n >>> cd(sample_buildout, 'parts', 'git-clone')\n >>> print(system('echo foo > setup.py'))\n\n >>> cd(sample_buildout)\n >>> print(system(buildout))\n Updating git-clone.\n ...\n \n\n\n >>> cd(sample_buildout, 'parts', 'git-clone')\n >>> print(system('cat setup.py'))\n foo\n\nThen, when update occurs, nothing is done::\n\n >>> cd(sample_buildout, 'parts', 'git-clone')\n >>> print(system('echo kept > local_change'))\n\n >>> print(system('git remote add broken http://git.erp5.org/repos/nowhere'))\n ...\n\n >>> cd(sample_buildout)\n >>> print(system(buildout))\n Updating git-clone.\n ...\n\n >>> cd(sample_buildout, 'parts', 'git-clone')\n >>> print(system('cat local_change'))\n kept\n\nIn case of uninstall, buildout will keep the repository directory::\n\n >>> cd(sample_buildout)\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = git-clone\n ...\n ... [git-clone]\n ... recipe = slapos.recipe.build:gitclone\n ... repository = https://lab.nexedi.com/nexedi/slapos.recipe.build.git\n ... develop = true\n ... # Triggers uninstall/install because of section signature change\n ... foo = bar\n ... \"\"\")\n\n >>> print(system(buildout))\n Uninstalling git-clone.\n Running uninstall recipe.\n You have uncommited changes in /sample-buildout/parts/git-clone. This folder will be left as is.\n Installing git-clone.\n destination directory already exists.\n ...\n \n\nSpecific git binary\n~~~~~~~~~~~~~~~~~~~\n\nThe default git command is `git`, if for a any reason you don't\nhave git in your path, you can specify git binary path with `git-command`\noption.\n\nIgnore SSL certificate\n~~~~~~~~~~~~~~~~~~~~~~\n\nBy default, when remote server use SSL protocol git checks if the SSL\ncertificate of the remote server is valid before executing commands.\nYou can force git to ignore this check using `ignore-ssl-certificate`\nboolean option::\n\n [buildout]\n parts = git-clone\n\n [git-clone]\n recipe = slapos.recipe.build:gitclone\n repository = https://example.net/example.git/\n ignore-ssl-certificate = true\n\nIgnore cloning submodules\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\nBy default, cloning the repository will clone its submodules also. You can force\ngit to ignore cloning submodules by defining `ignore-cloning-submodules` boolean\noption to 'true'::\n\n [buildout]\n parts = git-clone\n\n [git-clone]\n recipe = slapos.recipe.build:gitclone\n repository = https://lab.nexedi.com/tiwariayush/test_erp5\n ignore-cloning-submodules = true\n\nOther options\n~~~~~~~~~~~~~\n\nshared\n Clone with ``--shared`` option if true. See ``git-clone`` command.\n\nsparse-checkout\n The value of the `sparse-checkout` option is written to the\n ``$GITDIR/info/sparse-checkout`` file, which is used to populate the working\n directory sparsely. See the `SPARSE CHECKOUT` section of ``git-read-tree``\n command. This feature is disabled if the value is empty or unset.\n\nFull example\n~~~~~~~~~~~~\n\n::\n\n [buildout]\n parts = git-clone\n\n [git-binary]\n recipe = hexagonit.recipe.cmmi\n url = http://git-core.googlecode.com/files/git-1.7.12.tar.gz\n\n [git-clone]\n recipe = slapos.recipe.build:gitclone\n repository = http://example.net/example.git/\n git-command = ${git-binary:location}/bin/git\n revision = 0123456789abcdef\n\n\n=========================\n slapos.recipe.build:npm\n=========================\n\nDownloads and installs node.js packages using Node Package Manager (NPM).\n\nExamples\n--------\n\nBasic example\n~~~~~~~~~~~~~\n\nHere is example to install one or several modules::\n\n [buildout]\n parts = node-package\n\n [node-package]\n recipe = slapos.recipe.build:npm\n modules =\n colors\n express\n\n # Optional argument specifying perl buildout part, if existing.\n # If specified, recipe will use the perl installed by buildout.\n # If not specified, will take the globally available perl executable.\n node = node-0.6\n\nSpecific version\n~~~~~~~~~~~~~~~~\n::\n\n [buildout]\n parts = node-package\n\n [node-package]\n recipe = slapos.recipe.build:npm\n modules =\n express@1.0.2\n node = node-0.6\n\n==========================\n slapos.recipe.build:vm.*\n==========================\n\nThis is a set of recipes to build Virtual Machine images and execute commands\ninside them. They rely on QEMU and OpenSSH: executables are found via the PATH\nenvironment variable. They do nothing on update.\n\nCommon options\n--------------\n\nlocation\n Folder where the recipe stores any produced file.\n Default: ${buildout:parts-directory}/\n\nenvironment\n Extra environment for the spawn executables. It can either be the name of a\n section or a list of variables (1 per line, in the form ``key=value``).\n Values are expanded with current environment using Python %-dict formatting.\n\nmem\n Python expression evaluating to an integer that specifies the\n RAM size in MB for the VM.\n\nsmp\n Number of CPUs for the VM. Default: 1\n\nExample\n~~~~~~~\n\n::\n\n [vm-run-environment]\n PATH = ${openssh:location}/bin:${qemu:location}/bin:%(PATH)s\n\n [vm-run-base]\n recipe = slapos.recipe.build:vm.run\n environment = vm-run-environment\n mem = 256 * (${:smp} + 1)\n smp = 4\n\nslapos.recipe.build:vm.install-debian\n-------------------------------------\n\nInstall Debian from an ISO image. Additional required binaries:\n\n- ``7z`` (from 7zip), to extract kernel/initrd from the ISO;\n- ``file``, which is used to test that the VM image is bootable.\n\nCurrently, it only produces `raw` images, in `discard` mode (see ``-drive``\nQEMU option): combined the use of ``discard`` mount option, this minimizes\nthe used space on disk.\n\nOptions\n~~~~~~~\n\nlocation\n Produced files: ``.img`` (1 for each token of `dists`), ``passwd``\n and optionally ``ssh.key``\n\narch\n QEMU architecture (the recipe runs the ``qemu-system-`` executable).\n It is also used to select the ISO in the sections refered by `dists`.\n Default to host architecture.\n\ndists\n List of VMs to build: each token refers to a buildout section name that\n describes the ISOs to use. See `ISO sections`_ below.\n Tokens can't contain `'.'` characters.\n\nsize\n Size of the VM image. This must be an integer, optionally followed by a\n IEC or SI suffix.\n\nmem\n Default: 256\n\n[/]preseed.\n Set the value for the installation. The recipe has many default\n preseed values: you can see the list in the ``InstallDebianRecipe.preseed``\n class attribute (file ``slapos/recipe/vm.py``). Aliases are recognized\n (but the recipe includes a mapping that may be out-of-date.).\n Any value except ``passwd/*`` can optionally be prefixed so that they only\n apply for a particular VM.\n\n[/]debconf.\n List of debconf value for (usually a package name),\n each line with 2 whitespace-separated parts: .\n Like for preseed.* values, they can be specific to .\n\nlate-command\n Shell commands to execute at the end of the installation. They are run\n inside the target system. This is a reliable alternative to the\n ``preseed.preseed/late_command`` option. The ``DIST`` shell variable is\n set to the VM being built.\n\npackages\n Extra packages to install.\n Like for `late-command`, do not use ``preseed.pkgsel/include``.\n If you want to install packages only for some specific , you can do\n it in ``late-command``, by testing ``$DIST`` and using\n ``apt-get install -y``.\n\nvm.run\n Boolean value that is `true` by default, to configure the VM for use with\n the `slapos.recipe.build:vm.run`_ recipe:\n\n - make sure that the `ssh` and `sudo` packages are installed\n - an SSH key is automatically created with ``ssh-keygen``, and it can be\n used to connect as `root`\n\nISO sections\n~~~~~~~~~~~~\n\n.iso\n Name of the section that provides the ISO image, for example by downloading\n it. This section must define 2 options: `location` is the folder\n containing the ISO, and `filename` is the file name of the ISO.\n\n.kernel\n Path to kernel image inside the ISO.\n\n.initrd\n Path to initrd image inside the ISO.\n\nUser setup\n~~~~~~~~~~\n\nBy default, there's no normal user created. Another rule is that a random\npassword is automatically generated if there is no password specified.\n\nYou have nothing to do if you only plan to use the VM with `vm.run`.\n\nFor more information about the ``passwd/*`` preseed values, you can look at\nthe ``user-setup-udeb`` package at\nhttps://anonscm.debian.org/cgit/d-i/user-setup.git/tree/\nand in particular the ``user-setup-ask`` and ``user-setup-apply`` scripts.\n\nExample\n~~~~~~~\n\n::\n\n [vm-install-environment]\n # vm-run-environment refers to the section in common options\n PATH = ${file:location}/bin:${p7zip:location}/bin:${vm-run-environment:PATH}\n\n [vm-debian]\n recipe = slapos.recipe.build:vm.install-debian\n environment = vm-install-environment\n dists = debian-jessie debian-stretch\n size = 2Gi\n late-command =\n # rdnssd causes too much trouble with QEMU 2.7, because the latter acts as\n # a DNS proxy on both IPv4 and IPv6 without translating queries to what the\n # host supports.\n dpkg -P rdnssd\n debconf.debconf =\n debconf/frontend noninteractive\n debconf/priority critical\n # minimal size\n preseed.apt-setup/enable-source-repositories = false\n preseed.recommends = false\n preseed.tasks =\n\n [debian-jessie]\n x86_64.iso = debian-amd64-netinst.iso\n x86_64.kernel = install.amd/vmlinuz\n x86_64.initrd = install.amd/initrd.gz\n\n [debian-stretch]\n <= debian-jessie\n x86_64.iso = debian-amd64-testing-netinst.iso\n\n [debian-amd64-netinst.iso]\n ...\n\nslapos.recipe.build:vm.run\n--------------------------\n\nExecute shell commands inside a VM, in snapshot mode (the VM image is not\nmodified).\n\n``${buildout:directory}`` is always mounted as `/mnt/buildout` inside the VM.\n\nMount points use the 9p file-system. Make sure that:\n\n- QEMU is built with --enable-virtfs;\n- the VM runs a kernel that is recent enough (Debian Squeeze kernel 2.6.32 is\n known to fail, and you'd have to use the one from squeeze-backports).\n\nOptions\n~~~~~~~\n\nlocation\n Folder where to store any produce file. Inside the guest, it is pointed to\n by the PARTDIR environment variable. It is also used as temporary storage\n for changes to the VM image.\n\nvm\n Folder containing the VM images and the `ssh.key`` file. See the `location`\n option of the `vm.install-*` recipes.\n\ndist\n VM image to use inside the `vm` folder.\n\ndrives\n Extra drives. Each line is passed with -drive\n\ncommands\n List of options, each one being a shell script to execute via\n SSH. They are processed in sequence. This is usually only required if you\n want to reboot the VM. Default: command\n\nmount.\n Extra mount point. The value is a host folder that is mounted as\n ``/mnt/``.\n\nstop-ssh\n Tell `reboot` function how to stop SSH (see Helpers_).\n Default: systemctl stop ssh\n\nuser\n Execute commands with this user. The value can be ``root``. By default,\n it is empty and it means that:\n\n - a ``slapos`` user is created with the same uid/gid than the user using\n this recipe on the host, which can help accessing mount points;\n - sudo must be installed and the created user is allowed to become root\n without password.\n\n In any case, SSH connects as root.\n\nwait-ssh\n Time to wait for (re)boot. The recipe fails if it can't connect to the SSH\n server after this number of seconds. Default: 60\n\nHelpers\n~~~~~~~\n\nBefore commands are executed, all `mount.` are mounted\nand a few helpers are set to make scripting easier.\n\nset -e\n This is done before anything else, to make buildout abort if any untested\n command fails.\n\nreboot\n Function to safely reboot the guest. The next command in `commands` will be\n executed once the SSH server is back.\n\nmap \n Function to map a folder inside ``${buildout:directory}``.\n\nPARTDIR\n Folder where to store any produced file. Inside the guest, it actually\n maps to `location` on the host. This is useful because you can't write\n ``PARTDIR=`map ${:location}``` if you don't explicitly set `location`.\n\nExample\n~~~~~~~\n\n::\n\n [vm-run-base]\n # extends above example in common options\n vm = ${vm-debian:location}\n dist = debian-jessie\n\n [vm-debian]\n # extends above example in vm.install-debian\n packages += build-essential devscripts equivs git\n\n [userhosts-repository]\n recipe = slapos.recipe.build:gitclone\n repository = https://lab.nexedi.com/nexedi/userhosts.git\n # we don't need a working directory on the host\n sparse-checkout = /.gitignore\n\n [build-userhosts-map]\n <= vm-run-base\n repository = `map ${userhosts-repository:location}`\n command =\n git clone -s ${:repository} userhosts\n cd userhosts\n mk-build-deps -irs sudo -t 'apt-get -y'\n dpkg-buildpackage -uc -b -jauto\n cd ..\n mv *.changes *.deb $PARTDIR\n\n # Alternate way, which is required if [userhosts-repository] is extended\n # in such way that the repository is outside ${buildout:directory}.\n [build-userhosts-mount]\n <= build-userhosts-map\n mount.userhosts = ${userhosts-repository:location}\n repository = /mnt/userhosts\n\n [test-reboot]\n <= vm-run-base\n commands = hello world\n hello =\n uptime -s\n echo Hello ...\n reboot\n world =\n uptime -s\n echo ... world!\n\n=========\n Changes\n=========\n\n0.42 (2019-10-16)\n-----------------\n\n* vm: use virtio-rng with host's /dev/urandom to fix boot delays with recent OS\n* vm.run: use -cpu host\n* vm.run: new 'drives' option\n\n0.41 (2019-06-19)\n-----------------\n\n* gitclone: add support for submodules, enabled by default.\n\n0.40 (2018-10-29)\n-----------------\n\n* shared: fix signature test under Python 3.\n\n0.39 (2018-10-26)\n-----------------\n\n* More Py3 fixes.\n\n0.38 (2018-09-13)\n-----------------\n\n* download: fix regression in 0.37 breaking support for Python 3\n\n0.37 (2018-08-27)\n-----------------\n\n* Drop slapos.recipe.build:cpan, use ``perl-CPAN-package`` macro instead.\n* downloadunpacked, download: add shared feature.\n\n\n0.36 (2017-06-29)\n-----------------\n\n* Do not depend on slapos.libnetworkcache, which is optional.\n\n0.35 (2017-06-21)\n-----------------\n\n* download: fix default permission of installed files.\n* download: do nothing on update if we're sure that the source hasn't changed.\n\n0.34 (2017-06-05)\n-----------------\n\n* downloadunpacked: make compatible with Python 2.6, now that\n slapos.recipe.cmmi uses it, and we still want to bootstrap\n SlapOS on old OS.\n* downloadunpacked: fix clean up of temporary files\n* gitclone: assume unclean on uninstall when git-executable cannot be found.\n* Add support for Python 3, at least to bootstrap SlapOS from Python 3.\n\n0.33 (2017-04-07)\n-----------------\n\n* download, downloadunpacked: remove downloaded files after unpacking.\n\n0.32 (2017-03-08)\n-----------------\n\n* downloadunpacked: fix an issue in extracting hard links.\n\n0.31 (2017-03-08)\n-----------------\n\n* downloadunpacked: support .xz and .lz archives.\n* downloadunpacked: extract symlinks in a tar archive as symlinks.\n\n0.30 (2017-02-23)\n-----------------\n\n* script option: fix IndentationError with buildout 2, if some lines are indented.\n\n0.28 (2016-11-08)\n-----------------\n\n* vm.run: workaround for old versions of mount\n\n* vm.install-debian:\n\n - No more limit on the number of preseed parameters, by placing a preseed.cfg\n file inside the initrd, instead of passing them all via the command line.\n The kernel is usually limited to 32 parameters and it panics when there are\n too many.\n - Dist-specific options.\n - Recognize preseed aliases.\n - late-command is run with '/bin/sh -e' and it must exit with EX_OK (0),\n otherwise the installer stops.\n\n0.27 (2016-10-30)\n-----------------\n\n* vm: change how commands can be easily run with a normal user account on the guest\n\n0.26 (2016-10-29)\n-----------------\n\n* gitclone: new 'shared' option.\n* vm.install-debian: workaround for spurious \"No network interfaces detected\"\n* vm: use a normal user account by default\n\n0.25 (2016-10-23)\n-----------------\n\n* gitclone: new 'sparse-checkout' option.\n* New vm.* recipes to build VM images and execute commands inside them.\n\n0.24 (2016-10-10)\n-----------------\n\nImprovements to default recipe:\n\n* Remove `location` if `script` fails.\n* If `location` already exists at install, warn instead of failing.\n* `location` can be a file. Similarly, the use of `self.cleanup_dir_list` &\n `self.cleanup_file_list` in `script` is deprecated in favor of\n `self.cleanup_list`.\n\n0.23 (2015-10-22)\n-----------------\n\n* gitclone: We don't have to fetch, if revision is already present in local git repository\n\n0.22 (2015-10-19)\n-----------------\n\n* Support zc.buildout 2.\n\n0.21 (2015-04-10)\n-----------------\n\n* Restore support for build scripts\n\n0.20 (2015-03-06)\n-----------------\n\n* rerelease because \"missing release\" was cached in shacache\n\n0.19 (2015-03-06)\n-----------------\n\n* gitclone: REVERT \"when update(), if repository has local changes, don't do anything but warn user.\"\n With this commit, test nodes would not update the repository if it has local changes (eg. from pyc files)\n\n\n0.18 (2015-02-05)\n-----------------\n\n* gitclone: don't do anything at update() if develop=true.\n* gitclone: develop is false by default.\n* gitclone: don't raise when uninstall if location does not exist.\n* gitclone: when update(), if repository has local changes, don't do anything but warn user.\n\n0.17 (2015-02-02)\n-----------------\n\n* gitclone: keep local changes when there is an error during update\n\n0.16 (2015-01-12)\n-----------------\n\n* gitclone: fix option name for git-executable\n\n0.15 (2014-11-28)\n-----------------\n\n* build: Fixup! Remove downloaded files at the end.\n\n0.14 (2014-10-23)\n-----------------\n\n* build: Remove downloaded files at the end.\n\n0.13 (2014-10-08)\n-----------------\n\n* gitclone: do not delete the working copy if develop is set.\n* gitclone: revision has priority over branch.\n* gitclone: empty parameter equals no parameter.\n\n0.12 (2013-09-05)\n-----------------\n\n* gitclone: Do not upload to cache by default. 'use-cache' option replaces 'forbid-download-cache' and must be explicitely set in order to use cache.\n* gitclone: Do not cache working copy, which just duplicate `.git` folder.\n* gitclone: do not force to use 'master' branch when not specified.\n* gitclone: add git 'ignore-ssl-certificate' option.\n* gitclone: if directory is no longer present, install, never update.\n\n0.11.6 (2013-02-25)\n-------------------\n\n* Cleanup pyc and pyo files when updating git repository\n [Sebastien Robin]\n\n0.11.5 (2012-10-01)\n-------------------\n\n* Use @{upstream} git magic value, allow to fix update bugs.\n [Cedric de Saint Martin]\n\n0.11.4 (2012-09-11)\n-------------------\n\n* libnetworkcache is added back as a dependency. gitclone has no sense without\n it in SlapOS context. [Cedric de Saint Martin]\n\n0.11.3 (2012-09-10)\n-------------------\n\n* Removed explicit dependency of slapos.libnetworkcache. If not present, it\n will gracefully degrade. [Cedric de Saint Martin]\n\n0.11.2 (2012-09-05)\n-------------------\n\n* Add location to Buildout \"options\" dict, so that it is exposed to other\n Buildout parts. [Cedric de Saint Martin]\n\n0.11.1 (2012-09-05)\n-------------------\n\n* Add forbid-download-cache parameter, forbidding to fetch git from cache.\n [Cedric de Saint Martin]\n* Sanitize instance attributes. [Cedric de Saint Martin]\n\n0.11 (2012-09-04)\n-----------------\n\n* Add slapos.recipe.build:gitclone recipe. [Cedric de Saint Martin]\n\n0.10.2 (2012-08-02)\n-------------------\n\n* Update manifest to include readme.rst [Cedric de Saint Martin]\n\n0.10.1 (2012-08-02)\n-------------------\n\n* Minor fix in ReST documentation formatting. [Cedric de Saint Martin]\n\n0.10 (2012-07-02)\n-----------------\n\n* Add ``format = yes|no`` option. [Antoine Catton]\n\n0.9 (2012-06-07)\n----------------\n\n* Revert accidental release about upcoming version of slapos.recipe.build\n\n0.8 (2012-06-07)\n----------------\n\n* Add support for \"path\" argument [Cedric de Saint Martin]\n* Cleanup of download entry point [Vincent Pelletier]\n* Add npm and cpan entry points [Cedric de Saint Martin]\n\n0.7 (2011-11-8)\n---------------\n\n* Generic: Remove directory when needed, and only if it is wanted.\n [Cedric de Saint Martin]\n* Add slapos.recipe.downloadunpacked script [Alain Takoudjou]\n\n0.6 (2011-09-08)\n----------------\n\n* Cmmi: Support more compatibility with other recipes to build, especially\n hexagonit.recipe.cmmi. [\u0141ukasz Nowak]\n* Generic: A lot of small improvements (like supporting values with = in\n environment) [\u0141ukasz Nowak]\n* Generic: Use shlex to parse some options. [Antoine Catton]\n* Generic: Fix patch, it was not working, as not using stdin. [Antoine Catton]\n\n0.5 (2011-09-06)\n----------------\n\n* Download: Expose location too for compatiblity. [\u0141ukasz Nowak]\n\n0.4 (2011-09-06)\n----------------\n\n* Cmmi: Provide more features to control build process. [\u0141ukasz Nowak]\n\n0.3 (2011-09-05)\n----------------\n\n* Provide slapos.recipe.build:download utility. [\u0141ukasz Nowak]\n\n0.2 (2011-09-05)\n----------------\n\n* Bugfix: Support buildout's download cache during downlading. [\u0141ukasz Nowak]\n* Bugfix: Honour correctly passed md5sum to download method. [\u0141ukasz Nowak]\n* Feature: Utility methods pipeCommand and failIfPathExists. [\u0141ukasz Nowak]\n* Bugfix: Rename promisee to promise. [\u0141ukasz Nowak]\n* Feature: Just warn in case of lack of promise. [\u0141ukasz Nowak]\n\n0.1 (2011-08-26)\n----------------\n\n* Add copyTree method to recursively copy [Cedric de Saint Martin]\n* add guessPlatform function to guess architecture in case of\n multi-architecture installation [Cedric de Saint Martin]", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://lab.nexedi.com/nexedi/slapos.recipe.build", "keywords": "slapos recipe", "license": "GPLv3", "maintainer": "", "maintainer_email": "", "name": "slapos.recipe.build", "package_url": "https://pypi.org/project/slapos.recipe.build/", "platform": "", "project_url": "https://pypi.org/project/slapos.recipe.build/", "project_urls": { "Homepage": "https://lab.nexedi.com/nexedi/slapos.recipe.build" }, "release_url": "https://pypi.org/project/slapos.recipe.build/0.42/", "requires_dist": null, "requires_python": "", "summary": "Flexible software building recipe.", "version": "0.42" }, "last_serial": 5985761, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "441069f51867e798b9769545e90deb56", "sha256": "ebb917b15f53c35ba6e60c09b32b48e20639fee8c28bd2a8a3f9616c58b7bfd0" }, "downloads": -1, "filename": "slapos.recipe.build-0.1.tar.gz", "has_sig": false, "md5_digest": "441069f51867e798b9769545e90deb56", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6506, "upload_time": "2011-08-26T17:23:28", "url": "https://files.pythonhosted.org/packages/e0/3e/6a93de3d8eebcf5570140a7dfeae9f839ba63aef0b4b996fe153a24c7585/slapos.recipe.build-0.1.tar.gz" } ], "0.10": [ { "comment_text": "", "digests": { "md5": "46820beb088247bbd426a6be3efe3b93", "sha256": "d5ca3e057c0b14ad451d8303337d966e41cccf5cd5d436234bb22c0f432a36c9" }, "downloads": -1, "filename": "slapos.recipe.build-0.10.tar.gz", "has_sig": false, "md5_digest": "46820beb088247bbd426a6be3efe3b93", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15574, "upload_time": "2012-08-02T10:28:20", "url": "https://files.pythonhosted.org/packages/22/07/af6f25953b95ec31afaea93807714a8107a479e8cf4bd7656e212d95272a/slapos.recipe.build-0.10.tar.gz" } ], "0.10.1": [ { "comment_text": "", "digests": { "md5": "8dfbec7a03b3189f9a52986ee76c1f91", "sha256": "9ec77195e2ba9166566f7354aa4cc8d6cc9da1145b719c1c0f8c207645076723" }, "downloads": -1, "filename": "slapos.recipe.build-0.10.1.tar.gz", "has_sig": false, "md5_digest": "8dfbec7a03b3189f9a52986ee76c1f91", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15049, "upload_time": "2012-08-02T11:03:54", "url": "https://files.pythonhosted.org/packages/9b/7c/92bb7dad221b4cf5c803c32fc67065bdbf73185ac8ad22d977c30113714f/slapos.recipe.build-0.10.1.tar.gz" } ], "0.10.2": [ { "comment_text": "", "digests": { "md5": "c78422865ffa580102384fc061d4cb4b", "sha256": "ff74532b0579d9311777d4a6d97f85f4339e81327a5b8d44cd5230f19c87c13d" }, "downloads": -1, "filename": "slapos.recipe.build-0.10.2.tar.gz", "has_sig": false, "md5_digest": "c78422865ffa580102384fc061d4cb4b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15753, "upload_time": "2012-08-02T14:09:41", "url": "https://files.pythonhosted.org/packages/30/b3/69957bea2e986c8f5cbdd960f5134020a0bb538fdda9c2194fbd5ba02486/slapos.recipe.build-0.10.2.tar.gz" } ], "0.11": [ { "comment_text": "", "digests": { "md5": "6bda67b76a08876e0848454030564f12", "sha256": "6bed979b6cbb2b0df312a6a98089efd8bb996e985f667efaae03a9c43e4432a2" }, "downloads": -1, "filename": "slapos.recipe.build-0.11.tar.gz", "has_sig": false, "md5_digest": "6bda67b76a08876e0848454030564f12", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20021, "upload_time": "2012-09-04T15:15:57", "url": "https://files.pythonhosted.org/packages/8f/7b/da34d80d6c287f9ce7376bd31bcabd24683f3dd50c4f0a24b879646bec48/slapos.recipe.build-0.11.tar.gz" } ], "0.11.1": [ { "comment_text": "", "digests": { "md5": "4dd0b62895cc30ffed56c391358d44d4", "sha256": "bb2b9bd8c3a25bc00711141f577b3bf678deddf94ec83d66de122dad7b527a46" }, "downloads": -1, "filename": "slapos.recipe.build-0.11.1.tar.gz", "has_sig": false, "md5_digest": "4dd0b62895cc30ffed56c391358d44d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20644, "upload_time": "2012-09-05T10:27:08", "url": "https://files.pythonhosted.org/packages/f6/5f/cfefb4d5f12449afb3c8dde03a3c5b30866e476c3ff43afcfa18eb2d23a4/slapos.recipe.build-0.11.1.tar.gz" } ], "0.11.2": [ { "comment_text": "", "digests": { "md5": "b849e91388e550a9b716c4818b6b03ca", "sha256": "07d2d4400fe17298946966f495be543b293131f84a65d13b385dc2bc3dc03862" }, "downloads": -1, "filename": "slapos.recipe.build-0.11.2.tar.gz", "has_sig": false, "md5_digest": "b849e91388e550a9b716c4818b6b03ca", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20688, "upload_time": "2012-09-05T12:19:19", "url": "https://files.pythonhosted.org/packages/52/63/429b0bc88d7b81bba3976f6b666740ef4f106a8ec3b78c70e113d576092a/slapos.recipe.build-0.11.2.tar.gz" } ], "0.11.3": [ { "comment_text": "", "digests": { "md5": "51bc0ed4c559c7d1d6c73e18bfc91dc9", "sha256": "4e1152e900630e8b48a2b557fe7b473339b4d0b36d3e89b3380705f7438a51eb" }, "downloads": -1, "filename": "slapos.recipe.build-0.11.3.tar.gz", "has_sig": false, "md5_digest": "51bc0ed4c559c7d1d6c73e18bfc91dc9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20748, "upload_time": "2012-09-10T16:12:00", "url": "https://files.pythonhosted.org/packages/80/95/9f583b2e34a0aeda5dac6455c1d313319e4f77a4f8b45ec76f1ad163c062/slapos.recipe.build-0.11.3.tar.gz" } ], "0.11.4": [ { "comment_text": "", "digests": { "md5": "28c64e1c6f37993457c1f87a1b344316", "sha256": "bef3d17b523dc2d7da8772aa720c6491d145e578d86a335dcb06e0d55ec391c9" }, "downloads": -1, "filename": "slapos.recipe.build-0.11.4.tar.gz", "has_sig": false, "md5_digest": "28c64e1c6f37993457c1f87a1b344316", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20923, "upload_time": "2012-09-11T12:59:58", "url": "https://files.pythonhosted.org/packages/29/38/666ed1a2a87e346edaf1df46d313b892a7ac60b54c31aa4498878d8e2f6a/slapos.recipe.build-0.11.4.tar.gz" } ], "0.11.5": [ { "comment_text": "", "digests": { "md5": "a64dfba0397a1562726731843d02e271", "sha256": "db43af9981311d8808da8ff7536153b26ea80fffa3ea72364bfc81ca6883211a" }, "downloads": -1, "filename": "slapos.recipe.build-0.11.5.tar.gz", "has_sig": false, "md5_digest": "a64dfba0397a1562726731843d02e271", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21193, "upload_time": "2012-10-01T14:39:01", "url": "https://files.pythonhosted.org/packages/09/4f/402c7607dfa493854e479049059c61f87566938023fea633ac019b957f3d/slapos.recipe.build-0.11.5.tar.gz" } ], "0.11.6": [ { "comment_text": "", "digests": { "md5": "0543f58b8e27fedfe8c447ffa27b4dbc", "sha256": "e332c65284e14464aade2caad3228a2defd5b0464f5dc905b7c2920043c1cb18" }, "downloads": -1, "filename": "slapos.recipe.build-0.11.6.tar.gz", "has_sig": false, "md5_digest": "0543f58b8e27fedfe8c447ffa27b4dbc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16559, "upload_time": "2013-02-25T16:51:46", "url": "https://files.pythonhosted.org/packages/29/d4/46747deaf1ea439aaa0ce1d2b886388dd5dccad6561babaebca93078cda0/slapos.recipe.build-0.11.6.tar.gz" } ], "0.12": [ { "comment_text": "", "digests": { "md5": "bba105c1ff17a35a62984d052b69570c", "sha256": "bd813063343d806352be03a41fb0153277cc4b6e1fc6cd01c58ad432ca91a30c" }, "downloads": -1, "filename": "slapos.recipe.build-0.12.tar.gz", "has_sig": false, "md5_digest": "bba105c1ff17a35a62984d052b69570c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20608, "upload_time": "2013-09-05T13:25:28", "url": "https://files.pythonhosted.org/packages/21/7d/9914c751a55ad5852ad93a5357e74e5da40cfaebcae1f450fd52d3e7b078/slapos.recipe.build-0.12.tar.gz" } ], "0.13": [ { "comment_text": "", "digests": { "md5": "0ed24b769a77ecdc3cf87ed662268bd2", "sha256": "71059aa48cac305024b790d856793884840d43d1873bda1c6042be7fec7fdc45" }, "downloads": -1, "filename": "slapos.recipe.build-0.13.tar.gz", "has_sig": false, "md5_digest": "0ed24b769a77ecdc3cf87ed662268bd2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22602, "upload_time": "2014-10-08T08:30:53", "url": "https://files.pythonhosted.org/packages/43/3e/c7ac575fab5d6724df812cd5165c33c0748cd4ec1becab5c505dd4eb3831/slapos.recipe.build-0.13.tar.gz" } ], "0.14": [ { "comment_text": "", "digests": { "md5": "5cef24d5077d3f2bb23fab4bcaa4c423", "sha256": "9e9436bec6c30444069cbac98a608237fdd3ca55c521985eac46b89384b6e7b3" }, "downloads": -1, "filename": "slapos.recipe.build-0.14.tar.gz", "has_sig": false, "md5_digest": "5cef24d5077d3f2bb23fab4bcaa4c423", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22753, "upload_time": "2014-10-23T08:05:32", "url": "https://files.pythonhosted.org/packages/61/92/bfa39e00819fb6793ccc43202c39b87892139fd1c24a9c2eee23dafbc2bd/slapos.recipe.build-0.14.tar.gz" } ], "0.15": [ { "comment_text": "", "digests": { "md5": "f24feee6ac5ffeeb9079e5e715d26281", "sha256": "da66abee61d09671d4f7b032fc42cd4f9a60bb1a0edc579d82f323cab2bf8302" }, "downloads": -1, "filename": "slapos.recipe.build-0.15.tar.gz", "has_sig": false, "md5_digest": "f24feee6ac5ffeeb9079e5e715d26281", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22789, "upload_time": "2014-11-27T22:31:24", "url": "https://files.pythonhosted.org/packages/08/14/b47bcb158dabc08a83dcd1e383a3418c80e4aefddebe97049eba78d20b57/slapos.recipe.build-0.15.tar.gz" } ], "0.16": [ { "comment_text": "", "digests": { "md5": "2cc41c5a037ddd44da0307d8b70bd08d", "sha256": "dfe94d863527de4d5d92b2ecb03a3c9b7057dbb36c041bc1108e63f23d83b8bc" }, "downloads": -1, "filename": "slapos.recipe.build-0.16.tar.gz", "has_sig": false, "md5_digest": "2cc41c5a037ddd44da0307d8b70bd08d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22634, "upload_time": "2015-01-12T13:50:41", "url": "https://files.pythonhosted.org/packages/49/ad/245d4903680d90023f6ed91439072c3d7be18e83cdeffbc489f9dcc446cd/slapos.recipe.build-0.16.tar.gz" } ], "0.17": [ { "comment_text": "", "digests": { "md5": "6f838421547a1a4a94e126d03d3e189a", "sha256": "58135709993c0e1ddad41e30859b0b279fe3c66603444304ce888d77745239dc" }, "downloads": -1, "filename": "slapos.recipe.build-0.17.tar.gz", "has_sig": false, "md5_digest": "6f838421547a1a4a94e126d03d3e189a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23276, "upload_time": "2015-02-02T14:29:54", "url": "https://files.pythonhosted.org/packages/d1/5d/3c5685eca9ecc5872f1b09811b2c7e9d86ff605492835d7b5d772f8c6ebe/slapos.recipe.build-0.17.tar.gz" } ], "0.18": [ { "comment_text": "", "digests": { "md5": "e4d279f8a21e040542e4eea2cfe4e0ae", "sha256": "6bdbc472b8990b3520a2daa53ba0f33adf38fc6457a653fd7404d563f99fa0c4" }, "downloads": -1, "filename": "slapos.recipe.build-0.18.tar.gz", "has_sig": false, "md5_digest": "e4d279f8a21e040542e4eea2cfe4e0ae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19596, "upload_time": "2015-02-06T15:16:53", "url": "https://files.pythonhosted.org/packages/29/bb/96d55882915f29500d79f273f6c3ef88bdc04d57672fbf4f4b6edbe9495b/slapos.recipe.build-0.18.tar.gz" } ], "0.19": [ { "comment_text": "", "digests": { "md5": "5e444b33c0b0f8318371784c708a5d9e", "sha256": "7270de0ffbbd595a7cee7182ccb55b6698f4c28a23dea5dc4bd6a70942801534" }, "downloads": -1, "filename": "slapos.recipe.build-0.19.tar.gz", "has_sig": false, "md5_digest": "5e444b33c0b0f8318371784c708a5d9e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23455, "upload_time": "2015-03-06T13:20:27", "url": "https://files.pythonhosted.org/packages/e4/62/02725915410ebc46d36689fbca1aa7b6f94d1eb6791235c7000d68329a04/slapos.recipe.build-0.19.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "e66445dd1449ec2a838e33b4747bf158", "sha256": "31e06e2b3b2e7e0db56e255f40b5b9da62033809fcec12498c9915b3809b6ac9" }, "downloads": -1, "filename": "slapos.recipe.build-0.2.tar.gz", "has_sig": false, "md5_digest": "e66445dd1449ec2a838e33b4747bf158", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7123, "upload_time": "2011-09-05T16:20:29", "url": "https://files.pythonhosted.org/packages/77/c7/17c7af3fb5da4cc93d1111cf213585a8fc6c55f2666d0382d061b6cf8cad/slapos.recipe.build-0.2.tar.gz" } ], "0.20": [ { "comment_text": "", "digests": { "md5": "50550000b08195fce093195cef3e5ec3", "sha256": "fbc5a38a7f03fd2c352065eadc1502485ce0c509f110e7289e2a57807a913097" }, "downloads": -1, "filename": "slapos.recipe.build-0.20.tar.gz", "has_sig": false, "md5_digest": "50550000b08195fce093195cef3e5ec3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23529, "upload_time": "2015-03-06T13:31:19", "url": "https://files.pythonhosted.org/packages/28/78/04b981414b3f55fc8023a05b00e48edab12e7d0d2966e8d0fee8225d3168/slapos.recipe.build-0.20.tar.gz" } ], "0.21": [ { "comment_text": "", "digests": { "md5": "8ad5f3f5189278490b51c10756e411ec", "sha256": "6f841a65142c238c7e12a5e7454f9c5bcaaae23c5c43e45d93890b3545b7e5ad" }, "downloads": -1, "filename": "slapos.recipe.build-0.21.tar.gz", "has_sig": false, "md5_digest": "8ad5f3f5189278490b51c10756e411ec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23622, "upload_time": "2015-04-10T04:47:16", "url": "https://files.pythonhosted.org/packages/58/46/4f83adcc8300d5e54650376c0c0b0f7f2980643c3855279265a42ceca89d/slapos.recipe.build-0.21.tar.gz" } ], "0.22": [ { "comment_text": "", "digests": { "md5": "7bb38d2c0ca6649f7c3ced2a59f16dd8", "sha256": "3bb1969661d35cea84c5e2f4cbcd04872c0138d29d0df2390f7013b33884287e" }, "downloads": -1, "filename": "slapos.recipe.build-0.22.tar.gz", "has_sig": false, "md5_digest": "7bb38d2c0ca6649f7c3ced2a59f16dd8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20666, "upload_time": "2015-10-19T15:39:29", "url": "https://files.pythonhosted.org/packages/c0/79/a27b28109b1996014cc051df224f4566330a6a9fd1c0c69d7345ed1153d9/slapos.recipe.build-0.22.tar.gz" } ], "0.23": [ { "comment_text": "", "digests": { "md5": "18cfa03b59a371e62a7d6dc579f8415b", "sha256": "0751e342309970a97de83600aec647de987c4776eb3466e9f5cdf30804e0401d" }, "downloads": -1, "filename": "slapos.recipe.build-0.23.tar.gz", "has_sig": false, "md5_digest": "18cfa03b59a371e62a7d6dc579f8415b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20756, "upload_time": "2015-10-22T11:33:02", "url": "https://files.pythonhosted.org/packages/2c/37/163a22158a1678fa613ab33bcb7a5c27ad714e90c2bed6204af6abe8d6f3/slapos.recipe.build-0.23.tar.gz" } ], "0.24": [ { "comment_text": "", "digests": { "md5": "8bd20337aacdc42990b7fd11237e99bb", "sha256": "5ceb65da72f4e6334ed548f4e070b20e2fd9d836413c94b483b6faf46d4847e8" }, "downloads": -1, "filename": "slapos.recipe.build-0.24.tar.gz", "has_sig": true, "md5_digest": "8bd20337aacdc42990b7fd11237e99bb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24407, "upload_time": "2016-10-11T08:15:02", "url": "https://files.pythonhosted.org/packages/8d/2a/c5538fb9ec1fcc3b704c1b629fe876ae33f61b0e556bc243774953c66559/slapos.recipe.build-0.24.tar.gz" } ], "0.25": [ { "comment_text": "", "digests": { "md5": "9915c0b861c3a95b420ce25a76dc4b0c", "sha256": "f7781d808ae104f74c99b930ffbfd5f4591a943a3d299156756c7e85187b326e" }, "downloads": -1, "filename": "slapos.recipe.build-0.25.tar.gz", "has_sig": true, "md5_digest": "9915c0b861c3a95b420ce25a76dc4b0c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35924, "upload_time": "2016-10-23T16:29:37", "url": "https://files.pythonhosted.org/packages/98/cd/f6107f35e9328a6eb11121df0414bf0c63a0b0ce1c7391915916fc4e6b79/slapos.recipe.build-0.25.tar.gz" } ], "0.26": [ { "comment_text": "", "digests": { "md5": "2f39886ce0e6d380ab18be0a69218530", "sha256": "4006bc5e3e85097c53e884a0cc1f780785c8978a7106dd1d2c74f267eb5b437b" }, "downloads": -1, "filename": "slapos.recipe.build-0.26.tar.gz", "has_sig": true, "md5_digest": "2f39886ce0e6d380ab18be0a69218530", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37551, "upload_time": "2016-10-29T02:23:15", "url": "https://files.pythonhosted.org/packages/27/32/aaa72b3601797e52c8091d5660be97149987a049020f068e759493bddb34/slapos.recipe.build-0.26.tar.gz" } ], "0.27": [ { "comment_text": "", "digests": { "md5": "559fbe8e96b352401f162f88d84e48f8", "sha256": "942fd811b900064d20b14c4b6fb815e5fb91cf029286293d8543c7cd7dd94734" }, "downloads": -1, "filename": "slapos.recipe.build-0.27.tar.gz", "has_sig": true, "md5_digest": "559fbe8e96b352401f162f88d84e48f8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38293, "upload_time": "2016-10-30T01:26:32", "url": "https://files.pythonhosted.org/packages/11/1d/c45c9d50bbfdd2b2fa37079af26e09ae391be8dce2b65dd041bb80d674dd/slapos.recipe.build-0.27.tar.gz" } ], "0.28": [ { "comment_text": "", "digests": { "md5": "66e4f4f9ef43c649c2a17a5ad53c854e", "sha256": "5c0719ee507c1c9051f87772bae64e14132e44ebb24a6c030df4fe4d076f2725" }, "downloads": -1, "filename": "slapos.recipe.build-0.28.tar.gz", "has_sig": true, "md5_digest": "66e4f4f9ef43c649c2a17a5ad53c854e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40756, "upload_time": "2016-11-08T20:27:42", "url": "https://files.pythonhosted.org/packages/bd/d0/140c02fdb3a883aa3aed2df5f63bc2d5f031a02552b9ad968c1416870504/slapos.recipe.build-0.28.tar.gz" } ], "0.29": [ { "comment_text": "", "digests": { "md5": "e120315d43bd22e837dcea549006b638", "sha256": "dcc1273a8143b972ba7450103a43f18e55461693aa79323c5757eed6d99f70d6" }, "downloads": -1, "filename": "slapos.recipe.build-0.29.tar.gz", "has_sig": false, "md5_digest": "e120315d43bd22e837dcea549006b638", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41481, "upload_time": "2017-02-22T15:19:59", "url": "https://files.pythonhosted.org/packages/d4/24/e72fdfc240a0a6063cba815a53c6a84557706a5440bcec7fff244d189759/slapos.recipe.build-0.29.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "824dc369e89db2174cd5584dbc1ac353", "sha256": "c49f0286995dc1fb5cba2df04c2d8cac5890715731b9ccb6838a67ea86c2187f" }, "downloads": -1, "filename": "slapos.recipe.build-0.3.tar.gz", "has_sig": false, "md5_digest": "824dc369e89db2174cd5584dbc1ac353", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7874, "upload_time": "2011-09-05T16:35:31", "url": "https://files.pythonhosted.org/packages/6f/27/69a39f200589802372a196bd61f12672746f7ff8c5872a6bf84c0307959b/slapos.recipe.build-0.3.tar.gz" } ], "0.30": [ { "comment_text": "", "digests": { "md5": "27cfe6e067d03478bd3981ff23d2e882", "sha256": "c4f7ebc5f9899edcca9b0352437f0579d40fc9e9c8682c11b0d05b78512f1b2c" }, "downloads": -1, "filename": "slapos.recipe.build-0.30.tar.gz", "has_sig": false, "md5_digest": "27cfe6e067d03478bd3981ff23d2e882", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41494, "upload_time": "2017-02-23T08:55:55", "url": "https://files.pythonhosted.org/packages/77/6a/4a0ccd99618da4b7a6c5db434092b796fa3323e7dab53cfd830945aff96a/slapos.recipe.build-0.30.tar.gz" } ], "0.31": [ { "comment_text": "", "digests": { "md5": "d45a78d02812f44b507526d3e3c9d951", "sha256": "7f206e7ee334d434da5304890303983f0f8fc130e051521243bfa7dbc0efd4fc" }, "downloads": -1, "filename": "slapos.recipe.build-0.31.tar.gz", "has_sig": false, "md5_digest": "d45a78d02812f44b507526d3e3c9d951", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42584, "upload_time": "2017-03-08T08:53:03", "url": "https://files.pythonhosted.org/packages/19/88/cc74977eae462c5e038a0db1168f3eb87f491fc5d64bc89ee1467a371fb8/slapos.recipe.build-0.31.tar.gz" } ], "0.32": [ { "comment_text": "", "digests": { "md5": "9268ef472c1148008073ef9f4e9fa897", "sha256": "b5cfc262f48552931de718c27534ac16ac6de3c8a82475d1d2c634421458b964" }, "downloads": -1, "filename": "slapos.recipe.build-0.32.tar.gz", "has_sig": false, "md5_digest": "9268ef472c1148008073ef9f4e9fa897", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42709, "upload_time": "2017-03-08T14:16:17", "url": "https://files.pythonhosted.org/packages/07/f7/6244a921cc060e5a1c39671971066874b07f8f6cc60873e2167fc79631c9/slapos.recipe.build-0.32.tar.gz" } ], "0.33": [ { "comment_text": "", "digests": { "md5": "c6c1c559b4d22f8bd29a61488c8e0aa4", "sha256": "1c194cfde17be4c868483cd0175c2bf89828ac3432a2646961c2a396b02ad6b5" }, "downloads": -1, "filename": "slapos.recipe.build-0.33.tar.gz", "has_sig": false, "md5_digest": "c6c1c559b4d22f8bd29a61488c8e0aa4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42858, "upload_time": "2017-04-07T14:25:08", "url": "https://files.pythonhosted.org/packages/fe/bd/399390a2fc21477855e9e4cfefa5ad9fc369aa8794f6b87da318b4f2257b/slapos.recipe.build-0.33.tar.gz" } ], "0.34": [ { "comment_text": "", "digests": { "md5": "231aea5f41f2ad7e133f3076eee70ef1", "sha256": "e8f6e1d47c86242dcb31fc7ec5ebc25fca069848a3b189d32aae0a5f21ec98cc" }, "downloads": -1, "filename": "slapos.recipe.build-0.34.tar.gz", "has_sig": true, "md5_digest": "231aea5f41f2ad7e133f3076eee70ef1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42227, "upload_time": "2017-06-05T19:19:27", "url": "https://files.pythonhosted.org/packages/ea/43/4890b8049961df512d5c676c776c6230171e437b4dfe33f1583c4dc916e1/slapos.recipe.build-0.34.tar.gz" } ], "0.35": [ { "comment_text": "", "digests": { "md5": "8465a5cf4ea49141055fc61ff074091c", "sha256": "f89464e20352117d3f3e6afa9c20302706fb59f9ef0232d8e1ebc686ad6eae6c" }, "downloads": -1, "filename": "slapos.recipe.build-0.35.tar.gz", "has_sig": true, "md5_digest": "8465a5cf4ea49141055fc61ff074091c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42375, "upload_time": "2017-06-21T12:09:44", "url": "https://files.pythonhosted.org/packages/20/36/7eb1fb16a5974b6ff8afaf5094ac89f0129c709a9aae658fc5216c013a0d/slapos.recipe.build-0.35.tar.gz" } ], "0.36": [ { "comment_text": "", "digests": { "md5": "790890aabc7085b256a5dee279499081", "sha256": "8e253a389f972ace0698b4bc65c5428d62577f5425ea0637b48920a94ec74c0c" }, "downloads": -1, "filename": "slapos.recipe.build-0.36.tar.gz", "has_sig": true, "md5_digest": "790890aabc7085b256a5dee279499081", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42393, "upload_time": "2017-06-29T00:32:54", "url": "https://files.pythonhosted.org/packages/a5/85/35a369438afed71cb1248c14255720125d8e407421c77c18d2347c227c14/slapos.recipe.build-0.36.tar.gz" } ], "0.37": [ { "comment_text": "", "digests": { "md5": "6e06db2612b4aa353d9c2c0e810a494a", "sha256": "76c99271449905d475fc49f312c64ebb2f8aaf39e2781080338b3b2908e9bb55" }, "downloads": -1, "filename": "slapos.recipe.build-0.37.tar.gz", "has_sig": false, "md5_digest": "6e06db2612b4aa353d9c2c0e810a494a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45448, "upload_time": "2018-08-27T08:44:59", "url": "https://files.pythonhosted.org/packages/5c/7d/4d84219061467a55b38816d12949167128d3f199f3edd0630b0b6507b77b/slapos.recipe.build-0.37.tar.gz" } ], "0.38": [ { "comment_text": "", "digests": { "md5": "f9b16b85be7e8ed7668748ba999782b5", "sha256": "7a4984fcf68198213523af815a2a130151a774ab22bc07edac3c6d2a698f5ae3" }, "downloads": -1, "filename": "slapos.recipe.build-0.38.tar.gz", "has_sig": true, "md5_digest": "f9b16b85be7e8ed7668748ba999782b5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41494, "upload_time": "2018-09-13T13:08:19", "url": "https://files.pythonhosted.org/packages/ec/02/0b3345837bd96436b926248af46020fe403aacb76a78f3efbf61e21760e0/slapos.recipe.build-0.38.tar.gz" } ], "0.39": [ { "comment_text": "", "digests": { "md5": "da0097ca53c9a1a6f8d220928dad08c9", "sha256": "d9c5f1705a376a54c59cd4ed2cc90f820ea987cad111e1f174c769042d5319fd" }, "downloads": -1, "filename": "slapos.recipe.build-0.39.tar.gz", "has_sig": true, "md5_digest": "da0097ca53c9a1a6f8d220928dad08c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41565, "upload_time": "2018-10-26T10:22:16", "url": "https://files.pythonhosted.org/packages/1d/60/5a55989c13cce6c17b4f493aed191b5a64b614ef4ee9baa16961099e69d9/slapos.recipe.build-0.39.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "f1daedd813fec363aa4a9ec7d5628f7f", "sha256": "1225545fca77fd619c71ab1368eeded59d09228f38ecd5a2935a59e446b0fdda" }, "downloads": -1, "filename": "slapos.recipe.build-0.4.tar.gz", "has_sig": false, "md5_digest": "f1daedd813fec363aa4a9ec7d5628f7f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10284, "upload_time": "2011-09-06T17:27:11", "url": "https://files.pythonhosted.org/packages/98/65/e03f8a291c6bd442e45696ac0cb7b2a3164864ff1f9e391b3e5e9d873748/slapos.recipe.build-0.4.tar.gz" } ], "0.40": [ { "comment_text": "", "digests": { "md5": "06e08afd69573dcdc55b5245c66af290", "sha256": "9986f2c6c2fbe131f5644fdbd082a960f4c71de20aac1e79310590dcf9049001" }, "downloads": -1, "filename": "slapos.recipe.build-0.40.tar.gz", "has_sig": true, "md5_digest": "06e08afd69573dcdc55b5245c66af290", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41645, "upload_time": "2018-10-29T13:55:16", "url": "https://files.pythonhosted.org/packages/64/05/2d060809f3fe34ff419fce9b75293a37a54b85da18a9ba5ffc4400901078/slapos.recipe.build-0.40.tar.gz" } ], "0.41": [ { "comment_text": "", "digests": { "md5": "49587b3dfe5f32e439d2829782336e2b", "sha256": "a600f48122d70361a98b6168b42025c55fba9f726237473dd7012b1898422e53" }, "downloads": -1, "filename": "slapos.recipe.build-0.41.tar.gz", "has_sig": true, "md5_digest": "49587b3dfe5f32e439d2829782336e2b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45578, "upload_time": "2019-06-19T18:10:58", "url": "https://files.pythonhosted.org/packages/13/9e/7f951bae6a0875cf1a4286313cd37e9a693255b179d095588518dc95f459/slapos.recipe.build-0.41.tar.gz" } ], "0.42": [ { "comment_text": "", "digests": { "md5": "7e8d3976b55aa96d3f47b1c5b51bbf94", "sha256": "d0467b8820c30b387ed5f81a708b90a4d4dff01d3bbff4d7dedd996044b316f8" }, "downloads": -1, "filename": "slapos.recipe.build-0.42.tar.gz", "has_sig": true, "md5_digest": "7e8d3976b55aa96d3f47b1c5b51bbf94", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45971, "upload_time": "2019-10-16T18:22:41", "url": "https://files.pythonhosted.org/packages/ce/a9/ba5ac87c2d90829948b4a925e4006325b6623e0590561102c3ab675c0887/slapos.recipe.build-0.42.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "94295157e91974d1edf7d98b93dd184c", "sha256": "0cad36d82ac1fee34f9dd0ad5462430c65c9441e505ad2f4dce33f7d5ab46636" }, "downloads": -1, "filename": "slapos.recipe.build-0.5.tar.gz", "has_sig": false, "md5_digest": "94295157e91974d1edf7d98b93dd184c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10386, "upload_time": "2011-09-06T17:39:29", "url": "https://files.pythonhosted.org/packages/6b/b3/b0c234990414472e716e5068f15a8ce7b21caceae2fba6ba1fc8d7449667/slapos.recipe.build-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "44fe891d38fad954d5ab7cb2e1e85ce3", "sha256": "cb620fb620d19c480403d56c471a6ad2a6b3bc6554e67c5e70c7d56d1008d2d1" }, "downloads": -1, "filename": "slapos.recipe.build-0.6.tar.gz", "has_sig": false, "md5_digest": "44fe891d38fad954d5ab7cb2e1e85ce3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10719, "upload_time": "2011-09-08T15:23:50", "url": "https://files.pythonhosted.org/packages/9f/98/5201fa3fd73b4b90e4b50cacc3cf5c08450615016576ec1f73165217cdac/slapos.recipe.build-0.6.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "c4ad29225abaa9adaa0299931d871f10", "sha256": "8aac4a9c3909e4a65865c6b4130d10365c014a21bec9083d5bccf4bd83811261" }, "downloads": -1, "filename": "slapos.recipe.build-0.7.tar.gz", "has_sig": false, "md5_digest": "c4ad29225abaa9adaa0299931d871f10", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11811, "upload_time": "2011-11-08T10:38:47", "url": "https://files.pythonhosted.org/packages/70/b8/cdba55835251604607d4a91fd291c506d1679531f6ee7f04e040ed964184/slapos.recipe.build-0.7.tar.gz" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "173b965272bd67e91e5d84749f43f319", "sha256": "7584df8b5e1e78b5809047eae45321ec537a9f8b376426f29622566d9b9fa749" }, "downloads": -1, "filename": "slapos.recipe.build-0.8.tar.gz", "has_sig": false, "md5_digest": "173b965272bd67e91e5d84749f43f319", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15058, "upload_time": "2012-06-07T13:26:34", "url": "https://files.pythonhosted.org/packages/ee/65/c04e8e36302ca534a35178bfeeb2bd277f7d678ce3fdbe0ea5acaece272d/slapos.recipe.build-0.8.tar.gz" } ], "0.9": [ { "comment_text": "", "digests": { "md5": "95963710ea59cad05404bedba65b5a25", "sha256": "06c5403bb764a29843a8e579b798d530174aa634a97493a707b3f8688040f514" }, "downloads": -1, "filename": "slapos.recipe.build-0.9.tar.gz", "has_sig": false, "md5_digest": "95963710ea59cad05404bedba65b5a25", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15127, "upload_time": "2012-06-07T15:44:00", "url": "https://files.pythonhosted.org/packages/1d/4b/377acc896c0c651f9a3fb396a35994f2fa56be78c840164bcc46b6bbe685/slapos.recipe.build-0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7e8d3976b55aa96d3f47b1c5b51bbf94", "sha256": "d0467b8820c30b387ed5f81a708b90a4d4dff01d3bbff4d7dedd996044b316f8" }, "downloads": -1, "filename": "slapos.recipe.build-0.42.tar.gz", "has_sig": true, "md5_digest": "7e8d3976b55aa96d3f47b1c5b51bbf94", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45971, "upload_time": "2019-10-16T18:22:41", "url": "https://files.pythonhosted.org/packages/ce/a9/ba5ac87c2d90829948b4a925e4006325b6623e0590561102c3ab675c0887/slapos.recipe.build-0.42.tar.gz" } ] }