mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
Right now only docker is supported, when using the containerize script for building inside containers. Enable podman as well. Note that podman can be use in rootless mode too, but for that to work the files /etc/subuid and /etc/subgid must be properly configured. For instance: dario@localhost> cat /etc/subuid dario:100000:65536 dario@localhost:> cat /etc/subgid dario:100000:65536 Signed-off-by: Dario Faggioli <dfaggioli@suse.com> Acked-by: Wei Liu <wl@xen.org> Release-acked-by: Paul Durrant <paul@xen.org>
106 lines
3.0 KiB
Bash
Executable File
106 lines
3.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#
|
|
# DOCKER_CMD should be either `docker` or `podman`.
|
|
#
|
|
# if using (rootless) podman, remember to set /etc/subuid
|
|
# and /etc/subgid.
|
|
#
|
|
docker_cmd=${DOCKER_CMD:-"docker"}
|
|
[ "$DOCKER_CMD" = "podman" ] && userns_podman="--userns=keep-id"
|
|
|
|
einfo() {
|
|
echo "$*" >&2
|
|
}
|
|
|
|
die() {
|
|
echo "$*" >&2
|
|
exit 1
|
|
}
|
|
|
|
#
|
|
# The caller is expected to override the CONTAINER environment
|
|
# variable with the container they wish to launch.
|
|
#
|
|
BASE="registry.gitlab.com/xen-project/xen"
|
|
case "_${CONTAINER}" in
|
|
_archlinux|_arch) CONTAINER="${BASE}/archlinux:current" ;;
|
|
_centos6) CONTAINER="${BASE}/centos:6" ;;
|
|
_centos7) CONTAINER="${BASE}/centos:7" ;;
|
|
_centos72) CONTAINER="${BASE}/centos:7.2" ;;
|
|
_fedora) CONTAINER="${BASE}/fedora:29";;
|
|
_jessie) CONTAINER="${BASE}/debian:jessie" ;;
|
|
_stretch|_) CONTAINER="${BASE}/debian:stretch" ;;
|
|
_unstable|_) CONTAINER="${BASE}/debian:unstable" ;;
|
|
_trusty) CONTAINER="${BASE}/ubuntu:trusty" ;;
|
|
_xenial) CONTAINER="${BASE}/ubuntu:xenial" ;;
|
|
_opensuse-leap|_leap) CONTAINER="${BASE}/suse:opensuse-leap" ;;
|
|
_opensuse-tumbleweed|_tumbleweed) CONTAINER="${BASE}/suse:opensuse-tumbleweed" ;;
|
|
esac
|
|
|
|
# Use this variable to control whether root should be used
|
|
case "_${CONTAINER_UID0}" in
|
|
_1) userarg= ;;
|
|
_0|_) userarg="-u $(id -u) $userns_podman" ;;
|
|
esac
|
|
|
|
# Save the commands for future use
|
|
cmd=$@
|
|
|
|
# If no command was specified, just drop us into a shell if we're interactive
|
|
[ $# -eq 0 ] && tty -s && cmd="/bin/bash"
|
|
|
|
# Are we in an interactive terminal?
|
|
tty -s && termint=t
|
|
|
|
#
|
|
# Fetch the latest version of the container in hub.docker.com,
|
|
# unless it's a newly created local copy.
|
|
#
|
|
if [[ "_${CONTAINER_NO_PULL}" != "_1" ]]; then
|
|
einfo "*** Ensuring ${CONTAINER} is up to date"
|
|
${docker_cmd} pull ${CONTAINER} > /dev/null || \
|
|
die "Failed to update container"
|
|
fi
|
|
|
|
if hash greadlink > /dev/null 2>&1; then
|
|
READLINK=greadlink
|
|
elif [[ $(uname -s) == "Darwin" ]]; then
|
|
echo "Unable to forward SSH agent without coreutils installed"
|
|
unset SSH_AUTH_SOCK
|
|
else
|
|
READLINK=readlink
|
|
fi
|
|
|
|
# Ensure we've got what we need for SSH_AUTH_SOCK
|
|
if [[ -n ${SSH_AUTH_SOCK} ]]; then
|
|
fullpath_sock=$(${READLINK} -f ${SSH_AUTH_SOCK} 2> /dev/null)
|
|
if [ $? -ne 0 ]; then
|
|
echo "Invalid SSH_AUTH_SOCK: ${SSH_AUTH_SOCK}"
|
|
unset SSH_AUTH_SOCK
|
|
else
|
|
SSH_AUTH_DIR=$(dirname ${fullpath_sock})
|
|
SSH_AUTH_NAME=$(basename ${fullpath_sock})
|
|
fi
|
|
fi
|
|
|
|
# Figure out the base of what we want as our sources
|
|
# by using the top of the git repo
|
|
if [[ -z ${CONTAINER_PATH} ]]; then
|
|
CONTAINER_PATH=$(git rev-parse --show-toplevel)
|
|
fi
|
|
|
|
# Kick off Docker
|
|
einfo "*** Launching container ..."
|
|
exec ${docker_cmd} run \
|
|
${userarg} \
|
|
${SSH_AUTH_SOCK:+-e SSH_AUTH_SOCK="/tmp/ssh-agent/${SSH_AUTH_NAME}"} \
|
|
-v "${CONTAINER_PATH}":/build:rw \
|
|
-v "${HOME}/.ssh":/root/.ssh:ro \
|
|
${SSH_AUTH_DIR:+-v "${SSH_AUTH_DIR}":/tmp/ssh-agent} \
|
|
${XEN_CONFIG_EXPERT:+-e XEN_CONFIG_EXPERT=${XEN_CONFIG_EXPERT}} \
|
|
${CONTAINER_ARGS} \
|
|
-${termint}i --rm -- \
|
|
${CONTAINER} \
|
|
${cmd}
|