#!/bin/bash set -e # Start a local schroot instance with the requested arch and distro # This script is meant to be executed from Jenkins jobs inside TCWG # lab. It prints shell commands meant to be executed in the parent # shell, consisting in: # - definition of ${CONTAINER}, used to prefix commands that you want # to run inside the container. # - definition of ${CONTAINER_CLEANUP}, a cleanup statement remove the # container on exit for instance # - definition of ${session_host} and ${session_port}, can be used for # a remote connexion to the container usage() { echo "Usage: $0 --arch container-arch --distro flavour [--session-host host] [--session-name name] [--task {build|test}]" echo echo " container-arch: architecture (eg: amd64, i386, arm64, armhf)" echo " distro: distribution (eg: trusty)" echo " session-host: hostname where the container will run, defaults to localhost" echo " useful if the name resolution does not work correctly" echo " session-name: session, in case the default '$BUILD_NUMBER-$JOB_NAME' is not suitable" echo " task: type of container (build or test, default=build)" exit 1 } # Save stdout/stderr file descriptors exec 3>&1 4>&2 # Make sure all output goes to stderr exec 1>&2 container_arch= distro= session_host= session_name= task="build" while [ $# -ge 1 ] do case $1 in --arch) container_arch=$2 [ x${container_arch} = x ] && usage shift 2 ;; --distro) distro=$2 [ x${distro} = x ] && usage shift 2 ;; --session-host) session_host=$2 [ x${session_host} = x ] && usage shift 2 ;; --session-name) session_name=$2 [ x${session_name} = x ] && usage shift 2 ;; --task) task=$2 [ x${task} = x ] && usage shift 2 ;; *) echo "Unsupported option: $1" usage ;; esac done [ x${container_arch} = x ] && usage [ x${distro} = x ] && usage [ x"$session_host" = x ] && session_host=localhost # Append .tcwglab if not already present case ${session_host} in *.tcwglab) ;; *) session_host=${session_host}.tcwglab esac session_port=22 schroot_image="tcwg-${task}-${container_arch}-${distro}" SCHROOT="ssh -p ${session_port} -A ${session_host} schroot" session_id=$(${SCHROOT} -b -c chroot:$schroot_image --preserve-environment) if [ x"$session_id" = x ]; then exit 1 fi # Restore stdout/stderr exec 1>&3 2>&4 cat <