From dae040172f5ffdc8daf602c2482c4dac598fd1bb Mon Sep 17 00:00:00 2001 From: Jonathan Bauer Date: Wed, 4 Sep 2019 10:55:36 +0200 Subject: [dnbd3-rootfs] add kernel qcow2 loop module build --- builder/modules.d/dnbd3-rootfs/helper/build.inc | 51 ++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/builder/modules.d/dnbd3-rootfs/helper/build.inc b/builder/modules.d/dnbd3-rootfs/helper/build.inc index 03c6b222..0a7d7a8c 100644 --- a/builder/modules.d/dnbd3-rootfs/helper/build.inc +++ b/builder/modules.d/dnbd3-rootfs/helper/build.inc @@ -45,7 +45,15 @@ initialize_components() { fi fi if [ -z "$qcow_handler" ] || [ "$qcow_handler" = "kernel" ]; then - # TODO check if the given kernel supports it, bail otherwise + if [ ! -f "${kernel_headers}/drivers/block/loop/loop.ko " ] \ + || [ ! -f "${kernel_headers}/drivers/block/loop/loop_file_fmt_qcow.ko " ] \ + || [ ! -f "${kernel_headers}/drivers/block/loop/loop_file_fmt_raw.ko " ]; then + logging.info "Could not find loop kernel modules, building them..." + if ! build_compile_kernel_qcow "$kernel_headers"; then + logging.error "Failed to build qcow loop kernel modules." + return 1 + fi + fi if [ ! -f "${_deps_base_dir}/kernel-qcow2-util-linux/losetup" ]; then logging.info "Could not find losetup with qcow2 support, building it..." if ! build_compile_losetup_qcow "${_deps_base_dir}/kernel-qcow2-util-linux"; then @@ -188,7 +196,46 @@ build_clean_dnbd3() { rm --recursive --force "$1/build" return $? } -# needs autopoint bison automake libtool +build_compile_kernel_qcow() { + pushd "$1" + # https://lab.ks.uni-freiburg.de/projects/kernel-qcow2/wiki + if [ -z "$kernel_headers" ]; then + logging.error "Kernel header directory not set, ignoring." + return 1 + fi + mkdir -p "${kernel_headers}/drivers/block/loop" + for _file in \ + include/uapi/linux/loop.h \ + drivers/block/Kconfig \ + drivers/block/loop/loop_main.h \ + drivers/block/loop/loop_file_fmt.h \ + drivers/block/loop/Kconfig; do + cp -f "${_file}" "${kernel_headers}/${_file}" + done + ( + set -o errexit + make -C "$kernel_headers" CONFIG_BLK_DEV_LOOP=m \ + M=$(pwd)/drivers/block/loop loop.ko + make -C "$kernel_headers" CONFIG_BLK_DEV_LOOP_FILE_FMT_RAW=m \ + M=$(pwd)/drivers/block/loop loop_file_fmt_raw.ko + make -C "$kernel_headers" CONFIG_BLK_DEV_LOOP_FILE_FMT_QCOW=m \ + M=$(pwd)/drivers/block/loop loop_file_fmt_qcow.ko + ) + local ret=$? + popd + return $ret +} +build_clean_kernel_qcow() { + if [ -z "$kernel_headers" ]; then + logging.error "Kernel header directory not set, ignoring." + return 1 + fi + pushd "$kernel_headers" + make -C "$kernel_headers" M=$(pwd)/drivers/block/loop clean + local ret=$? + popd + return $ret +} build_compile_losetup_qcow() { pushd "$1" ( -- cgit v1.2.3-55-g7522