1*62c56f98SSadaf Ebrahimi#!/bin/bash -eu 2*62c56f98SSadaf Ebrahimi 3*62c56f98SSadaf Ebrahimi# docker_env.sh 4*62c56f98SSadaf Ebrahimi# 5*62c56f98SSadaf Ebrahimi# Purpose 6*62c56f98SSadaf Ebrahimi# ------- 7*62c56f98SSadaf Ebrahimi# 8*62c56f98SSadaf Ebrahimi# This is a helper script to enable running tests under a Docker container, 9*62c56f98SSadaf Ebrahimi# thus making it easier to get set up as well as isolating test dependencies 10*62c56f98SSadaf Ebrahimi# (which include legacy/insecure configurations of openssl and gnutls). 11*62c56f98SSadaf Ebrahimi# 12*62c56f98SSadaf Ebrahimi# WARNING: the Dockerfile used by this script is no longer maintained! See 13*62c56f98SSadaf Ebrahimi# https://github.com/Mbed-TLS/mbedtls-test/blob/master/README.md#quick-start 14*62c56f98SSadaf Ebrahimi# for the set of Docker images we use on the CI. 15*62c56f98SSadaf Ebrahimi# 16*62c56f98SSadaf Ebrahimi# Notes for users 17*62c56f98SSadaf Ebrahimi# --------------- 18*62c56f98SSadaf Ebrahimi# This script expects a Linux x86_64 system with a recent version of Docker 19*62c56f98SSadaf Ebrahimi# installed and available for use, as well as http/https access. If a proxy 20*62c56f98SSadaf Ebrahimi# server must be used, invoke this script with the usual environment variables 21*62c56f98SSadaf Ebrahimi# (http_proxy and https_proxy) set appropriately. If an alternate Docker 22*62c56f98SSadaf Ebrahimi# registry is needed, specify MBEDTLS_DOCKER_REGISTRY to point at the 23*62c56f98SSadaf Ebrahimi# host name. 24*62c56f98SSadaf Ebrahimi# 25*62c56f98SSadaf Ebrahimi# 26*62c56f98SSadaf Ebrahimi# Running this script directly will check for Docker availability and set up 27*62c56f98SSadaf Ebrahimi# the Docker image. 28*62c56f98SSadaf Ebrahimi 29*62c56f98SSadaf Ebrahimi# Copyright The Mbed TLS Contributors 30*62c56f98SSadaf Ebrahimi# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 31*62c56f98SSadaf Ebrahimi 32*62c56f98SSadaf Ebrahimi 33*62c56f98SSadaf Ebrahimi# default values, can be overridden by the environment 34*62c56f98SSadaf Ebrahimi: ${MBEDTLS_DOCKER_GUEST:=bionic} 35*62c56f98SSadaf Ebrahimi 36*62c56f98SSadaf Ebrahimi 37*62c56f98SSadaf EbrahimiDOCKER_IMAGE_TAG="armmbed/mbedtls-test:${MBEDTLS_DOCKER_GUEST}" 38*62c56f98SSadaf Ebrahimi 39*62c56f98SSadaf Ebrahimi# Make sure docker is available 40*62c56f98SSadaf Ebrahimiif ! which docker > /dev/null; then 41*62c56f98SSadaf Ebrahimi echo "Docker is required but doesn't seem to be installed. See https://www.docker.com/ to get started" 42*62c56f98SSadaf Ebrahimi exit 1 43*62c56f98SSadaf Ebrahimifi 44*62c56f98SSadaf Ebrahimi 45*62c56f98SSadaf Ebrahimi# Figure out if we need to 'sudo docker' 46*62c56f98SSadaf Ebrahimiif groups | grep docker > /dev/null; then 47*62c56f98SSadaf Ebrahimi DOCKER="docker" 48*62c56f98SSadaf Ebrahimielse 49*62c56f98SSadaf Ebrahimi echo "Using sudo to invoke docker since you're not a member of the docker group..." 50*62c56f98SSadaf Ebrahimi DOCKER="sudo docker" 51*62c56f98SSadaf Ebrahimifi 52*62c56f98SSadaf Ebrahimi 53*62c56f98SSadaf Ebrahimi# Figure out the number of processors available 54*62c56f98SSadaf Ebrahimiif [ "$(uname)" == "Darwin" ]; then 55*62c56f98SSadaf Ebrahimi NUM_PROC="$(sysctl -n hw.logicalcpu)" 56*62c56f98SSadaf Ebrahimielse 57*62c56f98SSadaf Ebrahimi NUM_PROC="$(nproc)" 58*62c56f98SSadaf Ebrahimifi 59*62c56f98SSadaf Ebrahimi 60*62c56f98SSadaf Ebrahimi# Build the Docker image 61*62c56f98SSadaf Ebrahimiecho "Getting docker image up to date (this may take a few minutes)..." 62*62c56f98SSadaf Ebrahimi${DOCKER} image build \ 63*62c56f98SSadaf Ebrahimi -t ${DOCKER_IMAGE_TAG} \ 64*62c56f98SSadaf Ebrahimi --cache-from=${DOCKER_IMAGE_TAG} \ 65*62c56f98SSadaf Ebrahimi --build-arg MAKEFLAGS_PARALLEL="-j ${NUM_PROC}" \ 66*62c56f98SSadaf Ebrahimi --network host \ 67*62c56f98SSadaf Ebrahimi ${http_proxy+--build-arg http_proxy=${http_proxy}} \ 68*62c56f98SSadaf Ebrahimi ${https_proxy+--build-arg https_proxy=${https_proxy}} \ 69*62c56f98SSadaf Ebrahimi ${MBEDTLS_DOCKER_REGISTRY+--build-arg MY_REGISTRY="${MBEDTLS_DOCKER_REGISTRY}/"} \ 70*62c56f98SSadaf Ebrahimi tests/docker/${MBEDTLS_DOCKER_GUEST} 71*62c56f98SSadaf Ebrahimi 72*62c56f98SSadaf Ebrahimirun_in_docker() 73*62c56f98SSadaf Ebrahimi{ 74*62c56f98SSadaf Ebrahimi ENV_ARGS="" 75*62c56f98SSadaf Ebrahimi while [ "$1" == "-e" ]; do 76*62c56f98SSadaf Ebrahimi ENV_ARGS="${ENV_ARGS} $1 $2" 77*62c56f98SSadaf Ebrahimi shift 2 78*62c56f98SSadaf Ebrahimi done 79*62c56f98SSadaf Ebrahimi 80*62c56f98SSadaf Ebrahimi ${DOCKER} container run -it --rm \ 81*62c56f98SSadaf Ebrahimi --cap-add SYS_PTRACE \ 82*62c56f98SSadaf Ebrahimi --user "$(id -u):$(id -g)" \ 83*62c56f98SSadaf Ebrahimi --volume $PWD:$PWD \ 84*62c56f98SSadaf Ebrahimi --workdir $PWD \ 85*62c56f98SSadaf Ebrahimi -e MAKEFLAGS \ 86*62c56f98SSadaf Ebrahimi -e PYLINTHOME=/tmp/.pylintd \ 87*62c56f98SSadaf Ebrahimi ${ENV_ARGS} \ 88*62c56f98SSadaf Ebrahimi ${DOCKER_IMAGE_TAG} \ 89*62c56f98SSadaf Ebrahimi $@ 90*62c56f98SSadaf Ebrahimi} 91