mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-08-14 06:06:12 +00:00
rootfs: support adding optional kernel modules
Caller of rootfs.sh can define `KERNEL_MODULES_DIR` as a kernel module directory and then the directory will be copied to `/lib/modules/` of the created rootfs. This allows additional kernel modules to be put into rootfs image and initrd image. Signed-off-by: Peng Tao <bergwolf@gmail.com>
This commit is contained in:
parent
7245b21206
commit
9680f08ebf
@ -1,5 +1,6 @@
|
|||||||
* [Supported base OSs](#supported-base-oss)
|
* [Supported base OSs](#supported-base-oss)
|
||||||
* [Creating a rootfs](#creating-a-rootfs)
|
* [Creating a rootfs](#creating-a-rootfs)
|
||||||
|
* [Creating a rootfs with kernel modules](#creating-a-rootfs-with-kenrel-modules)
|
||||||
* [Build a rootfs using Docker*](#build-a-rootfs-using-docker*)
|
* [Build a rootfs using Docker*](#build-a-rootfs-using-docker*)
|
||||||
* [Adding support for a new guest OS](#adding-support-for-a-new-guest-os)
|
* [Adding support for a new guest OS](#adding-support-for-a-new-guest-os)
|
||||||
* [Create template files](#create-template-files)
|
* [Create template files](#create-template-files)
|
||||||
@ -48,6 +49,15 @@ To build a rootfs for your chosen distribution, run:
|
|||||||
$ sudo ./rootfs.sh <distro>
|
$ sudo ./rootfs.sh <distro>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Creating a rootfs with kernel modules
|
||||||
|
|
||||||
|
To build a rootfs with additional kernel modules, run:
|
||||||
|
```
|
||||||
|
$ sudo KERNEL_MODULES_DIR=${kernel_mod_dir} ./rootfs.sh <distro>
|
||||||
|
```
|
||||||
|
Where `kernel_mod_dir` points to the kernel modules directory to be put under
|
||||||
|
`/lib/modules/` directory of the created rootfs.
|
||||||
|
|
||||||
## Build a rootfs using Docker*
|
## Build a rootfs using Docker*
|
||||||
|
|
||||||
Depending on the base OS to build the rootfs guest OS, it is required some
|
Depending on the base OS to build the rootfs guest OS, it is required some
|
||||||
|
@ -13,6 +13,7 @@ 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}
|
AGENT_INIT=${AGENT_INIT:-no}
|
||||||
|
KERNEL_MODULES_DIR=${KERNEL_MODULES_DIR:-""}
|
||||||
|
|
||||||
#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"
|
||||||
@ -50,6 +51,8 @@ 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.
|
AGENT_INIT : Use $(AGENT_BIN) as init process.
|
||||||
DEFAULT: no
|
DEFAULT: no
|
||||||
|
KERNEL_MODULES_DIR: Optional kernel modules to put into the rootfs.
|
||||||
|
DEFAULT: ""
|
||||||
EOT
|
EOT
|
||||||
exit "${error}"
|
exit "${error}"
|
||||||
}
|
}
|
||||||
@ -115,6 +118,17 @@ setup_agent_init() {
|
|||||||
OK "Agent is installed as init process"
|
OK "Agent is installed as init process"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
copy_kernel_modules() {
|
||||||
|
local module_dir=$1
|
||||||
|
local rootfs_dir=$2
|
||||||
|
|
||||||
|
[ -z "module_dir" -o -z "rootfs_dir" ] && die "module dir and rootfs dir must be specified"
|
||||||
|
|
||||||
|
info "Copy kernel modules from ${KERNEL_MODULES_DIR}"
|
||||||
|
mkdir -p ${rootfs_dir}/lib/modules/
|
||||||
|
cp -a ${KERNEL_MODULES_DIR} ${rootfs_dir}/lib/modules/
|
||||||
|
OK "Kernel modules copied"
|
||||||
|
}
|
||||||
|
|
||||||
while getopts c:hr: opt
|
while getopts c:hr: opt
|
||||||
do
|
do
|
||||||
@ -131,6 +145,8 @@ shift $(($OPTIND - 1))
|
|||||||
|
|
||||||
[ "$AGENT_INIT" == "yes" -o "$AGENT_INIT" == "no" ] || die "AGENT_INIT($AGENT_INIT) is invalid (must be yes or no)"
|
[ "$AGENT_INIT" == "yes" -o "$AGENT_INIT" == "no" ] || die "AGENT_INIT($AGENT_INIT) is invalid (must be yes or no)"
|
||||||
|
|
||||||
|
[ -n "${KERNEL_MODULES_DIR}" ] && [ ! -d "${KERNEL_MODULES_DIR}" ] && die "KERNEL_MODULES_DIR defined but is not an existing directory"
|
||||||
|
|
||||||
distro="$1"
|
distro="$1"
|
||||||
init="${ROOTFS_DIR}/sbin/init"
|
init="${ROOTFS_DIR}/sbin/init"
|
||||||
|
|
||||||
@ -155,6 +171,9 @@ if [ -n "${USE_DOCKER}" ] ; then
|
|||||||
--build-arg https_proxy="${https_proxy}" \
|
--build-arg https_proxy="${https_proxy}" \
|
||||||
-t "${image_name}" "${distro_config_dir}"
|
-t "${image_name}" "${distro_config_dir}"
|
||||||
|
|
||||||
|
# fake mapping if KERNEL_MODULES_DIR is unset
|
||||||
|
kernel_mod_dir=${KERNEL_MODULES_DIR:-${ROOTFS_DIR}}
|
||||||
|
|
||||||
#Make sure we use a compatible runtime to build rootfs
|
#Make sure we use a compatible runtime to build rootfs
|
||||||
# In case Clear Containers Runtime is installed we dont want to hit issue:
|
# In case Clear Containers Runtime is installed we dont want to hit issue:
|
||||||
#https://github.com/clearcontainers/runtime/issues/828
|
#https://github.com/clearcontainers/runtime/issues/828
|
||||||
@ -168,8 +187,10 @@ if [ -n "${USE_DOCKER}" ] ; then
|
|||||||
--env AGENT_BIN="${AGENT_BIN}" \
|
--env AGENT_BIN="${AGENT_BIN}" \
|
||||||
--env AGENT_INIT="${AGENT_INIT}" \
|
--env AGENT_INIT="${AGENT_INIT}" \
|
||||||
--env GOPATH="${GOPATH}" \
|
--env GOPATH="${GOPATH}" \
|
||||||
|
--env KERNEL_MODULES_DIR="${KERNEL_MODULES_DIR}" \
|
||||||
-v "${script_dir}":"/osbuilder" \
|
-v "${script_dir}":"/osbuilder" \
|
||||||
-v "${ROOTFS_DIR}":"/rootfs" \
|
-v "${ROOTFS_DIR}":"/rootfs" \
|
||||||
|
-v "${kernel_mod_dir}":"${kernel_mod_dir}" \
|
||||||
-v "${GOPATH}":"${GOPATH}" \
|
-v "${GOPATH}":"${GOPATH}" \
|
||||||
${image_name} \
|
${image_name} \
|
||||||
bash /osbuilder/rootfs.sh "${distro}"
|
bash /osbuilder/rootfs.sh "${distro}"
|
||||||
@ -180,6 +201,8 @@ fi
|
|||||||
mkdir -p ${ROOTFS_DIR}
|
mkdir -p ${ROOTFS_DIR}
|
||||||
build_rootfs ${ROOTFS_DIR}
|
build_rootfs ${ROOTFS_DIR}
|
||||||
|
|
||||||
|
[ -n "${KERNEL_MODULES_DIR}" ] && copy_kernel_modules ${KERNEL_MODULES_DIR} ${ROOTFS_DIR}
|
||||||
|
|
||||||
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"
|
||||||
|
Loading…
Reference in New Issue
Block a user