On Mon, Oct 16, 2023 at 12:04 PM Bruce Ashfield <[email protected]> wrote: > > On Wed, Oct 4, 2023 at 10:54 AM Joshua Watt <[email protected]> wrote: > > > > umoci treats the --image parameter as <DIRECTORY>:<NAME>, where the OCI > > spec ref.name for the image it set to <NAME>. Therefore, if the > > intention is for the ref.name to be in the format <IMAGE_NAME>:<TAG> (as > > is expected by e.g. `podman load`, then the complete argument that is > > passed to umoci must be `--image <DIRECTORY>:<IMAGE_NAME>:<TAG>` > > This is going to take a few iterations as well, the changing spec > and umoci uses have made this a non-trivial area to modify. > > I assume you are talking about the oci ref.name annotation ?
Correct. If you pass <DIRECTORY>:<IMAGE_NAME>:<TAG> to umoci, ref.name will be <IMAGE_NAME>:<TAG> > > > > > Signed-off-by: Joshua Watt <[email protected]> > > --- > > classes/image-oci-umoci.inc | 52 +++++++++++++++++++------------------ > > 1 file changed, 27 insertions(+), 25 deletions(-) > > > > diff --git a/classes/image-oci-umoci.inc b/classes/image-oci-umoci.inc > > index 58e4668..a58cb4c 100644 > > --- a/classes/image-oci-umoci.inc > > +++ b/classes/image-oci-umoci.inc > > @@ -35,14 +35,16 @@ IMAGE_CMD:oci() { > > fi > > > > if [ -z "${OCI_IMAGE_TAG}" ]; then > > - OCI_IMAGE_TAG="initial-tag" > > - fi > > + image_spec="$image_name:${IMAGE_BASENAME}:initial-tag" > > + else > > + image_spec="$image_name:${IMAGE_BASENAME}:${OCI_IMAGE_TAG}" > > I'm not seeing any examples in the umoci documentation that shows > a "triplet" of values for the image. > > It is always image-path[:image-tag] in what I've read and see in the source. Ya, I've noticed that. I think the reason for that is that ref.name being in the format "NAME:TAG" is a OCI convention that umoci doesn't _actually_ really need to care about. umoci cares about what directory the image is in (image-path) and what the ref.name should be set to (image-tag). Whether image-tag contains a ":" is irrelevant to umoci since it just copies whatever comes after the first ":" into ref.name. Importantly, image-path is never encoded in the JSON anywhere, so it's not equivalent to the container name. > > Are you saying that what is written into th oci spec json file should be > different ? and that encoding what you want in the image-path portion > of the umoci --image parameter makes it pass through correctly ? Ya. I can get containers that have a "nice" ref.name encoded in them by doing: OCI_IMAGE_TAG = "${IMAGE_BASENAME}:latest" Which then sets `ref.name = "${IMAGE_BASENAME}:latest"` and everything is happy with this. My suggestion is that the default behavior should be to encode a nice ref.name like this. Otherwise, tools can (and do) weird things when loading an OCI image. For example, in the current implementation, `podmain load -i <IMAGE>` will import the container _name_ as `latest`, then give it a `latest` tag since none was specified, so you end up with a `podman run localhost/latest:latest` which is just weird (and IMHO, a bad experience). > > Bruce > > > + fi > > > > if [ -n "$new_image" ]; then > > bbdebug 1 "OCI: umoci init --layout $image_name" > > umoci init --layout $image_name > > - umoci new --image $image_name:${OCI_IMAGE_TAG} > > - umoci unpack --rootless --image $image_name:${OCI_IMAGE_TAG} > > $image_bundle_name > > + umoci new --image $image_spec > > + umoci unpack --rootless --image $image_spec $image_bundle_name > > else > > # todo: create a different tag, after checking if the passed one > > exists > > true > > @@ -52,58 +54,58 @@ IMAGE_CMD:oci() { > > bbdebug 1 "OCI: cp -r ${IMAGE_ROOTFS}/* $image_bundle_name/rootfs/" > > cp -r ${IMAGE_ROOTFS}/* $image_bundle_name/rootfs > > > > - bbdebug 1 "OCI: umoci repack --image $image_name:${OCI_IMAGE_TAG} > > $image_bundle_name" > > - umoci repack --image $image_name:${OCI_IMAGE_TAG} $image_bundle_name > > + bbdebug 1 "OCI: umoci repack --image $image_spec $image_bundle_name" > > + umoci repack --image $image_spec $image_bundle_name > > > > bbdebug 1 "OCI: configuring image" > > if [ -n "${OCI_IMAGE_LABELS}" ]; then > > for l in ${OCI_IMAGE_LABELS}; do > > - bbdebug 1 "OCI: umoci config --image > > $image_name:${OCI_IMAGE_TAG} --config.label $l" > > - umoci config --image $image_name:${OCI_IMAGE_TAG} > > --config.label $l > > + bbdebug 1 "OCI: umoci config --image $image_spec --config.label > > $l" > > + umoci config --image $image_spec --config.label $l > > done > > fi > > if [ -n "${OCI_IMAGE_ENV_VARS}" ]; then > > for l in ${OCI_IMAGE_ENV_VARS}; do > > - bbdebug 1 "umoci config --image $image_name:${OCI_IMAGE_TAG} > > --config.env $l" > > - umoci config --image $image_name:${OCI_IMAGE_TAG} --config.env > > $l > > + bbdebug 1 "umoci config --image $image_spec --config.env $l" > > + umoci config --image $image_spec --config.env $l > > done > > fi > > if [ -n "${OCI_IMAGE_PORTS}" ]; then > > for l in ${OCI_IMAGE_PORTS}; do > > - bbdebug 1 "umoci config --image $image_name:${OCI_IMAGE_TAG} > > --config.exposedports $l" > > - umoci config --image $image_name:${OCI_IMAGE_TAG} > > --config.exposedports $l > > + bbdebug 1 "umoci config --image $image_spec > > --config.exposedports $l" > > + umoci config --image $image_spec --config.exposedports $l > > done > > fi > > if [ -n "${OCI_IMAGE_RUNTIME_UID}" ]; then > > - bbdebug 1 "umoci config --image $image_name:${OCI_IMAGE_TAG} > > --config.user ${OCI_IMAGE_RUNTIME_UID}" > > - umoci config --image $image_name:${OCI_IMAGE_TAG} --config.user > > ${OCI_IMAGE_RUNTIME_UID} > > + bbdebug 1 "umoci config --image $image_spec --config.user > > ${OCI_IMAGE_RUNTIME_UID}" > > + umoci config --image $image_spec --config.user > > ${OCI_IMAGE_RUNTIME_UID} > > fi > > if [ -n "${OCI_IMAGE_WORKINGDIR}" ]; then > > - bbdebug 1 "umoci config --image $image_name:${OCI_IMAGE_TAG} > > --config.workingdir ${OCI_IMAGE_WORKINGDIR}" > > - umoci config --image $image_name:${OCI_IMAGE_TAG} > > --config.workingdir ${OCI_IMAGE_WORKINGDIR} > > + bbdebug 1 "umoci config --image $image_spec --config.workingdir > > ${OCI_IMAGE_WORKINGDIR}" > > + umoci config --image $image_spec --config.workingdir > > ${OCI_IMAGE_WORKINGDIR} > > fi > > if [ -n "${OCI_IMAGE_STOPSIGNAL}" ]; then > > - bbdebug 1 "umoci config --image $image_name:${OCI_IMAGE_TAG} > > --config.stopsignal ${OCI_IMAGE_STOPSIGNAL}" > > - umoci config --image $image_name:${OCI_IMAGE_TAG} > > --config.stopsignal ${OCI_IMAGE_STOPSIGNAL} > > + bbdebug 1 "umoci config --image $image_spec --config.stopsignal > > ${OCI_IMAGE_STOPSIGNAL}" > > + umoci config --image $image_spec --config.stopsignal > > ${OCI_IMAGE_STOPSIGNAL} > > fi > > if [ -n "${OCI_IMAGE_OS}" ]; then > > - bbdebug 1 "umoci config --image $image_name:${OCI_IMAGE_TAG} --os > > ${OCI_IMAGE_OS}" > > - umoci config --image $image_name:${OCI_IMAGE_TAG} --os > > ${OCI_IMAGE_OS} > > + bbdebug 1 "umoci config --image $image_spec --os ${OCI_IMAGE_OS}" > > + umoci config --image $image_spec --os ${OCI_IMAGE_OS} > > fi > > > > - bbdebug 1 "umoci config --image $image_name:${OCI_IMAGE_TAG} > > --architecture ${OCI_IMAGE_ARCH}" > > - umoci config --image $image_name:${OCI_IMAGE_TAG} --architecture > > ${OCI_IMAGE_ARCH} > > + bbdebug 1 "umoci config --image $image_spec --architecture > > ${OCI_IMAGE_ARCH}" > > + umoci config --image $image_spec --architecture ${OCI_IMAGE_ARCH} > > # NOTE: umoci doesn't currently expose setting the architecture > > variant, > > # so if you need it use sloci instead > > if [ -n "${OCI_IMAGE_SUBARCH}" ]; then > > bbnote "OCI: image subarch is set to: ${OCI_IMAGE_SUBARCH}, but > > umoci does not" > > bbnote " expose variants. use sloci instead if this is > > important" > > fi > > - umoci config --image $image_name:${OCI_IMAGE_TAG} --config.entrypoint > > ${OCI_IMAGE_ENTRYPOINT} > > + umoci config --image $image_spec --config.entrypoint > > ${OCI_IMAGE_ENTRYPOINT} > > if [ -n "${OCI_IMAGE_ENTRYPOINT_ARGS}" ]; then > > - umoci config --image $image_name:${OCI_IMAGE_TAG} --config.cmd > > "${OCI_IMAGE_ENTRYPOINT_ARGS}" > > + umoci config --image $image_spec --config.cmd > > "${OCI_IMAGE_ENTRYPOINT_ARGS}" > > fi > > - umoci config --image $image_name:${OCI_IMAGE_TAG} --author > > ${OCI_IMAGE_AUTHOR_EMAIL} > > + umoci config --image $image_spec --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 > > -- > > 2.34.1 > > > > > > > > > > > -- > - Thou shalt not follow the NULL pointer, for chaos and madness await > thee at its end > - "Use the force Harry" - Gandalf, Star Trek II
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#8374): https://lists.yoctoproject.org/g/meta-virtualization/message/8374 Mute This Topic: https://lists.yoctoproject.org/mt/101756743/21656 Group Owner: [email protected] Unsubscribe: https://lists.yoctoproject.org/g/meta-virtualization/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
