mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-04-27 03:21:04 +00:00
Recent PR #10732 moved the deletion of systemd files and units that were
deemed uneccessary by 02b3b3b977
from `image_builder.sh` to `rootfs.sh`.
This unfortunately broke `rootfs.sh centos` and `rootfs.sh -r` as used by
some other downstream users like fedora and RHEL, with the following error :
Warning FailedCreatePodSandBox 1s (x5 over 63s) kubelet
Failed to create pod sandbox: rpc error: code = Unknown
desc = CreateContainer failed: Establishing a D-Bus connection
Caused by:
0: I/O error: Connection reset by peer (os error 104)
1: Connection reset by peer (os error 104)
This is because the aforementioned distros use dbus-broker [1] that requires
systemd-journald to be present.
It is questionable that systemd units or files should be deemed unnecessary
for _all_ distros but this has been around since 2019. There's now also a
long-standing expectation from CI that `make rootfs && make image` does
remove these files.
In order to accomodate all the expectations, add a `-d` flag to `rootfs.sh`
to delete the systemd files and have `make rootfs` to use it.
[1] https://github.com/bus1/dbus-broker
Reported-by: Niteesh Dubey <niteesh@us.ibm.com>
Signed-off-by: Greg Kurz <groug@kaod.org>
221 lines
7.1 KiB
Makefile
221 lines
7.1 KiB
Makefile
#
|
|
# Copyright (c) 2017 Intel Corporation
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
MK_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
|
|
TEST_RUNNER := $(MK_DIR)/tests/test_images.sh
|
|
ROOTFS_BUILDER := $(MK_DIR)/rootfs-builder/rootfs.sh
|
|
INITRD_BUILDER := $(MK_DIR)/initrd-builder/initrd_builder.sh
|
|
IMAGE_BUILDER := $(MK_DIR)/image-builder/image_builder.sh
|
|
|
|
DISTRO ?= ubuntu
|
|
BUILD_METHOD := distro
|
|
BUILD_METHOD_LIST := distro dracut
|
|
AGENT_INIT ?= no
|
|
USE_DOCKER ?= true
|
|
ROOTFS_BUILD_DEST := $(shell pwd)
|
|
IMAGES_BUILD_DEST := $(shell pwd)
|
|
ROOTFS_MARKER_SUFFIX := _rootfs.done
|
|
TARGET_ROOTFS := $(ROOTFS_BUILD_DEST)/$(DISTRO)_rootfs
|
|
TARGET_ROOTFS_MARKER := $(ROOTFS_BUILD_DEST)/.$(DISTRO)$(ROOTFS_MARKER_SUFFIX)
|
|
TARGET_IMAGE := $(IMAGES_BUILD_DEST)/kata-containers.img
|
|
TARGET_INITRD := $(IMAGES_BUILD_DEST)/kata-containers-initrd.img
|
|
|
|
VERSION_FILE := ./VERSION
|
|
VERSION := $(shell grep -v ^\# $(VERSION_FILE) 2>/dev/null || echo "unknown")
|
|
COMMIT_NO := $(shell git rev-parse HEAD 2>/dev/null || true)
|
|
COMMIT := $(if $(shell git status --porcelain --untracked-files=no 2>/dev/null || true),${COMMIT_NO}-dirty,${COMMIT_NO})
|
|
VERSION_COMMIT := $(if $(COMMIT),$(VERSION)-$(COMMIT),$(VERSION))
|
|
|
|
ifeq ($(filter $(BUILD_METHOD),$(BUILD_METHOD_LIST)),)
|
|
$(error Invalid BUILD_METHOD value '$(BUILD_METHOD)'. Supported values: $(BUILD_METHOD_LIST))
|
|
endif
|
|
|
|
ifeq (dracut,$(BUILD_METHOD))
|
|
DISTRO :=
|
|
TARGET_ROOTFS := dracut_rootfs
|
|
TARGET_ROOTFS_MARKER := $(ROOTFS_BUILD_DEST)/.dracut$(ROOTFS_MARKER_SUFFIX)
|
|
# dracut specific variables
|
|
DRACUT_KVERSION :=
|
|
DRACUT_OVERLAY_DIR := $(MK_DIR)/dracut_overlay
|
|
DRACUT_DIR := $(MK_DIR)/dracut
|
|
DRACUT_CONF_DIR := $(DRACUT_DIR)/dracut.conf.d
|
|
DRACUT_OPTIONS := --no-compress --conf /dev/null --confdir $(DRACUT_CONF_DIR)
|
|
|
|
ifneq (,$(DRACUT_KVERSION))
|
|
# Explicitly use bash, which is what dracut uses to process conf files
|
|
DRACUT_KMODULES := $(shell bash -c 'source $(DRACUT_CONF_DIR)/10-drivers.conf; echo "$$drivers"')
|
|
else
|
|
# If a kernel version is not specified, do not make systemd load modules
|
|
# at startup
|
|
DRACUT_OPTIONS += --no-kernel
|
|
endif
|
|
|
|
ifeq (no,$(AGENT_INIT))
|
|
AGENT_PATH := $(DRACUT_OVERLAY_DIR)/usr/bin/kata-agent
|
|
else
|
|
AGENT_PATH := $(DRACUT_OVERLAY_DIR)/sbin/init
|
|
endif
|
|
|
|
ifeq (,$(DRACUT_OVERLAY_DIR))
|
|
$(error DRACUT_OVERLAY_DIR cannot be empty)
|
|
endif
|
|
endif
|
|
|
|
# Set the variable to silent logs using chronic
|
|
OSBUILDER_USE_CHRONIC :=
|
|
|
|
# silent_run allows running make recipes using the chronic wrapper, so logs are
|
|
# muted if the recipe command succeeds.
|
|
# Arguments:
|
|
# - Message
|
|
# - Command to run
|
|
ifeq (,$(OSBUILDER_USE_CHRONIC))
|
|
define silent_run
|
|
@echo $(1)
|
|
$(2)
|
|
endef
|
|
else
|
|
define silent_run
|
|
@echo $(1) with command: $(2)
|
|
@chronic $(2)
|
|
endef
|
|
endif
|
|
|
|
################################################################################
|
|
|
|
.PHONY: all
|
|
all: image initrd
|
|
|
|
rootfs-%: $(ROOTFS_BUILD_DEST)/.%$(ROOTFS_MARKER_SUFFIX)
|
|
@ # DONT remove. This is not cancellation rule.
|
|
|
|
.PRECIOUS: $(ROOTFS_BUILD_DEST)/.%$(ROOTFS_MARKER_SUFFIX)
|
|
$(ROOTFS_BUILD_DEST)/.%$(ROOTFS_MARKER_SUFFIX):: rootfs-builder/%
|
|
$(call silent_run,Creating rootfs for "$*",$(ROOTFS_BUILDER) -o $(VERSION_COMMIT) -d -r $(ROOTFS_BUILD_DEST)/$*_rootfs $*)
|
|
@touch $@
|
|
|
|
# To generate a dracut rootfs, we first generate a dracut initrd and then
|
|
# extract it in a local folder.
|
|
# Notes:
|
|
# - assuming a not compressed initrd.
|
|
ifeq (dracut,$(BUILD_METHOD))
|
|
.PRECIOUS: $(ROOTFS_BUILD_DEST)/.dracut$(ROOTFS_MARKER_SUFFIX)
|
|
$(ROOTFS_BUILD_DEST)/.dracut$(ROOTFS_MARKER_SUFFIX): $(TARGET_INITRD)
|
|
mkdir -p $(TARGET_ROOTFS)
|
|
(cd $(TARGET_ROOTFS); cat $< | cpio --extract --preserve-modification-time --make-directories)
|
|
@touch $@
|
|
endif
|
|
|
|
image-%: $(IMAGES_BUILD_DEST)/kata-containers-image-%.img
|
|
@ # DONT remove. This is not cancellation rule.
|
|
|
|
.PRECIOUS: $(IMAGES_BUILD_DEST)/kata-containers-image-%.img
|
|
$(IMAGES_BUILD_DEST)/kata-containers-image-%.img: rootfs-%
|
|
$(call silent_run,Creating image based on $^,$(IMAGE_BUILDER) -o $@ $(ROOTFS_BUILD_DEST)/$*_rootfs)
|
|
|
|
initrd-%: $(IMAGES_BUILD_DEST)/kata-containers-initrd-%.img
|
|
@ # DONT remove. This is not cancellation rule.
|
|
|
|
.PRECIOUS: $(IMAGES_BUILD_DEST)/kata-containers-initrd-%.img
|
|
$(IMAGES_BUILD_DEST)/kata-containers-initrd-%.img: rootfs-%
|
|
$(call silent_run,Creating initrd image for $*,$(INITRD_BUILDER) -o $@ $(ROOTFS_BUILD_DEST)/$*_rootfs)
|
|
|
|
.PHONY: rootfs
|
|
rootfs: $(TARGET_ROOTFS_MARKER)
|
|
|
|
.PHONY: image
|
|
image: $(TARGET_IMAGE)
|
|
|
|
$(TARGET_IMAGE): $(TARGET_ROOTFS_MARKER)
|
|
$(call silent_run,Creating image based on "$(TARGET_ROOTFS)",$(IMAGE_BUILDER) -o $@ "$(TARGET_ROOTFS)")
|
|
|
|
|
|
.PHONY: initrd
|
|
initrd: $(TARGET_INITRD)
|
|
|
|
ifeq (distro,$(BUILD_METHOD))
|
|
$(TARGET_INITRD): $(TARGET_ROOTFS_MARKER)
|
|
$(call silent_run,Creating initrd image based on "$(TARGET_ROOTFS)",$(INITRD_BUILDER) "$(TARGET_ROOTFS)")
|
|
else
|
|
$(TARGET_INITRD): $(DRACUT_OVERLAY_DIR)
|
|
@echo Creating initrd image based on the host OS using dracut
|
|
$(DRACUT_DIR)/add_libs.sh $(AGENT_PATH) > $(DRACUT_CONF_DIR)/15-extra-libs.conf
|
|
dracut $(DRACUT_OPTIONS) --include $< / $@ $(DRACUT_KVERSION)
|
|
endif
|
|
|
|
# Notes on overlay dir:
|
|
# - If user specified any kernel module in the dracut conf file,
|
|
# we need to make sure these are pre-loaded at startup using
|
|
# systemd modules-load.d
|
|
$(DRACUT_OVERLAY_DIR):
|
|
mkdir -p $@
|
|
# Modules preload
|
|
$(ROOTFS_BUILDER) -o $(VERSION_COMMIT) -r $@
|
|
mkdir -p $@/etc/modules-load.d
|
|
echo $(DRACUT_KMODULES) | tr " " "\n" > $@/etc/modules-load.d/kata-modules.conf
|
|
|
|
.PHONY: test
|
|
test:
|
|
$(TEST_RUNNER) "$(DISTRO)"
|
|
|
|
.PHONY: test-image-only
|
|
test-image-only:
|
|
$(TEST_RUNNER) --test-images-only "$(DISTRO)"
|
|
|
|
.PHONY: test-initrd-only
|
|
test-initrd-only:
|
|
$(TEST_RUNNER) --test-initrds-only "$(DISTRO)"
|
|
|
|
.PHONY: list-distros
|
|
list-distros:
|
|
@ $(ROOTFS_BUILDER) -l
|
|
|
|
DESTDIR := /
|
|
KATADIR := /usr/libexec/kata-containers
|
|
OSBUILDER_DIR := $(KATADIR)/osbuilder
|
|
INSTALL_DIR :=$(DESTDIR)/$(OSBUILDER_DIR)
|
|
DIST_CONFIGS:= $(wildcard rootfs-builder/*/config.sh)
|
|
|
|
SCRIPTS :=
|
|
SCRIPTS += rootfs-builder/rootfs.sh
|
|
SCRIPTS += image-builder/image_builder.sh
|
|
SCRIPTS += initrd-builder/initrd_builder.sh
|
|
|
|
HELPER_FILES :=
|
|
HELPER_FILES += scripts/lib.sh
|
|
HELPER_FILES += image-builder/nsdax.gpl.c
|
|
|
|
define INSTALL_FILE
|
|
echo "Installing $(abspath $2/$1)";
|
|
install -m 644 -D $1 $2/$1;
|
|
endef
|
|
|
|
define INSTALL_SCRIPT
|
|
echo "Installing $(abspath $2/$1)";
|
|
install -m 755 -D $1 $(abspath $2/$1);
|
|
endef
|
|
|
|
.PHONY: install-scripts
|
|
install-scripts:
|
|
@echo "Installing scripts"
|
|
@$(foreach f,$(SCRIPTS),$(call INSTALL_SCRIPT,$f,$(INSTALL_DIR)))
|
|
@echo "Installing helper files"
|
|
@$(foreach f,$(HELPER_FILES),$(call INSTALL_FILE,$f,$(INSTALL_DIR)))
|
|
@echo "Installing config files"
|
|
@$(foreach f,$(DIST_CONFIGS),$(call INSTALL_FILE,$f,$(INSTALL_DIR)))
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
rm -rf $(TARGET_ROOTFS_MARKER) $(TARGET_ROOTFS) $(TARGET_IMAGE) $(TARGET_INITRD) $(DRACUT_OVERLAY_DIR)
|
|
|
|
# Prints the name of the variable passed as suffix to the print- target,
|
|
# E.g., if Makefile contains:
|
|
# MY_MAKE_VAR := foobar
|
|
# Then:
|
|
# $ make printf-MY_MAKE_VAR
|
|
# Will print "foobar"
|
|
print-%:
|
|
@echo $($*)
|