mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-06-24 06:27:39 +00:00
rootfs: allow to use agent as init process
Add AGENT_INIT env to make it configurable. Signed-off-by: Peng Tao <bergwolf@gmail.com>
This commit is contained in:
parent
058cf5bfca
commit
94e7b1da4f
5
Makefile
5
Makefile
@ -8,9 +8,12 @@ MK_DIR :=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
|
|||||||
DISTRO ?= centos
|
DISTRO ?= centos
|
||||||
DISTRO_ROOTFS := "$(PWD)/$(DISTRO)_rootfs"
|
DISTRO_ROOTFS := "$(PWD)/$(DISTRO)_rootfs"
|
||||||
IMG_SIZE=500
|
IMG_SIZE=500
|
||||||
|
AGENT_INIT ?= no
|
||||||
|
|
||||||
image:
|
rootfs:
|
||||||
@echo Creating rootfs based on "$(DISTRO)"
|
@echo Creating rootfs based on "$(DISTRO)"
|
||||||
"$(MK_DIR)/rootfs-builder/rootfs.sh" -r "$(DISTRO_ROOTFS)" "$(DISTRO)"
|
"$(MK_DIR)/rootfs-builder/rootfs.sh" -r "$(DISTRO_ROOTFS)" "$(DISTRO)"
|
||||||
|
|
||||||
|
image: rootfs
|
||||||
@echo Creating image based on "$(DISTRO_ROOTFS)"
|
@echo Creating image based on "$(DISTRO_ROOTFS)"
|
||||||
AGENT_BIN="$(AGENT_BIN)" "$(MK_DIR)/image-builder/image_builder.sh" -s "$(IMG_SIZE)" "$(DISTRO_ROOTFS)"
|
AGENT_BIN="$(AGENT_BIN)" "$(MK_DIR)/image-builder/image_builder.sh" -s "$(IMG_SIZE)" "$(DISTRO_ROOTFS)"
|
||||||
|
@ -16,6 +16,7 @@ fi
|
|||||||
SCRIPT_NAME="${0##*/}"
|
SCRIPT_NAME="${0##*/}"
|
||||||
IMAGE="${IMAGE:-kata-containers.img}"
|
IMAGE="${IMAGE:-kata-containers.img}"
|
||||||
AGENT_BIN=${AGENT_BIN:-kata-agent}
|
AGENT_BIN=${AGENT_BIN:-kata-agent}
|
||||||
|
AGENT_INIT=${AGENT_INIT:-no}
|
||||||
|
|
||||||
die()
|
die()
|
||||||
{
|
{
|
||||||
@ -50,7 +51,8 @@ Options:
|
|||||||
-s Image size in MB (default $IMG_SIZE) ENV: IMG_SIZE
|
-s Image size in MB (default $IMG_SIZE) ENV: IMG_SIZE
|
||||||
|
|
||||||
Extra environment variables:
|
Extra environment variables:
|
||||||
AGENT_BIN: use it to change the expected agent binary name"
|
AGENT_BIN: use it to change the expected agent binary name
|
||||||
|
AGENT_INIT: use kata agent as init process
|
||||||
USE_DOCKER: If set will build image in a Docker Container (requries docker)
|
USE_DOCKER: If set will build image in a Docker Container (requries docker)
|
||||||
DEFAULT: not set
|
DEFAULT: not set
|
||||||
EOT
|
EOT
|
||||||
@ -107,7 +109,7 @@ fi
|
|||||||
init="${ROOTFS}/sbin/init"
|
init="${ROOTFS}/sbin/init"
|
||||||
[ -x "${init}" ] || [ -L ${init} ] || die "/sbin/init is not installed in ${ROOTFS_DIR}"
|
[ -x "${init}" ] || [ -L ${init} ] || die "/sbin/init is not installed in ${ROOTFS_DIR}"
|
||||||
OK "init is installed"
|
OK "init is installed"
|
||||||
[ -x "${ROOTFS}/bin/${AGENT_BIN}" ] || \
|
[ "${AGENT_INIT}" == "yes" ] || [ -x "${ROOTFS}/bin/${AGENT_BIN}" ] || \
|
||||||
die "/bin/${AGENT_BIN} is not installed in ${ROOTFS}
|
die "/bin/${AGENT_BIN} is not installed in ${ROOTFS}
|
||||||
use AGENT_BIN env variable to change the expected agent binary name"
|
use AGENT_BIN env variable to change the expected agent binary name"
|
||||||
OK "Agent installed"
|
OK "Agent installed"
|
||||||
|
@ -12,6 +12,8 @@ ROOTFS_DIR=${ROOTFS_DIR:-${PWD}/rootfs}
|
|||||||
AGENT_VERSION=${AGENT_VERSION:-master}
|
AGENT_VERSION=${AGENT_VERSION:-master}
|
||||||
GO_AGENT_PKG=${GO_AGENT_PKG:-github.com/kata-containers/agent}
|
GO_AGENT_PKG=${GO_AGENT_PKG:-github.com/kata-containers/agent}
|
||||||
AGENT_BIN=${AGENT_BIN:-kata-agent}
|
AGENT_BIN=${AGENT_BIN:-kata-agent}
|
||||||
|
AGENT_INIT=${AGENT_INIT:-no}
|
||||||
|
|
||||||
#Load default vesions for golang and other componets
|
#Load default vesions for golang and other componets
|
||||||
source "${script_dir}/versions.txt"
|
source "${script_dir}/versions.txt"
|
||||||
|
|
||||||
@ -46,6 +48,8 @@ GO_AGENT_PKG: Change the golang package url to get the agent source code
|
|||||||
AGENT_BIN : Name of the agent binary (needed to check if agent is installed)
|
AGENT_BIN : Name of the agent binary (needed to check if agent is installed)
|
||||||
USE_DOCKER: If set will build rootfs in a Docker Container (requries docker)
|
USE_DOCKER: If set will build rootfs in a Docker Container (requries docker)
|
||||||
DEFAULT: not set
|
DEFAULT: not set
|
||||||
|
AGENT_INIT : Use $(AGENT_BIN) as init process.
|
||||||
|
DEFAULT: no
|
||||||
EOT
|
EOT
|
||||||
exit "${error}"
|
exit "${error}"
|
||||||
}
|
}
|
||||||
@ -103,6 +107,14 @@ ENV PATH=\$PATH:\$GOROOT/bin:\$GOPATH/bin
|
|||||||
popd
|
popd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setup_agent_init() {
|
||||||
|
agent_bin="$1"
|
||||||
|
init_bin="$2"
|
||||||
|
info "Install $agent_bin as init process"
|
||||||
|
mv -f "${agent_bin}" ${init_bin}
|
||||||
|
OK "Agent is installed as init process"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
while getopts c:hr: opt
|
while getopts c:hr: opt
|
||||||
do
|
do
|
||||||
@ -117,7 +129,10 @@ shift $(($OPTIND - 1))
|
|||||||
|
|
||||||
[ -z "$GOPATH" ] && die "GOPATH not set"
|
[ -z "$GOPATH" ] && die "GOPATH not set"
|
||||||
|
|
||||||
|
[ "$AGENT_INIT" == "yes" -o "$AGENT_INIT" == "no" ] || die "AGENT_INIT($AGENT_INIT) is invalid (must be yes or no)"
|
||||||
|
|
||||||
distro="$1"
|
distro="$1"
|
||||||
|
init="${ROOTFS_DIR}/sbin/init"
|
||||||
|
|
||||||
[ -n "${distro}" ] || usage 1
|
[ -n "${distro}" ] || usage 1
|
||||||
distro_config_dir="${script_dir}/${distro}"
|
distro_config_dir="${script_dir}/${distro}"
|
||||||
@ -151,6 +166,7 @@ if [ -n "${USE_DOCKER}" ] ; then
|
|||||||
--env ROOTFS_DIR="/rootfs" \
|
--env ROOTFS_DIR="/rootfs" \
|
||||||
--env GO_AGENT_PKG="${GO_AGENT_PKG}" \
|
--env GO_AGENT_PKG="${GO_AGENT_PKG}" \
|
||||||
--env AGENT_BIN="${AGENT_BIN}" \
|
--env AGENT_BIN="${AGENT_BIN}" \
|
||||||
|
--env AGENT_INIT="${AGENT_INIT}" \
|
||||||
--env GOPATH="${GOPATH}" \
|
--env GOPATH="${GOPATH}" \
|
||||||
-v "${script_dir}":"/osbuilder" \
|
-v "${script_dir}":"/osbuilder" \
|
||||||
-v "${ROOTFS_DIR}":"/rootfs" \
|
-v "${ROOTFS_DIR}":"/rootfs" \
|
||||||
@ -164,19 +180,20 @@ fi
|
|||||||
mkdir -p ${ROOTFS_DIR}
|
mkdir -p ${ROOTFS_DIR}
|
||||||
build_rootfs ${ROOTFS_DIR}
|
build_rootfs ${ROOTFS_DIR}
|
||||||
|
|
||||||
info "Check init is installed"
|
|
||||||
init="${ROOTFS_DIR}/sbin/init"
|
|
||||||
[ -x "${init}" ] || [ -L ${init} ] || die "/sbin/init is not installed in ${ROOTFS_DIR}"
|
|
||||||
OK "init is installed"
|
|
||||||
|
|
||||||
info "Pull Agent source code"
|
info "Pull Agent source code"
|
||||||
go get -d "${GO_AGENT_PKG}" || true
|
go get -d "${GO_AGENT_PKG}" || true
|
||||||
OK "Pull Agent source code"
|
OK "Pull Agent source code"
|
||||||
|
|
||||||
info "Build agent"
|
info "Build agent"
|
||||||
pushd "${GOPATH}/src/${GO_AGENT_PKG}"
|
pushd "${GOPATH}/src/${GO_AGENT_PKG}"
|
||||||
make INIT=no
|
make INIT=${AGENT_INIT}
|
||||||
make install DESTDIR="${ROOTFS_DIR}" INIT=no
|
make install DESTDIR="${ROOTFS_DIR}" INIT=${AGENT_INIT}
|
||||||
popd
|
popd
|
||||||
[ -x "${ROOTFS_DIR}/bin/${AGENT_BIN}" ] || die "/bin/${AGENT_BIN} is not installed in ${ROOTFS_DIR}"
|
[ -x "${ROOTFS_DIR}/bin/${AGENT_BIN}" ] || die "/bin/${AGENT_BIN} is not installed in ${ROOTFS_DIR}"
|
||||||
OK "Agent installed"
|
OK "Agent installed"
|
||||||
|
|
||||||
|
[ "${AGENT_INIT}" == "yes" ] && setup_agent_init "${ROOTFS_DIR}/bin/${AGENT_BIN}" "${init}"
|
||||||
|
|
||||||
|
info "Check init is installed"
|
||||||
|
[ -x "${init}" ] || [ -L ${init} ] || die "/sbin/init is not installed in ${ROOTFS_DIR}"
|
||||||
|
OK "init is installed"
|
||||||
|
Loading…
Reference in New Issue
Block a user