|
|
FROM ?= |
|
|
HARDWARE ?= |
|
|
|
|
|
REGISTRY ?= quay.io |
|
|
REGISTRY_ORG ?= ai-lab |
|
|
IMAGE_NAME ?= $(HARDWARE)-bootc |
|
|
IMAGE_TAG ?= latest |
|
|
BOOTC_IMAGE ?= ${REGISTRY}/${REGISTRY_ORG}/${IMAGE_NAME}:${IMAGE_TAG} |
|
|
BOOTC_MODELS_IMAGE ?= ${REGISTRY}/${REGISTRY_ORG}/${IMAGE_NAME}-models:${IMAGE_TAG} |
|
|
BOOTC_CLOUD_IMAGE ?= ${REGISTRY}/${REGISTRY_ORG}/${IMAGE_NAME}-cloud:${IMAGE_TAG} |
|
|
BOOTC_CLOUD_MODELS_IMAGE ?= ${REGISTRY}/${REGISTRY_ORG}/${IMAGE_NAME}-cloud-models:${IMAGE_TAG} |
|
|
FROM_BOOTC_IMAGE ?= $(BOOTC_IMAGE) |
|
|
VENDOR ?= |
|
|
|
|
|
CONTAINER_TOOL ?= podman |
|
|
CONTAINER_TOOL_EXTRA_ARGS ?= |
|
|
EXTRA_RPM_PACKAGES ?= |
|
|
GRAPH_ROOT=$(shell podman info --format '{{ .Store.GraphRoot }}') |
|
|
UMASK=$(shell umask) |
|
|
IMAGE_VERSION_ID := $(or ${IMAGE_VERSION_ID},$(shell git rev-parse --short HEAD)) |
|
|
|
|
|
AUTH_JSON ?= |
|
|
|
|
|
SOURCE_DATE_EPOCH ?= $(shell git log -1 --pretty=%ct) |
|
|
|
|
|
BOOTC_IMAGE_BUILDER ?= quay.io/centos-bootc/bootc-image-builder |
|
|
BUILD_ARG_FILE ?= |
|
|
IMAGE_BUILDER_CONFIG ?= |
|
|
IMAGE_BUILDER_EXTRA_ARGS ?= |
|
|
DISK_TYPE ?= qcow2 |
|
|
DISK_UID ?= $(shell id -u) |
|
|
DISK_GID ?= $(shell id -g) |
|
|
|
|
|
ARCH ?= $(shell arch) |
|
|
|
|
|
DRIVER_VERSION ?= |
|
|
KERNEL_VERSION ?= $(shell skopeo inspect --format json docker://${FROM} | jq -r '.Labels["ostree.linux"]' | sed "s/\.${ARCH}//") |
|
|
|
|
|
INSTRUCTLAB_IMAGE ?= $(REGISTRY)/$(REGISTRY_ORG)/instructlab-$(HARDWARE):$(IMAGE_TAG) |
|
|
WRAPPER = $(CURDIR)/../ilab-wrapper/ilab |
|
|
QLORA_WRAPPER = $(CURDIR)/../ilab-wrapper/ilab-qlora |
|
|
TRAIN_WRAPPER = $(CURDIR)/../ilab-wrapper/ilab-training-launcher |
|
|
OUTDIR = $(CURDIR)/../build |
|
|
MODELS_CONTAINERFILE = $(OUTDIR)/Containerfile.models |
|
|
|
|
|
DRIVER_TOOLKIT_BASE_IMAGE ?= |
|
|
DRIVER_TOOLKIT_IMAGE_NAME ?= driver-toolkit |
|
|
DRIVER_TOOLKIT_IMAGE_TAG ?= ${KERNEL_VERSION} |
|
|
DRIVER_TOOLKIT_IMAGE ?= ${REGISTRY}/${REGISTRY_ORG}/${DRIVER_TOOLKIT_IMAGE_NAME}:${DRIVER_TOOLKIT_IMAGE_TAG} |
|
|
|
|
|
ENABLE_RT ?= |
|
|
|
|
|
SSH_PUBKEY ?= $(shell cat ${HOME}/.ssh/id_rsa.pub 2> /dev/null) |
|
|
|
|
|
.PHONY: prepare-files |
|
|
prepare-files: $(OUTDIR)/$(WRAPPER) $(OUTDIR)/$(QLORA_WRAPPER) $(OUTDIR)/$(TRAIN_WRAPPER) $(OUTDIR) common-services |
|
|
|
|
|
$(OUTDIR): |
|
|
mkdir -p $(OUTDIR) |
|
|
$(OUTDIR)/$(WRAPPER): $(OUTDIR) |
|
|
cp -pf $(WRAPPER) $(OUTDIR) |
|
|
$(OUTDIR)/$(QLORA_WRAPPER): $(OUTDIR) |
|
|
cp -pf $(QLORA_WRAPPER) $(OUTDIR) |
|
|
$(OUTDIR)/$(TRAIN_WRAPPER): $(OUTDIR) |
|
|
cp -pf $(TRAIN_WRAPPER) $(OUTDIR) |
|
|
|
|
|
.PHONY: common-services |
|
|
common-services: |
|
|
mkdir -p build; cp -pR ../common/usr build |
|
|
|
|
|
|
|
|
.PHONY: check-sshkey |
|
|
check-sshkey: |
|
|
@test -n "$(SSH_PUBKEY)" || \ |
|
|
(echo -n "Error: no ssh key defined! "; \ |
|
|
echo "Create ~/.ssh/id_rsa.pub or set SSH_PUBKEY"; exit 1) |
|
|
|
|
|
.PHONY: push |
|
|
push: |
|
|
podman push "${REGISTRY}/${REGISTRY_ORG}/${IMAGE_NAME}:${IMAGE_TAG}" |
|
|
|
|
|
.PHONY: check-umask |
|
|
check-umask: |
|
|
@test "$(UMASK)" = "0022" || \ |
|
|
(echo; echo -n "Error: umask $(UMASK) will cause unexpected behaviour: use umask 022! "; \ |
|
|
echo "Verify the `ai-lab-recipes` git repository was cloned with umask 0022"; exit 1) |
|
|
|
|
|
.PHONY: bootc-image-builder |
|
|
bootc-image-builder: |
|
|
mkdir -p build/store build/output |
|
|
podman run \ |
|
|
$(AUTH_JSON:%=-v %:/run/containers/0/auth.json) \ |
|
|
--rm \ |
|
|
-ti \ |
|
|
--privileged \ |
|
|
--pull newer \ |
|
|
-v $(GRAPH_ROOT):/var/lib/containers/storage \ |
|
|
-v ./build/store:/store \ |
|
|
-v ./build/output:/output \ |
|
|
$(IMAGE_BUILDER_CONFIG:%=-v %:/config$(suffix $(IMAGE_BUILDER_CONFIG))) \ |
|
|
${CONTAINER_TOOL_EXTRA_ARGS} \ |
|
|
$(BOOTC_IMAGE_BUILDER) \ |
|
|
$(IMAGE_BUILDER_CONFIG:%=--config /config$(suffix $(IMAGE_BUILDER_CONFIG))) \ |
|
|
${IMAGE_BUILDER_EXTRA_ARGS} \ |
|
|
--chown $(DISK_UID):$(DISK_GID) \ |
|
|
--local \ |
|
|
--type $(DISK_TYPE) \ |
|
|
$(ARCH:%=--target-arch %) \ |
|
|
$(BOOTC_IMAGE) |
|
|
|
|
|
.PHONY: driver-toolkit |
|
|
driver-toolkit: |
|
|
"${CONTAINER_TOOL}" build \ |
|
|
$(ARCH:%=--platform linux/%) \ |
|
|
$(BUILD_ARG_FILE:%=--build-arg-file=%) \ |
|
|
$(ENABLE_RT:%=--build-arg ENABLE_RC=%) \ |
|
|
$(FROM:%=--build-arg BASEIMAGE=%) \ |
|
|
$(DRIVER_TOOLKIT_BASE_IMAGE:%=--build-arg BASEIMAGE=%) \ |
|
|
$(KERNEL_VERSION:%=--build-arg KERNEL_VERSION=%) \ |
|
|
$(SOURCE_DATE_EPOCH:%=--timestamp=%) \ |
|
|
--file ../common/driver-toolkit/Containerfile \ |
|
|
--tag "${DRIVER_TOOLKIT_IMAGE}" \ |
|
|
${CONTAINER_TOOL_EXTRA_ARGS} . |
|
|
|
|
|
.PHONY: clean |
|
|
clean: |
|
|
rm -rf build |
|
|
|