Fixes to make the images sharable

Changing the time on all SRC RPMS to EPOCH So the images will always have
the same date on them.  This prevents us from getting variance and allows the
blobs to be shared.

Also now commit each layer and start a new container based on the previous

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
This commit is contained in:
Daniel J Walsh 2019-07-15 15:07:51 -04:00
parent 239362b8d0
commit 740a3b60fa
No known key found for this signature in database
GPG key ID: A2DF901DABE2C028

View file

@ -1,4 +1,5 @@
#!/bin/sh #!/bin/sh
# This script requires an OCI IMAGE Name to pull. # This script requires an OCI IMAGE Name to pull.
# The script generates a SOURCE Image based on the OCI Image # The script generates a SOURCE Image based on the OCI Image
# Script must be executed on the same OS or newer as the image. # Script must be executed on the same OS or newer as the image.
@ -9,43 +10,43 @@ CONTEXT_DIR=$2
EXTRA_SRC_DIR=$3 EXTRA_SRC_DIR=$3
IMAGE_CTR=$(buildah from ${IMAGE}) IMAGE_CTR=$(buildah from ${IMAGE})
IMAGE_MNT=$(buildah mount ${IMAGE_CTR}) IMAGE_MNT=$(buildah mount ${IMAGE_CTR})
SRC_CTR=$(buildah from scratch)
SRC_MNT=$(buildah mount ${SRC_CTR})
# #
# From the executable image, get the RELEASEVER of the image # From the executable image, get the RELEASEVER of the image
# #
RELEASE=$(rpm -q --queryformat "%{VERSION}\n" --root $IMAGE_MNT -f /etc/os-release) RELEASE=$(rpm -q --queryformat "%{VERSION}\n" --root $IMAGE_MNT -f /etc/os-release)
# #
# From the executable image, list the SRC RPMS used to build the image # From the executable image, list the SRC RPMS used to build the image
# #
SRC_RPMS=$(rpm -qa --root ${IMAGE_MNT} --queryformat '%{SOURCERPM}\n' | grep -v '^gpg-pubkey' | sort -u) SRC_RPMS=$(rpm -qa --root ${IMAGE_MNT} --queryformat '%{SOURCERPM}\n' | grep -v '^gpg-pubkey' | sort -u)
buildah umount ${IMAGE_CTR}
buildah rm ${IMAGE_CTR}
#
# Create directory in source container image for RPMS
#
mkdir -p ${SRC_RPM_DIR} ${SRC_MNT}/RPMS
# #
# For each SRC_RPMS used to build the executable image, download the SRC RPM # For each SRC_RPMS used to build the executable image, download the SRC RPM
# and generate a layer in the SRC RPM. # and generate a layer in the SRC RPM.
# #
(cd ${SRC_RPM_DIR}; pushd ${SRC_RPM_DIR}
set -x export SRC_CTR=$(buildah from scratch)
for i in ${SRC_RPMS}; do for i in ${SRC_RPMS}; do
if [ ! -f $i ]; then if [ ! -f $i ]; then
RPM=$(echo $i | sed 's/.src.rpm$//g') RPM=$(echo $i | sed 's/.src.rpm$//g')
dnf download --release $RELEASE --source $RPM || continue dnf download --release $RELEASE --source $RPM || continue
fi fi
cp $i $SRC_MNT/RPMS echo "Adding $i"
buildah commit $SRC_CTR $i touch --date='@0' $i
buildah add --add-history ${SRC_CTR} $i /RPMS
export IMG=$(buildah commit --rm ${SRC_CTR} $i)
export SRC_CTR=$(buildah from ${IMG})
done done
) popd
# #
# If the caller specified a context directory, # If the caller specified a context directory,
# add it to the CONTEXT DIR in SRC IMAGE # add it to the CONTEXT DIR in SRC IMAGE
# #
if [ ! -z "${CONTEXT_DIR}" ]; then if [ ! -z "${CONTEXT_DIR}" ]; then
cp -R ${CONTEXT_DIR} ${SRC_MNT}/CONTEXT buildah add --add-history ${SRC_CTR} ${CONTEXT_DIR} /CONTEXT
buildah commit $SRC_CTR $1_$(echo $(CONTEXT_DIR) | sed 's|/|_|g') export IMG=$(buildah commit --rm $SRC_CTR $1_$(echo $(CONTEXT_DIR) | sed 's|/|_|g'))
export SRC_CTR=$(buildah from ${IMG})
fi fi
# #
@ -53,18 +54,18 @@ fi
# add it to the CONTEXT DIR in SRC IMAGE # add it to the CONTEXT DIR in SRC IMAGE
# #
if [ ! -z "${EXTRA_SRC_DIR}" ]; then if [ ! -z "${EXTRA_SRC_DIR}" ]; then
cp -R ${EXTRA_SRC_DIR} ${SRC_MNT}/EXTRA buildah add --add-history ${SRC_CTR} ${EXTRA_SRC_DIR} /EXTRA
buildah commit $SRC_CTR $1_$(echo $(EXTRA_SRC_DIR) | sed 's|/|_|g') export IMG=$(buildah commit --rm $EXTRA_SRC_CTR $1_$(echo $(CONTEXT_DIR) | sed 's|/|_|g'))
export SRC_CTR=$(buildah from ${IMG})
fi fi
# Cleanup and remove source container
buildah rm ${SRC_CTR}
# #
# Commit the SRC_CTR TO a SRC_IMAGE # Commit the SRC_CTR TO a SRC_IMAGE
# #
buildah commit $SRC_CTR $SRC_IMAGE buildah tag $IMG $SRC_IMAGE
# Push SRC_IMAGE to Registry # Push SRC_IMAGE to Registry
# buildah push $SRC_IMAGE REGISTRY_NAME/$SRC_IMAGE # buildah push $SRC_IMAGE REGISTRY_NAME/$SRC_IMAGE
# Cleanup and remove containers
buildah umount ${SRC_CTR} ${IMAGE_CTR}
buildah rm ${SRC_CTR} ${IMAGE_CTR}