From 443305ab61655c93ed222ef23d7d0a342bffc6c9 Mon Sep 17 00:00:00 2001 From: Marco Vaschetto Date: Wed, 10 Nov 2021 23:09:21 +0100 Subject: [PATCH] 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 --- diskimage_builder/elements/ubuntu/README.rst | 5 +++ .../99-cloud-init-datasources.bash | 1 + .../ubuntu/root.d/10-cache-ubuntu-tarball | 40 +++++++++---------- 3 files changed, 26 insertions(+), 20 deletions(-) diff --git a/diskimage_builder/elements/ubuntu/README.rst b/diskimage_builder/elements/ubuntu/README.rst index ad8af102..cf2aa5b4 100644 --- a/diskimage_builder/elements/ubuntu/README.rst +++ b/diskimage_builder/elements/ubuntu/README.rst @@ -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:: diff --git a/diskimage_builder/elements/ubuntu/environment.d/99-cloud-init-datasources.bash b/diskimage_builder/elements/ubuntu/environment.d/99-cloud-init-datasources.bash index bd25409f..dd073abc 100644 --- a/diskimage_builder/elements/ubuntu/environment.d/99-cloud-init-datasources.bash +++ b/diskimage_builder/elements/ubuntu/environment.d/99-cloud-init-datasources.bash @@ -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:-""} diff --git a/diskimage_builder/elements/ubuntu/root.d/10-cache-ubuntu-tarball b/diskimage_builder/elements/ubuntu/root.d/10-cache-ubuntu-tarball index 4f7ba3ea..740dc7bc 100755 --- a/diskimage_builder/elements/ubuntu/root.d/10-cache-ubuntu-tarball +++ b/diskimage_builder/elements/ubuntu/root.d/10-cache-ubuntu-tarball @@ -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,36 +25,36 @@ 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_OFFLINE" -a -f "$CACHED_FILE" ] ; then - echo "Not checking freshness of cached $CACHED_FILE." + 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 - echo "Fetching Base Image" - $TMP_HOOKS_PATH/bin/cache-url $SHA256SUMS $CACHED_SUMS - $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 [ -n "$DIB_OFFLINE" -a -f "$CACHED_FILE" ] ; then + echo "Not checking freshness of cached $CACHED_FILE." + else + echo "Fetching Base Image" + $TMP_HOOKS_PATH/bin/cache-url $SHA256SUMS $CACHED_SUMS + $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 $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 }