Initial Version
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
This commit is contained in:
parent
e97ca7be11
commit
67d628b22a
2 changed files with 77 additions and 0 deletions
70
BuildSourceImage.sh
Executable file
70
BuildSourceImage.sh
Executable file
|
@ -0,0 +1,70 @@
|
|||
#!/bin/sh
|
||||
# This script requires an OCI IMAGE Name to pull.
|
||||
# The script generates a SOURCE Image based on the OCI Image
|
||||
# Script must be executed on the same OS or newer as the image.
|
||||
IMAGE=$1
|
||||
SRC_RPM_DIR=SRCRPMS
|
||||
SRC_IMAGE=$1-src
|
||||
CONTEXT_DIR=$2
|
||||
EXTRA_SRC_DIR=$3
|
||||
IMAGE_CTR=$(buildah from ${IMAGE})
|
||||
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
|
||||
#
|
||||
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
|
||||
#
|
||||
SRC_RPMS=$(rpm -qa --root ${IMAGE_MNT} --queryformat '%{SOURCERPM}\n' | grep -v '(none)' | sort -u)
|
||||
|
||||
#
|
||||
# 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
|
||||
# and generate a layer in the SRC RPM.
|
||||
#
|
||||
(cd ${SRC_RPM_DIR};
|
||||
set -x
|
||||
for i in ${SRC_RPMS}; do
|
||||
if [ ! -f $i ]; then
|
||||
RPM=$(echo $i | sed 's/.src.rpm$//g')
|
||||
dnf download --release $RELEASE --source $RPM || continue
|
||||
fi
|
||||
cp $i $SRC_MNT/RPMS
|
||||
buildah commit $SRC_CTR $i
|
||||
done
|
||||
)
|
||||
#
|
||||
# If the caller specified a context directory,
|
||||
# add it to the CONTEXT DIR in SRC IMAGE
|
||||
#
|
||||
if [ ! -z "${CONTEXT_DIR}" ]; then
|
||||
cp -R ${CONTEXT_DIR} ${SRC_MNT}/CONTEXT
|
||||
buildah commit $SRC_CTR $1_$(echo $(CONTEXT_DIR) | sed 's|/|_|g')
|
||||
fi
|
||||
|
||||
#
|
||||
# If the caller specified a extra directory,
|
||||
# add it to the CONTEXT DIR in SRC IMAGE
|
||||
#
|
||||
if [ ! -z "${EXTRA_SRC_DIR}" ]; then
|
||||
cp -R ${EXTRA_SRC_DIR} ${SRC_MNT}/EXTRA
|
||||
buildah commit $SRC_CTR $1_$(echo $(EXTRA_SRC_DIR) | sed 's|/|_|g')
|
||||
fi
|
||||
|
||||
#
|
||||
# Commit the SRC_CTR TO a SRC_IMAGE
|
||||
#
|
||||
buildah commit $SRC_CTR $SRC_IMAGE
|
||||
|
||||
# Push SRC_IMAGE to Registry
|
||||
# buildah push $SRC_IMAGE REGISTRY_NAME/$SRC_IMAGE
|
||||
|
||||
# Cleanup and remove containers
|
||||
buildah umount ${SRC_CTR} ${IMAGE_CTR}
|
||||
buildah rm ${SRC_CTR} ${IMAGE_CTR}
|
|
@ -1,2 +1,9 @@
|
|||
# BuildSourceImage
|
||||
Tool to build a source image based on an existing OCI image
|
||||
|
||||
|
||||
This script uses BUILDAH to build source code container images based on
|
||||
existing OCI images.
|
||||
|
||||
The goal is to make retrieving the source code used to make a container image
|
||||
easier for users to obtain, using the standard OCI protocols and image formats.
|
||||
|
|
Loading…
Reference in a new issue