From 5d9812e8410852cb60ff3611c67b2c20cf39f1ea Mon Sep 17 00:00:00 2001 From: romainx Date: Fri, 18 Dec 2020 10:55:58 +0100 Subject: [PATCH 1/4] polish get_qemu script --- scripts/get_qemu.sh | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/scripts/get_qemu.sh b/scripts/get_qemu.sh index 09e7e39f..ca78836b 100755 --- a/scripts/get_qemu.sh +++ b/scripts/get_qemu.sh @@ -1,30 +1,35 @@ #!/usr/bin/env bash +# Download and make qemu-user-static [1] executable in QEMU_DIR +# for various architectures (archs) +# [1]: https://github.com/multiarch/qemu-user-static/ +set -e CURRENT_DIR=$(pwd) -QEMU_STATIC_VERSION=v3.1.0-3 QEMU_DIR="./build/qemu/" +# qemu-user-static version and download URL +QEMU_STATIC_VERSION=v3.1.0-3 +QEMU_REL_URL="https://github.com/multiarch/qemu-user-static/releases/download" + +# Supported archs list +declare -a archs=("ppc64le" "aarch64" "arm" "x86_64") -qemu_ppc64le_sha256=d018b96e20f7aefbc50e6ba93b6cabfd53490cdf1c88b02e7d66716fa09a7a17 -qemu_aarch64_sha256=a64b39b8ce16e2285cb130bcba7143e6ad2fe19935401f01c38325febe64104b -qemu_arm_sha256=f4184c927f78d23d199056c5b0b6d75855e298410571d65582face3159117901 -qemu_x86_64_sha256=b9e444bf656c13a6db502f09e3135ef0c6045a117d5413662ba233d8b80f8fbd +# SHA256 of each architecture / archive: qemu-${arch}-static +ppc64le=d018b96e20f7aefbc50e6ba93b6cabfd53490cdf1c88b02e7d66716fa09a7a17 +aarch64=a64b39b8ce16e2285cb130bcba7143e6ad2fe19935401f01c38325febe64104b +arm=f4184c927f78d23d199056c5b0b6d75855e298410571d65582face3159117901 +x86_64=b9e444bf656c13a6db502f09e3135ef0c6045a117d5413662ba233d8b80f8fbd mkdir -p $QEMU_DIR/ cd $QEMU_DIR/ -wget https://github.com/multiarch/qemu-user-static/releases/download/${QEMU_STATIC_VERSION}/qemu-ppc64le-static -wget https://github.com/multiarch/qemu-user-static/releases/download/${QEMU_STATIC_VERSION}/qemu-aarch64-static -wget https://github.com/multiarch/qemu-user-static/releases/download/${QEMU_STATIC_VERSION}/qemu-arm-static -wget https://github.com/multiarch/qemu-user-static/releases/download/${QEMU_STATIC_VERSION}/qemu-x86_64-static - -sha256sum qemu-ppc64le-static | grep -F "${qemu_ppc64le_sha256}" -sha256sum qemu-aarch64-static | grep -F "${qemu_aarch64_sha256}" -sha256sum qemu-arm-static | grep -F "${qemu_aarch64_sha256}" -sha256sum qemu-x86_64-static | grep -F "${qemu_x86_64_sha256}" - -chmod +x qemu-ppc64le-static -chmod +x qemu-aarch64-static -chmod +x qemu-arm-static -chmod +x qemu-x86_64-static +for arch in "${archs[@]}"; do + echo "== qemu-user-static installation for ${arch} ==" + echo "- Dowloading ..." + wget --quiet "${QEMU_REL_URL}/${QEMU_STATIC_VERSION}/qemu-${arch}-static" + echo "- Verifying checksum ..." + echo "${!arch} qemu-${arch}-static" | sha256sum --check + echo "- Making it executable ..." + chmod +x "qemu-${arch}-static" +done cd $CURRENT_DIR From 1b4bda532a29912adf0e2819892f0aeeead03591 Mon Sep 17 00:00:00 2001 From: romainx Date: Fri, 18 Dec 2020 13:02:06 +0100 Subject: [PATCH 2/4] bump to qemu v5.1.0-7 --- scripts/get_qemu.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/scripts/get_qemu.sh b/scripts/get_qemu.sh index ca78836b..3c1eb032 100755 --- a/scripts/get_qemu.sh +++ b/scripts/get_qemu.sh @@ -7,23 +7,23 @@ set -e CURRENT_DIR=$(pwd) QEMU_DIR="./build/qemu/" # qemu-user-static version and download URL -QEMU_STATIC_VERSION=v3.1.0-3 +QEMU_STATIC_VERSION=v5.1.0-7 QEMU_REL_URL="https://github.com/multiarch/qemu-user-static/releases/download" # Supported archs list declare -a archs=("ppc64le" "aarch64" "arm" "x86_64") # SHA256 of each architecture / archive: qemu-${arch}-static -ppc64le=d018b96e20f7aefbc50e6ba93b6cabfd53490cdf1c88b02e7d66716fa09a7a17 -aarch64=a64b39b8ce16e2285cb130bcba7143e6ad2fe19935401f01c38325febe64104b -arm=f4184c927f78d23d199056c5b0b6d75855e298410571d65582face3159117901 -x86_64=b9e444bf656c13a6db502f09e3135ef0c6045a117d5413662ba233d8b80f8fbd +ppc64le=c850cb81287f9be43be181a6513803b03da5e1b76b9ab6d727566f1651889b37 +aarch64=06664613db8785b600412d63b572f31edeafe0c06b655d51d16a536d27cdf47b +arm=977cd7e1a1cdcf53b3873f2348423fa29de99db5fa2ee77b4491039ae7e0600a +x86_64=d753aa1904531e251443b887e47b7e415fb8a99334225911250bef4c8ae4bc4e mkdir -p $QEMU_DIR/ cd $QEMU_DIR/ for arch in "${archs[@]}"; do - echo "== qemu-user-static installation for ${arch} ==" + echo "<-- qemu-user-static installation for ${arch}" echo "- Dowloading ..." wget --quiet "${QEMU_REL_URL}/${QEMU_STATIC_VERSION}/qemu-${arch}-static" echo "- Verifying checksum ..." From 05172ef877cdf606ba16ebb4775085a4fe10f133 Mon Sep 17 00:00:00 2001 From: romainx Date: Fri, 18 Dec 2020 17:42:01 +0100 Subject: [PATCH 3/4] Use qemu-user-static in persistent mode Avoid unnecessary download of qemu and maintenance of the get_qemu.sh script. --- build_miniforge.sh | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/build_miniforge.sh b/build_miniforge.sh index d4f8d454..33f0ab1e 100755 --- a/build_miniforge.sh +++ b/build_miniforge.sh @@ -1,10 +1,13 @@ #!/usr/bin/env bash - +# Build miniforge installers for various architectures +# It uses the qemu-user-static [1] emulator to enable +# the use of containers images with different architectures than the host +# [1]: https://github.com/multiarch/qemu-user-static/ set -ex # Check parameters ARCH=${ARCH:-aarch64} -DOCKER_ARCH=${DOCKER_ARCH:arm64v8} +DOCKER_ARCH=${DOCKER_ARCH:-arm64v8} DOCKERIMAGE=${DOCKERIMAGE:-condaforge/linux-anvil-aarch64} export CONSTRUCT_ROOT=/construct @@ -13,18 +16,14 @@ mkdir -p build/ chmod 777 build/ echo "============= Enable QEMU =============" -docker run --rm --privileged multiarch/qemu-user-static:register --reset --credential yes +# Enable qemu in persistent mode +docker run --rm --privileged multiarch/qemu-user-static --reset --credential yes --persistent yes echo "============= Build the installer =============" docker run --rm -v $(pwd):/construct -e CONSTRUCT_ROOT -e MINIFORGE_VERSION -e MINIFORGE_NAME $DOCKERIMAGE /construct/scripts/build.sh -echo "============= Download QEMU static binaries =============" -bash scripts/get_qemu.sh - echo "============= Test the installer =============" -for TEST_IMAGE_NAME in "ubuntu:20.04" "ubuntu:19.10" "ubuntu:16.04" "ubuntu:18.04" "centos:7" "debian:buster" -do +for TEST_IMAGE_NAME in "ubuntu:20.04" "ubuntu:19.10" "ubuntu:16.04" "ubuntu:18.04" "centos:7" "debian:buster"; do echo "============= Test installer on $TEST_IMAGE_NAME =============" - docker run --rm -v $(pwd):/construct -e CONSTRUCT_ROOT -v $(pwd)/build/qemu/qemu-${ARCH}-static:/usr/bin/qemu-${ARCH}-static ${DOCKER_ARCH}/$TEST_IMAGE_NAME /construct/scripts/test.sh + docker run --rm -v $(pwd):/construct -e CONSTRUCT_ROOT ${DOCKER_ARCH}/$TEST_IMAGE_NAME /construct/scripts/test.sh done - From c3279688cd23dd3f08da9f98a52ce8ba30db5028 Mon Sep 17 00:00:00 2001 From: romainx Date: Mon, 21 Dec 2020 21:34:41 +0100 Subject: [PATCH 4/4] Remove get_qemu.sh Also quoted some variables. --- build_miniforge.sh | 17 ++++++++++++----- scripts/get_qemu.sh | 35 ----------------------------------- 2 files changed, 12 insertions(+), 40 deletions(-) delete mode 100755 scripts/get_qemu.sh diff --git a/build_miniforge.sh b/build_miniforge.sh index 33f0ab1e..d325a22c 100755 --- a/build_miniforge.sh +++ b/build_miniforge.sh @@ -1,8 +1,11 @@ #!/usr/bin/env bash -# Build miniforge installers for various architectures +# Build miniforge installers for Linux +# on various architectures (aarch64, x86_64, ppc64le) +# Notes: # It uses the qemu-user-static [1] emulator to enable # the use of containers images with different architectures than the host # [1]: https://github.com/multiarch/qemu-user-static/ +# See also: [setup-qemu-action](https://github.com/docker/setup-qemu-action) set -ex # Check parameters @@ -17,13 +20,17 @@ chmod 777 build/ echo "============= Enable QEMU =============" # Enable qemu in persistent mode -docker run --rm --privileged multiarch/qemu-user-static --reset --credential yes --persistent yes +docker run --rm --privileged multiarch/qemu-user-static \ + --reset --credential yes --persistent yes echo "============= Build the installer =============" -docker run --rm -v $(pwd):/construct -e CONSTRUCT_ROOT -e MINIFORGE_VERSION -e MINIFORGE_NAME $DOCKERIMAGE /construct/scripts/build.sh +docker run --rm -v "$(pwd):/construct" \ + -e CONSTRUCT_ROOT -e MINIFORGE_VERSION -e MINIFORGE_NAME \ + ${DOCKERIMAGE} /construct/scripts/build.sh echo "============= Test the installer =============" for TEST_IMAGE_NAME in "ubuntu:20.04" "ubuntu:19.10" "ubuntu:16.04" "ubuntu:18.04" "centos:7" "debian:buster"; do - echo "============= Test installer on $TEST_IMAGE_NAME =============" - docker run --rm -v $(pwd):/construct -e CONSTRUCT_ROOT ${DOCKER_ARCH}/$TEST_IMAGE_NAME /construct/scripts/test.sh + echo "============= Test installer on ${TEST_IMAGE_NAME} =============" + docker run --rm -v "$(pwd):/construct" -e CONSTRUCT_ROOT \ + "${DOCKER_ARCH}/${TEST_IMAGE_NAME}" /construct/scripts/test.sh done diff --git a/scripts/get_qemu.sh b/scripts/get_qemu.sh deleted file mode 100755 index 3c1eb032..00000000 --- a/scripts/get_qemu.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# Download and make qemu-user-static [1] executable in QEMU_DIR -# for various architectures (archs) -# [1]: https://github.com/multiarch/qemu-user-static/ -set -e - -CURRENT_DIR=$(pwd) -QEMU_DIR="./build/qemu/" -# qemu-user-static version and download URL -QEMU_STATIC_VERSION=v5.1.0-7 -QEMU_REL_URL="https://github.com/multiarch/qemu-user-static/releases/download" - -# Supported archs list -declare -a archs=("ppc64le" "aarch64" "arm" "x86_64") - -# SHA256 of each architecture / archive: qemu-${arch}-static -ppc64le=c850cb81287f9be43be181a6513803b03da5e1b76b9ab6d727566f1651889b37 -aarch64=06664613db8785b600412d63b572f31edeafe0c06b655d51d16a536d27cdf47b -arm=977cd7e1a1cdcf53b3873f2348423fa29de99db5fa2ee77b4491039ae7e0600a -x86_64=d753aa1904531e251443b887e47b7e415fb8a99334225911250bef4c8ae4bc4e - -mkdir -p $QEMU_DIR/ -cd $QEMU_DIR/ - -for arch in "${archs[@]}"; do - echo "<-- qemu-user-static installation for ${arch}" - echo "- Dowloading ..." - wget --quiet "${QEMU_REL_URL}/${QEMU_STATIC_VERSION}/qemu-${arch}-static" - echo "- Verifying checksum ..." - echo "${!arch} qemu-${arch}-static" | sha256sum --check - echo "- Making it executable ..." - chmod +x "qemu-${arch}-static" -done - -cd $CURRENT_DIR