Add a pip-cache element.

The element bind mounts a pip cache inside the image build chroot so
that pip downloads can be reused across image builds.  While similar
in purpose to the PyPi element that sets up a mirror, this element
just allows for a reusable download cache and doesn't require anything
to be setup beforehand.

The pip-cache element is not concurrency safe, and that is indicated
in the README for the element.  An upstream bug was file as well:
https://github.com/pypa/pip/issues/1141

Change-Id: Ibd1d4ea17c24923ed939357ada95b781e3179cfd
This commit is contained in:
James Slagle 2013-08-14 14:12:15 -04:00
parent 11df3a45f4
commit 0702ce9843
3 changed files with 28 additions and 0 deletions

View File

@ -0,0 +1,18 @@
# Use a cache for pip
Using a download cache speeds up image builds.
Including this element in an image build causes
$HOME/.cache/image-create/pip to be bind mounted as /tmp/pip inside
the image build chroot. The $PIP_DOWNLOAD_CACHE environment variable
is then defined as /tmp/pip, which causes pip to cache all downloads
to the defined location.
Note that pip and its use of $PIP_DOWNLOAD_CACHE is not concurrency
safe. Running multiple instances of diskimage-builder concurrently
can cause issues. Therefore, it is advised to only have one instance
of diskimage-builder that includes the pip-cache element running at a
time.
The pip concurrency issue is being tracked upstream at
https://github.com/pypa/pip/issues/1141

View File

@ -0,0 +1 @@
export PIP_DOWNLOAD_CACHE=/tmp/pip

View File

@ -0,0 +1,9 @@
#!/bin/bash
set -e
PIP_CACHE_DIR=$HOME/.cache/image-create/pip
mkdir -p $PIP_CACHE_DIR
sudo mkdir -p $TMP_MOUNT_PATH/tmp/pip
sudo mount --bind $PIP_CACHE_DIR $TMP_MOUNT_PATH/tmp/pip