From 16c89216dc24021f574e7740b9f8a6e4ed112b9c Mon Sep 17 00:00:00 2001 From: Bruce Ashfield Date: Fri, 9 Dec 2022 18:21:01 -0500 Subject: oci-image: create two different tar outputs The original tar output of the oci image followed the sloci-image convention of putting the oci contents into a subdirectory in the tarball. This allows it to work directly with skopeo, etc, but it isn't the format that tools like podman expect in an oci-image tarball. We move the original format to have "-dir" in the name, and let the more simply named one be the oci-image format as expcted by various 3rd party tools 1) image_name.tar: compatible with oci tar format, blobs and rootfs are at the top level. Can load directly from something like podman 2) image_name-dir.tar: original format from meta-virt, is just a tar'd up oci image directory (compatible with skopeo :dir format) We also fix a bug in the sloci-image backend, where the sloci tar was removing the raw oci image directory leaving a dangling symlink. Signed-off-by: Bruce Ashfield --- classes/image-oci-umoci.inc | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'classes/image-oci-umoci.inc') diff --git a/classes/image-oci-umoci.inc b/classes/image-oci-umoci.inc index 38917d4f..58e46681 100644 --- a/classes/image-oci-umoci.inc +++ b/classes/image-oci-umoci.inc @@ -106,14 +106,25 @@ IMAGE_CMD:oci() { umoci config --image $image_name:${OCI_IMAGE_TAG} --author ${OCI_IMAGE_AUTHOR_EMAIL} # make a tar version of the image direcotry + # 1) image_name.tar: compatible with oci tar format, blobs and rootfs + # are at the top level. Can load directly from something like podman + # 2) image_name-dir.tar: original format from meta-virt, is just a tar'd + # up oci image directory (compatible with skopeo :dir format) if [ -n "${OCI_IMAGE_TAR_OUTPUT}" ]; then - tar -cf "$image_name.tar" "$image_name" + ( + cd "$image_name" + tar -cf ../"$image_name.tar" "." + ) + tar -cf "$image_name-dir.tar" "$image_name" + # create a convenience symlink ln -sf "$image_name.tar" "${IMAGE_BASENAME}-${OCI_IMAGE_TAG}-oci.tar" + ln -sf "$image_name-dir.tar" "${IMAGE_BASENAME}-${OCI_IMAGE_TAG}-oci-dir.tar" fi # We could make this optional, since the bundle is directly runnable via runc rm -rf $image_bundle_name + # This is the OCI image directory, which is technically the "image" as specified ln -sf $image_name ${IMAGE_BASENAME}-${OCI_IMAGE_TAG}-oci } -- cgit v1.2.3-54-g00ecf