diff --git a/classes/image-oci-sloci-image.inc b/classes/image-oci-sloci-image.inc index 379f6fe0..9248489f 100644 --- a/classes/image-oci-sloci-image.inc +++ b/classes/image-oci-sloci-image.inc @@ -65,10 +65,25 @@ IMAGE_CMD:oci() { ${oci_image_port_options} \ ${IMAGE_ROOTFS} ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}-oci:${OCI_IMAGE_TAG} + if [ -n "${OCI_IMAGE_TAR_OUTPUT}" ]; then + # if tar is specified, sloci-image is removing the directory that we need for a secondary + # tar format, so we need to restore it. + tar xf ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}-oci-${OCI_IMAGE_TAG}-${OCI_IMAGE_ARCH}-linux.oci-image.tar + fi + # create a convenience symlink ln -sf ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}-oci ${IMAGE_BASENAME}-${OCI_IMAGE_TAG}-oci if [ -n "${OCI_IMAGE_TAR_OUTPUT}" ]; then - ln -sf ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}-oci-${OCI_IMAGE_TAG}-${OCI_IMAGE_ARCH}-linux.oci-image.tar ${IMAGE_BASENAME}-${OCI_IMAGE_TAG}-oci.tar + # move the sloci output to a naming convention that matches what we do with umoci, thie + # default creates a subdirectory, so it get the "-dir" in the name + mv ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}-oci-${OCI_IMAGE_TAG}-${OCI_IMAGE_ARCH}-linux.oci-image.tar ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}-oci-${OCI_IMAGE_TAG}-${OCI_IMAGE_ARCH}-linux.oci-dir.tar + ln -sf ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}-oci-${OCI_IMAGE_TAG}-${OCI_IMAGE_ARCH}-linux.oci-dir.tar ${IMAGE_BASENAME}-${OCI_IMAGE_TAG}-oci-dir.tar + + ( + cd "${IMAGE_NAME}${IMAGE_NAME_SUFFIX}-oci" + tar -cf ../"${IMAGE_NAME}${IMAGE_NAME_SUFFIX}-oci-${OCI_IMAGE_TAG}-${OCI_IMAGE_ARCH}-linux.oci-image.tar" "." + ) + ln -sf "${IMAGE_NAME}${IMAGE_NAME_SUFFIX}-oci-${OCI_IMAGE_TAG}-${OCI_IMAGE_ARCH}-linux.oci-image.tar" ${IMAGE_BASENAME}-${OCI_IMAGE_TAG}-oci.tar fi } 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 }