Skip to content

Commit 6534989

Browse files
committed
build-recipe-docker: do container introspection if we could not save the packages list
1 parent 0914519 commit 6534989

File tree

1 file changed

+27
-8
lines changed

1 file changed

+27
-8
lines changed

build-recipe-docker

+27-8
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,8 @@ recipe_build_docker() {
189189
test -e "$i" && ln -f "$i" "$BUILD_ROOT/$TOPDIR/SOURCES/repos/build-webcache/${i##*/build-webcache-}"
190190
done
191191

192-
# exclude repos directory
192+
# exclude repos/containers directory
193+
echo containers >> "$BUILD_ROOT/$TOPDIR/SOURCES/.dockerignore"
193194
echo repos >> "$BUILD_ROOT/$TOPDIR/SOURCES/.dockerignore"
194195

195196
# find tags, first look into recipe file
@@ -332,21 +333,39 @@ recipe_build_docker() {
332333
test -s "containers/annotation" && args=("${args[@]}" --annotationfile containers/annotation)
333334
perl -I$BUILD_DIR -MBuild::Docker -e Build::Docker::showcontainerinfo -- "${args[@]}" "$BUILD_ROOT/$TOPDIR/SOURCES/$RECIPEFILE" "$FILENAME.tar" "$ALLTAGS" > "$BUILD_ROOT$TOPDIR/DOCKER/$FILENAME.containerinfo"
334335

335-
# copy over .packages files
336-
for i in basepackages packages ; do
337-
test -f "$BUILD_ROOT/$TOPDIR/SOURCES/repos/UPLOAD/$i" && cp "$BUILD_ROOT/$TOPDIR/SOURCES/repos/UPLOAD/$i" "$BUILD_ROOT$TOPDIR/DOCKER/$FILENAME.$i"
338-
done
339-
if test -e "$BUILD_ROOT/$TOPDIR/SOURCES/repos/.pkgsummaries" ; then
340-
for i in pkgsummaries ; do
336+
if test -f "$BUILD_ROOT/$TOPDIR/SOURCES/repos/UPLOAD/packages" ; then
337+
# copy over .packages files
338+
for i in basepackages packages ; do
341339
test -f "$BUILD_ROOT/$TOPDIR/SOURCES/repos/UPLOAD/$i" && cp "$BUILD_ROOT/$TOPDIR/SOURCES/repos/UPLOAD/$i" "$BUILD_ROOT$TOPDIR/DOCKER/$FILENAME.$i"
342340
done
341+
if test -e "$BUILD_ROOT/$TOPDIR/SOURCES/repos/.pkgsummaries" ; then
342+
for i in pkgsummaries ; do
343+
test -f "$BUILD_ROOT/$TOPDIR/SOURCES/repos/UPLOAD/$i" && cp "$BUILD_ROOT/$TOPDIR/SOURCES/repos/UPLOAD/$i" "$BUILD_ROOT$TOPDIR/DOCKER/$FILENAME.$i"
344+
done
345+
fi
346+
else
347+
# build did not create packages file, try introspection
348+
cp --remove-destination "$BUILD_DIR/create_container_package_list" "$BUILD_ROOT/tmp/create_container_package_list"
349+
echo "creating package information"
350+
chroot "$BUILD_ROOT" /bin/bash /tmp/create_container_package_list "$TOPDIR/DOCKER/$FILENAME.tar" > "$BUILD_ROOT$TOPDIR/DOCKER/$FILENAME.packages"
351+
if test -e "$BUILD_ROOT/$TOPDIR/SOURCES/repos/.pkgsummaries" ; then
352+
echo "creating package summaries information"
353+
chroot "$BUILD_ROOT" /bin/bash /tmp/create_container_package_list --summaries "$TOPDIR/DOCKER/$FILENAME.tar" > "$BUILD_ROOT$TOPDIR/DOCKER/$FILENAME.pkgsummaries"
354+
fi
355+
local basecontainer=$(perl -I$BUILD_DIR -MBuild::Docker -e Build::Docker::show -- "$BUILD_ROOT/$TOPDIR/SOURCES/$RECIPEFILE" basecontainer)
356+
if test -n "$basecontainer" ; then
357+
echo "creating base package information for base container $basecontainer"
358+
$DOCKER_CMD save --output "/tmp/basecontainer.tar" "$basecontainer"
359+
chroot "$BUILD_ROOT" /bin/bash /tmp/create_container_package_list "/tmp/basecontainer.tar" > "$BUILD_ROOT$TOPDIR/DOCKER/$FILENAME.basepackages"
360+
fi
361+
rm -f "$BUILD_ROOT/tmp/create_container_package_list"
343362
fi
344363
rm -rf "$BUILD_ROOT/$TOPDIR/SOURCES/repos/UPLOAD"
345364

346365
# create sbom if requested
347366
for format in $(queryconfig --dist "$BUILD_DIST" --configdir "$CONFIG_DIR" --archpath "$BUILD_ARCH" buildflags+ sbom | sort -u) ; do
348367
echo "Generating $format sbom file"
349-
generate_sbom --format "$format" --container-archive "$TOPDIR/DOCKER/$FILENAME.tar" > "$BUILD_ROOT$TOPDIR/DOCKER/$FILENAME.${format/cyclonedx/cdx}.json" || cleanup_and_exit 1 "generate_sbom failed!"
368+
generate_sbom --format "$format" --container-archive "$BUILD_ROOT/$TOPDIR/DOCKER/$FILENAME.tar" > "$BUILD_ROOT$TOPDIR/DOCKER/$FILENAME.${format/cyclonedx/cdx}.json" || cleanup_and_exit 1 "generate_sbom failed!"
350369
test -s "$BUILD_ROOT$TOPDIR/DOCKER/$FILENAME.${format/cyclonedx/cdx}.json" || rm -f "$BUILD_ROOT$TOPDIR/DOCKER/$FILENAME.${format/cyclonedx/cdx}.json"
351370
done
352371

0 commit comments

Comments
 (0)