dpkg: local cache for .deb files

With this patch, /var/cache/apt/archives directory content is preserved.
The directory is actually a bind mount of the
~/.cache/image-create/apt/$DISTRO_NAME directory, much like what we do
for ccache.
You can use DIB_APT_LOCAL_CACHE=0 to disable this behavior.

This trivial change improve performance A LOT (>30%), even if a local
HTTP proxy because:
 - there is no need to copy again and again the same files
 - we avoid network latency

The patch has been tested with Debian and Ubuntu with every elements
from the tripleo-image-elements repository, the final size of the cache
directory is about 700MB per distribution subdirectory.

Change-Id: I4fab499493f734c7c546d4d23b1a98f0e7523a39
This commit is contained in:
Gonéri Le Bouder 2014-05-31 15:50:52 +02:00
parent 343f70cd23
commit eca59b2e97
3 changed files with 29 additions and 4 deletions

View File

@ -7,6 +7,13 @@ can be used by any dpkg based element.
The dpkg specific version of install-packages is also kept here.
If an extra or updated apt key is needed then define DIB\_ADD\_APT\_KEYS with
the path to a folder. Any key files inside will be added to the key ring before
any apt-get commands take place.
### Environment Variables ###
* DIB\_ADD\_APT\_KEYS: If an extra or updated apt key is needed then define
DIB\_ADD\_APT\_KEYS with the path to a folder. Any key files inside will be
added to the key ring before any apt-get commands take place.
* DIB\_APT\_LOCAL\_CACHE: You can use this variable to disable the internal cache
of the /var/cache/apt/archives directory by setting it to 0. The default is to bind
mount the ~/.cache/image-create/apt/$DISTRO_NAME directory in
/var/cache/apt/archives, this to cache the .deb files downloaded during the image
creation.

View File

@ -4,4 +4,6 @@
set -eu
set -o pipefail
apt-get clean
if ! mount | grep /var/cache/apt/archives; then
apt-get clean
fi

View File

@ -0,0 +1,16 @@
#!/bin/bash
set -eu
set -o pipefail
DIB_APT_LOCAL_CACHE=${DIB_APT_LOCAL_CACHE:-1}
if [ $DIB_APT_LOCAL_CACHE = "0" ]; then
exit 0
fi
apt_cache_dir=$HOME/.cache/image-create/apt/$DISTRO_NAME
if [ ! -d $apt_cache_dir ]; then
mkdir -p $apt_cache_dir
fi
sudo mount --bind $apt_cache_dir $TARGET_ROOT/var/cache/apt/archives