From be1099b3e917059ca00f644e31a9ab549e01694b Mon Sep 17 00:00:00 2001 From: Drew Moseley Date: Thu, 10 Dec 2020 17:28:19 -0500 Subject: [PATCH] Use unique work directories when building with docker. This allows multiple builds to be run in parallel. Changelog: Title Signed-off-by: Drew Moseley --- .gitignore | 3 +-- README.md | 2 +- docker-mender-convert | 10 ++++++++++ logs/.gitkeep | 0 mender-convert | 10 +++++----- mender-convert-modify | 2 +- modules/log.sh | 2 +- work/.gitkeep | 0 8 files changed, 19 insertions(+), 10 deletions(-) create mode 100644 logs/.gitkeep mode change 100644 => 100755 modules/log.sh create mode 100644 work/.gitkeep diff --git a/.gitignore b/.gitignore index 9d66b62..7358430 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,7 @@ deploy input -work rootfs_overlay_demo/* mender_local_config *.xml *.html -convert.log +logs/convert.log* diff --git a/README.md b/README.md index cbb46f2..4a71ef5 100644 --- a/README.md +++ b/README.md @@ -116,7 +116,7 @@ MENDER_ARTIFACT_NAME=release-1 ./docker-mender-convert \ ``` Conversion will take 10-30 minutes, depending on image size and resources -available. You can watch `work/convert.log` for progress and diagnostics +available. You can watch `WORKDIR/convert.log` for progress and diagnostics information. After it finishes, you can find your images in the `deploy` directory on your diff --git a/docker-mender-convert b/docker-mender-convert index af18a95..15b7b79 100755 --- a/docker-mender-convert +++ b/docker-mender-convert @@ -25,13 +25,23 @@ MENDER_CONVERT_DIR="$(pwd)" #Pass in version in-case we are added as a git submodule MENDER_CONVERT_VERSION=$(git_mender_convert_version) +# Create a unique work directory so we can run multiple containers in parallel +WORK_DIR=$(mktemp -d -p $(pwd) -t work.XXXX) +WORK_SUFFIX=$(echo $WORK_DIR | awk -F. '{print $NF}') +LOG_FILE="convert.log.${WORK_SUFFIX}" + +set +e docker run \ --rm \ -v $MENDER_CONVERT_DIR:/mender-convert \ + -v $WORK_DIR:/mender-convert/work \ --privileged=true \ --cap-add=SYS_MODULE \ -v /dev:/dev \ -v /lib/modules:/lib/modules:ro \ --env MENDER_ARTIFACT_NAME=${MENDER_ARTIFACT_NAME} \ --env MENDER_CONVERT_VERSION=${MENDER_CONVERT_VERSION} \ + --env MENDER_CONVERT_LOG_FILE=logs/${LOG_FILE} \ $IMAGE_NAME "$@" + +[ $? -eq 0 ] && rmdir ${WORK_DIR} diff --git a/logs/.gitkeep b/logs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mender-convert b/mender-convert index 09cbfaf..375bc4d 100755 --- a/mender-convert +++ b/mender-convert @@ -18,8 +18,9 @@ source modules/bootstrap.sh source modules/cliparser.sh source modules/decompressinput.sh -mkdir -p work -touch work/convert.log +export MENDER_CONVERT_LOG_FILE=$(pwd)/${MENDER_CONVERT_LOG_FILE:-logs/convert.log} +touch ${MENDER_CONVERT_LOG_FILE} +chown -R --reference=. ${MENDER_CONVERT_LOG_FILE} ############################################################################### # Declaration of important variables for this file # @@ -66,11 +67,10 @@ function trap_exit() { EXIT_CODE=$? if [[ ${EXIT_CODE} -ne 0 && ${EXIT_CODE} -ne ${FATAL_EXIT_CODE} ]]; then log_error "mender-convert failed" - [ -e work/convert.log ] && tac work/convert.log | sed '/DEBUG/q' | tac | sed 's/Running/When running/' + [ -e ${MENDER_CONVERT_LOG_FILE} ] && tac ${MENDER_CONVERT_LOG_FILE} | sed '/DEBUG/q' | tac | sed 's/Running/When running/' log_error "mender-convert exit code: ${EXIT_CODE}" fi - mv work/convert.log convert.log - sudo rm -rf work + sudo rm -rf work/* } function trap_term() { diff --git a/mender-convert-modify b/mender-convert-modify index 68378cc..c68c7a4 100755 --- a/mender-convert-modify +++ b/mender-convert-modify @@ -279,7 +279,7 @@ esac run_and_log_cmd "sudo mkdir -p work/rootfs/etc/mender/scripts/" run_and_log_cmd "echo -n ${VERSION_STRING} | sudo tee work/rootfs/etc/mender/scripts/version" -log_info "Installing a custom /etc/fstab (see work/convert.log for more info)" +log_info "Installing a custom /etc/fstab (see ${MENDER_CONVERT_LOG_FILE} for more info)" if [ "${MENDER_GRUB_EFI_INTEGRATION}" == "y" ]; then boot_part_mountpoint="/boot/efi" diff --git a/modules/log.sh b/modules/log.sh old mode 100644 new mode 100755 index 271fc4d..00adc8c --- a/modules/log.sh +++ b/modules/log.sh @@ -16,7 +16,7 @@ # This must be an absolute path, as users might call the log functions # from sub-directories -log_file="${PWD}/work/convert.log" +log_file="${MENDER_CONVERT_LOG_FILE:-${PWD}/work/convert.log}" # Add some colour to the log messages diff --git a/work/.gitkeep b/work/.gitkeep new file mode 100644 index 0000000..e69de29