xref: /aosp_15_r20/external/mbedtls/tests/scripts/docker_env.sh (revision 62c56f9862f102b96d72393aff6076c951fb8148)
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