diff options
Diffstat (limited to 'classes/image-oci.bbclass')
-rw-r--r-- | classes/image-oci.bbclass | 89 |
1 files changed, 20 insertions, 69 deletions
diff --git a/classes/image-oci.bbclass b/classes/image-oci.bbclass index c256b12c..0ec5c487 100644 --- a/classes/image-oci.bbclass +++ b/classes/image-oci.bbclass @@ -16,19 +16,32 @@ # And then create the bundle: # % oci-image-tool create --ref name=latest container-base-<arch>-<stamp>.rootfs-oci container-base-oci-bundle # +# Alternatively, the bundle can be created with umoci (use --rootless if sudo is not available) +# % sudo umoci unpack --image container-base-<arch>-<stamp>.rootfs-oci:latest container-base-oci-bundle +# # Or to copy (push) the oci image to a docker registry, skopeo can be used (vary the # tag based on the created oci image: # # % skopeo copy --dest-creds <username>:<password> oci:container-base-<arch>-<stamp>:latest docker://zeddii/container-base # +# If your build host architecture matches the target, you can execute the unbundled +# container with runc: +# +# % sudo runc run -b container-base-oci-bundle ctr-build +# / % uname -a +# Linux mrsdalloway 4.18.0-25-generic #26-Ubuntu SMP Mon Jun 24 09:32:08 UTC 2019 x86_64 GNU/Linux +# # We'd probably get this through the container image typdep, but just # to be sure, we'll repeat it here. ROOTFS_BOOTSTRAP_INSTALL = "" # we want container and tar.bz2's to be created -IMAGE_TYPEDEP_oci = "container tar.bz2" +IMAGE_TYPEDEP:oci = "container tar.bz2" + # sloci is the script/project that will create the oci image -do_image_oci[depends] += "sloci-image-native:do_populate_sysroot" +# OCI_IMAGE_BACKEND ?= "sloci-image" +OCI_IMAGE_BACKEND ?= "umoci" +do_image_oci[depends] += "${OCI_IMAGE_BACKEND}-native:do_populate_sysroot" # # image type configuration block @@ -39,12 +52,13 @@ OCI_IMAGE_AUTHOR_EMAIL ?= "${PATCH_GIT_USER_EMAIL}" OCI_IMAGE_TAG ?= "latest" OCI_IMAGE_RUNTIME_UID ?= "" -OCI_IMAGE_ARCH ?= "${TARGET_ARCH}" +OCI_IMAGE_ARCH ?= "${@oe.go.map_arch(d.getVar('TARGET_ARCH'))}" OCI_IMAGE_SUBARCH ?= "${@oci_map_subarch(d.getVar('TARGET_ARCH'), d.getVar('TUNE_FEATURES'), d)}" OCI_IMAGE_ENTRYPOINT ?= "sh" OCI_IMAGE_ENTRYPOINT_ARGS ?= "" OCI_IMAGE_WORKINGDIR ?= "" +OCI_IMAGE_STOPSIGNAL ?= "" # List of ports to expose from a container running this image: # PORT[/PROT] @@ -75,70 +89,7 @@ def oci_map_subarch(a, f, d): return '' return '' -IMAGE_CMD_oci() { - sloci_options="" - - bbdebug 1 "OCI image settings:" - bbdebug 1 " author: ${OCI_IMAGE_AUTHOR}" - bbdebug 1 " author email: ${OCI_IMAGE_AUTHOR_EMAIL}" - bbdebug 1 " tag: ${OCI_IMAGE_TAG}" - bbdebug 1 " arch: ${OCI_IMAGE_ARCH}" - bbdebug 1 " subarch: ${OCI_IMAGE_SUBARCH}" - bbdebug 1 " entrypoint: ${OCI_IMAGE_ENTRYPOINT}" - bbdebug 1 " entrypoing args: ${OCI_IMAGE_ENTRYPOINT_ARGS}" - bbdebug 1 " labels: ${OCI_IMAGE_LABELS}" - bbdebug 1 " uid: ${OCI_IMAGE_RUNTIME_UID}" - bbdebug 1 " working dir: ${OCI_IMAGE_WORKINGDIR}" - bbdebug 1 " env vars: ${OCI_IMAGE_ENV_VARS}" - bbdebug 1 " ports: ${OCI_IMAGE_PORTS}" - - # Change into the image deploy dir to avoid having any output operations capture - # long directories or the location. - cd ${IMGDEPLOYDIR} - - oci_image_label_options="" - if [ -n "${OCI_IMAGE_LABELS}" ]; then - for l in ${OCI_IMAGE_LABELS}; do - oci_image_label_options="${oci_image_label_options} --label ${l}" - done - fi - oci_image_env_options="" - if [ -n "${OCI_IMAGE_ENV_VARS}" ]; then - for l in ${OCI_IMAGE_ENV_VARS}; do - oci_image_env_options="${oci_image_env_options} --env ${l}" - done - fi - oci_image_port_options="" - if [ -n "${OCI_IMAGE_PORTS}" ]; then - for l in ${OCI_IMAGE_PORTS}; do - oci_image_port_options="${oci_image_port_options} --port ${l}" - done - fi - - if [ -n "${OCI_IMAGE_RUNTIME_UID}" ]; then - oci_image_user_options="--user ${OCI_IMAGE_RUNTIME_UID}" - fi - - if [ -n "${OCI_IMAGE_WORKINGDIR}" ]; then - oci_image_working_dir_options="--working-dir ${OCI_IMAGE_WORKINGDIR}" - fi - - if [ -n "${OCI_IMAGE_TAR_OUTPUT}" ]; then - sloci_options="$sloci_options --tar" - fi +# the IMAGE_CMD:oci comes from the .inc +OCI_IMAGE_BACKEND_INC ?= "${@"image-oci-" + "${OCI_IMAGE_BACKEND}" + ".inc"}" +include ${OCI_IMAGE_BACKEND_INC} - # options that always appear are required for a valid oci container image - # others are optional based on settings. - sloci-image $sloci_options \ - --arch ${OCI_IMAGE_ARCH} \ - --arch-variant "${OCI_IMAGE_SUBARCH}" \ - --entrypoint ${OCI_IMAGE_ENTRYPOINT} \ - --cmd "${OCI_IMAGE_ENTRYPOINT_ARGS}" \ - --author ${OCI_IMAGE_AUTHOR_EMAIL} \ - ${oci_image_user_options} \ - ${oci_image_label_options} \ - ${oci_image_env_options} \ - ${oci_image_working_dir_options} \ - ${oci_image_port_options} \ - ${IMAGE_ROOTFS} ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}-oci:${OCI_IMAGE_TAG} -} |