1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
#!/usr/bin/env bash
trap 'exit 1' TERM KILL INT QUIT ABRT
: ${DOCKER:=$(command -v podman || command -v docker)}
build() {
OS=${1:-alma9}
[[ -f xrootd.tar.gz ]] || package
[[ -f Dockerfile.${OS} ]] || die "unknwon OS: $OS"
${DOCKER} build -f Dockerfile.${OS} -t xrootd -t xrootd:${OS} .
}
buildx() {
OS=${1:-fedora}
ARCH=${2:-amd64}
ARCH=${ARCH/linux\/}
[[ -f xrootd.tar.gz ]] || package
[[ -f Dockerfile.${OS} ]] || die "unknwon OS: $OS"
${DOCKER} buildx build --platform linux/${ARCH} -f Dockerfile.${OS} -t xrootd:${OS}-${ARCH/\/} .
}
qemu() {
${DOCKER} run --rm --privileged multiarch/qemu-user-static --reset -p yes
}
clean() {
rm -f xrootd.tar.gz
}
die() {
echo "$(basename $BASH_ARGV0): error: $@"
exit 1
}
package() {
REPODIR=$(git rev-parse --show-toplevel)
VERSION=$(git describe ${1:-HEAD})
echo Creating tarball for XRootD ${VERSION}
pushd ${REPODIR} >/dev/null
git archive --prefix=xrootd/ -o xrootd.tar.gz ${1:-HEAD}
popd >/dev/null
mv ${REPODIR}/xrootd.tar.gz .
}
usage() {
echo $(basename $BASH_ARGV0) [COMMAND] [ARGS]
echo
echo COMMANDS:
echo
echo " clean -- remove tarball created by package command"
echo " package [VERSION] -- create xrootd.tar.gz tarball (VERSION=HEAD by default)"
echo " build [OS] -- build docker image based on OS: alma8, alma9 (default), fedora, debian, ubuntu"
echo " buildx [OS] [ARCH] -- cross-build docker image based on OS/ARCH pair. Supported architectures"
echo " are amd64, aarch64, ppc64le, s390x (big-endian). Default OS is fedora."
echo " You can see supported platforms with docker buildx inspect --bootstrap."
echo " qemu -- setup QEMU to be able to run cross-builds with buildx command."
echo
echo " Note: The test suite runs automatically during the container builds"
echo
}
[[ $# == 0 ]] && usage && exit 0
CMD=$1
shift
[[ $(type -t ${CMD}) == "function" ]] || die "unknown command: ${CMD}"
cd $(dirname "${BASH_SOURCE[0]}") || die "cannot change directory"
$CMD $@
|