Files
scylladb/tools/toolchain/prepare
Avi Kivity 65720bcfd1 tools: toolchain: prepare: sqush intermediate container layers
Without this, the image contains awkward container layers with one
file (from the ADD commands). It's not a disaster, just pointless.
2022-04-10 19:00:36 +03:00

76 lines
1.7 KiB
Bash
Executable File

#!/bin/bash -e
bv=$(buildah --version)
if (( $? != 0 )); then
echo install buildah 1.19.3 or later
exit 1
fi
# translate to array of version components
bv="${bv#buildah version }"
bv="${bv% (*}"
bv=(${bv//./ })
maj=${bv[0]}
min=${bv[1]}
patch=${bv[2]}
ok=$(( maj > 1 || ( maj == 1 && min > 19 ) || ( maj == 1 && min == 19 && patch >= 3 ) ))
if (( ! ok )); then
echo install buildah 1.19.3 or later
exit 1
fi
archs=(amd64 arm64 s390x)
# docker arch has a diffrent spelling than uname arch
arch_uname_amd64=x86_64
arch_uname_arm64=aarch64
arch_uname_s390x=s390x
for arch in "${archs[@]}"; do
# translate from docker arch to uname arch
indirect="arch_uname_${arch}"
arch_uname="${!indirect}"
if [[ "$(uname -m)" == "${arch_uname}" ]]; then
continue
fi
if [[ ! -f /proc/sys/fs/binfmt_misc/qemu-"${arch_uname}" ]]; then
echo install qemu-user-static
exit 1
fi
done
buildah manifest create "$(<tools/toolchain/image)"
build_arch() {
local arch="$1"
image_id_file="$(mktemp)"
buildah bud --arch="$arch" --squash --no-cache --pull -f tools/toolchain/Dockerfile --iidfile "$image_id_file"
buildah manifest add --all "$(<tools/toolchain/image)" "$(<$image_id_file)"
rm "$image_id_file"
}
for arch in "${archs[@]}"; do
build_arch "$arch" &
done
fails=0
for arch in "${archs[@]}"; do
if ! wait -n; then
(( fails += 1 ))
fi
done
if (( fails > 0 )); then
echo "$fails failures building arch-specific images"
exit 1
fi
echo "Done building $(<tools/toolchain/image). You can now test it, and push with"
echo ""
echo " podman manifest push --all $(<tools/toolchain/image) docker://$(<tools/toolchain/image)"