#!/bin/bash -eu # docker_env.sh # # Purpose # ------- # # This is a helper script to enable running tests under a Docker container, # thus making it easier to get set up as well as isolating test dependencies # (which include legacy/insecure configurations of openssl and gnutls). # # Notes for users # --------------- # This script expects a Linux x86_64 system with a recent version of Docker # installed and available for use, as well as http/https access. If a proxy # server must be used, invoke this script with the usual environment variables # (http_proxy and https_proxy) set appropriately. If an alternate Docker # registry is needed, specify MBEDTLS_DOCKER_REGISTRY to point at the # host name. # # # Running this script directly will check for Docker availability and set up # the Docker image. # Copyright The Mbed TLS Contributors # SPDX-License-Identifier: Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # default values, can be overridden by the environment : ${MBEDTLS_DOCKER_GUEST:=bionic} DOCKER_IMAGE_TAG="armmbed/mbedtls-test:${MBEDTLS_DOCKER_GUEST}" # Make sure docker is available if ! which docker > /dev/null; then echo "Docker is required but doesn't seem to be installed. See https://www.docker.com/ to get started" exit 1 fi # Figure out if we need to 'sudo docker' if groups | grep docker > /dev/null; then DOCKER="docker" else echo "Using sudo to invoke docker since you're not a member of the docker group..." DOCKER="sudo docker" fi # Figure out the number of processors available if [ "$(uname)" == "Darwin" ]; then NUM_PROC="$(sysctl -n hw.logicalcpu)" else NUM_PROC="$(nproc)" fi # Build the Docker image echo "Getting docker image up to date (this may take a few minutes)..." ${DOCKER} image build \ -t ${DOCKER_IMAGE_TAG} \ --cache-from=${DOCKER_IMAGE_TAG} \ --build-arg MAKEFLAGS_PARALLEL="-j ${NUM_PROC}" \ --network host \ ${http_proxy+--build-arg http_proxy=${http_proxy}} \ ${https_proxy+--build-arg https_proxy=${https_proxy}} \ ${MBEDTLS_DOCKER_REGISTRY+--build-arg MY_REGISTRY="${MBEDTLS_DOCKER_REGISTRY}/"} \ tests/docker/${MBEDTLS_DOCKER_GUEST} run_in_docker() { ENV_ARGS="" while [ "$1" == "-e" ]; do ENV_ARGS="${ENV_ARGS} $1 $2" shift 2 done ${DOCKER} container run -it --rm \ --cap-add SYS_PTRACE \ --user "$(id -u):$(id -g)" \ --volume $PWD:$PWD \ --workdir $PWD \ -e MAKEFLAGS \ -e PYLINTHOME=/tmp/.pylintd \ ${ENV_ARGS} \ ${DOCKER_IMAGE_TAG} \ $@ }