################################################################################ # # Build the oci image # ################################################################################ ROOTFS_OCI_DEPENDENCIES = host-sloci-image # architecture - take it from Go OCI_SLOCI_IMAGE_OPTS = --arch $(GO_GOARCH) # architecture variant (typically used only for arm) OCI_SLOCI_IMAGE_OPTS += $(and $(GO_GOARM),--arch-variant v$(GO_GOARM)) # entrypoint and command # Special treatment: both the entrypoint and arguments (aka command) are # a double-quoted, space-separated, escaped-double-quoted string, like: # "foo \"1 2 3 4\" ' a b c d ' bar\ buz" # which should be interpreted as a 4-item list (using single quotes to # delimit them and see leading/trailing spaces): # 'foo' # '1 2 3 4' # ' a b c d ' # 'bar buz' # # We use some trickery to have the shell properly expand this into a list # where each item is single-quoted and prefixed with the appropriate # option string: OCI_SLOCI_IMAGE_OPTS += \ $(shell eval printf -- "--entrypoint\ \'%s\'\ " $(BR2_TARGET_ROOTFS_OCI_ENTRYPOINT)) \ $(shell eval printf -- "--cmd\ \'%s\'\ " $(BR2_TARGET_ROOTFS_OCI_CMD)) # author OCI_AUTHOR = $(call qstrip,$(BR2_TARGET_ROOTFS_OCI_AUTHOR)) ifneq ($(OCI_AUTHOR),) OCI_SLOCI_IMAGE_OPTS += --author "$(OCI_AUTHOR)" endif # username or UID OCI_UID = $(call qstrip,$(BR2_TARGET_ROOTFS_OCI_UID)) ifneq ($(OCI_UID),) OCI_SLOCI_IMAGE_OPTS += --user "$(OCI_UID)" endif # labels OCI_LABELS = $(call qstrip,$(BR2_TARGET_ROOTFS_OCI_LABELS)) ifneq ($(OCI_LABELS),) OCI_SLOCI_IMAGE_OPTS += \ $(foreach label,$(OCI_LABELS),--label "$(label)") endif # environment variables OCI_ENV_VARS = $(call qstrip,$(BR2_TARGET_ROOTFS_OCI_ENV_VARS)) ifneq ($(OCI_ENV_VARS),) OCI_SLOCI_IMAGE_OPTS += \ $(foreach var,$(OCI_ENV_VARS),--env "$(var)") endif # working directory OCI_WORKDIR = $(call qstrip,$(BR2_TARGET_ROOTFS_OCI_WORKDIR)) ifneq ($(OCI_WORKDIR),) OCI_SLOCI_IMAGE_OPTS += --working-dir "$(OCI_WORKDIR)" endif # ports OCI_PORTS = $(call qstrip,$(BR2_TARGET_ROOTFS_OCI_PORTS)) ifneq ($(OCI_PORTS),) OCI_SLOCI_IMAGE_OPTS += \ $(foreach port,$(OCI_PORTS),--port "$(port)") endif # tag OCI_TAG = $(or $(call qstrip,$(BR2_TARGET_ROOTFS_OCI_TAG)),latest) # enable tar archive ifeq ($(BR2_TARGET_ROOTFS_OCI_ARCHIVE),y) OCI_SLOCI_IMAGE_OPTS += --tar endif define ROOTFS_OCI_CMD rm -rf $(BINARIES_DIR)/rootfs-oci $(HOST_DIR)/bin/sloci-image $(OCI_SLOCI_IMAGE_OPTS) $(TARGET_DIR) \ $(BINARIES_DIR)/rootfs-oci:$(OCI_TAG) endef $(eval $(rootfs))