Allowing ubuntu element use local image

Patch allow to set path for local image source,
instead download latest or use the cached image.
This permit to build image also in environment without internet access.

re-propose of patch: https://review.opendev.org/c/openstack/diskimage-builder/+/809009

Change-Id: I54395b09af339caee040326b809e8fbf8b0e7d6a
This commit is contained in:
Marco Vaschetto 2021-11-10 23:09:21 +01:00
parent 85e20d9852
commit 443305ab61
3 changed files with 26 additions and 20 deletions

View File

@ -21,5 +21,10 @@ Overrides:
``(universe|multiverse)``
* Setting ``DIB_DISTRIBUTION_MIRROR_UBUNTU_INSECURE`` updates apt
settings to allow insecure/unuthenticated repositories.
* Setting ``DIB_OFFLINE`` will prevent to download again the source image
if is already present in to $DIB_IMAGE_CACHE path.
* Setting ``DIB_LOCAL_IMAGE`` to use a image from a local source (full path and file name)
and not download image from internet. Local source for release Trusty
have to be tar.gz format. For other more recent release get the squashfs image.
.. element_deps::

View File

@ -2,3 +2,4 @@
# allowing the Ec2 data source from being queried on first boot, unless
# specified otherwise.
export DIB_CLOUD_INIT_DATASOURCES=${DIB_CLOUD_INIT_DATASOURCES:-"Ec2"}
export DIB_LOCAL_IMAGE=${DIB_LOCAL_IMAGE:-""}

View File

@ -14,7 +14,7 @@ shopt -s extglob
DIB_RELEASE=${DIB_RELEASE:-trusty}
DIB_CLOUD_IMAGES=${DIB_CLOUD_IMAGES:-http://cloud-images.ubuntu.com/$DIB_RELEASE/current}
if [ $DIB_RELEASE != "trusty" ] && [ $DIB_RELEASE != "xenial" ]; then
if [ $DIB_RELEASE != "trusty" ] ; then
BASE_IMAGE_FILE=${BASE_IMAGE_FILE:-$DIB_RELEASE-server-cloudimg-$ARCH.squashfs}
else
BASE_IMAGE_FILE=${BASE_IMAGE_FILE:-$DIB_RELEASE-server-cloudimg-$ARCH-root.tar.gz}
@ -25,6 +25,14 @@ CACHED_FILE_LOCK=$DIB_LOCKFILES/$BASE_IMAGE_FILE.lock
CACHED_SUMS=$DIB_IMAGE_CACHE/SHA256SUMS.ubuntu.$DIB_RELEASE.$ARCH
function get_ubuntu_tarball() {
if [ -n "$DIB_LOCAL_IMAGE" ] ; then
echo "Using local image without download"
if [ ! -f "$DIB_LOCAL_IMAGE" ] ; then
echo "Unable to find image $DIB_LOCAL_IMAGE locally! Check path and file name to source image"
exit 1
fi
IMAGE_PATH=$DIB_LOCAL_IMAGE
else
if [ -n "$DIB_OFFLINE" -a -f "$CACHED_FILE" ] ; then
echo "Not checking freshness of cached $CACHED_FILE."
else
@ -33,28 +41,20 @@ function get_ubuntu_tarball() {
$TMP_HOOKS_PATH/bin/cache-url \
$DIB_CLOUD_IMAGES/$BASE_IMAGE_FILE $CACHED_FILE
pushd $DIB_IMAGE_CACHE
if ! grep "$BASE_IMAGE_FILE" $CACHED_SUMS | sha256sum --check - ; then
# It is likely that an upstream http(s) proxy has given us a skewed
# result - either a cached SHA file or a cached image. Use cache-busting
# to get (as long as caches are compliant...) fresh files.
# Try the sha256sum first, just in case that is the stale one (avoiding
# downloading the larger image), and then if the sums still fail retry
# the image.
$TMP_HOOKS_PATH/bin/cache-url -f $SHA256SUMS $CACHED_SUMS
if ! grep "$BASE_IMAGE_FILE" $CACHED_SUMS | sha256sum --check - ; then
$TMP_HOOKS_PATH/bin/cache-url -f \
$DIB_CLOUD_IMAGES/$BASE_IMAGE_FILE $CACHED_FILE
grep "$BASE_IMAGE_FILE" $CACHED_SUMS | sha256sum --check -
fi
fi
popd
IMAGE_PATH=$DIB_IMAGE_CACHE/$BASE_IMAGE_FILE
fi
# Extract the base image (use --numeric-owner to avoid UID/GID mismatch between
# image tarball and host OS e.g. when building Ubuntu image on an openSUSE host)
if [ $DIB_RELEASE != "trusty" ] && [ $DIB_RELEASE != "xenial" ]; then
sudo unsquashfs -f -d $TARGET_ROOT $DIB_IMAGE_CACHE/$BASE_IMAGE_FILE
if [ "$DIB_RELEASE" != "trusty" ] ; then
sudo unsquashfs -f -d $TARGET_ROOT $IMAGE_PATH
else
sudo tar -C $TARGET_ROOT --numeric-owner -xzf $DIB_IMAGE_CACHE/$BASE_IMAGE_FILE
sudo tar -C $TARGET_ROOT --numeric-owner -xzf $IMAGE_PATH
fi
}