blob: 49fa9851e2f001c7135d95b853c26dd6c175b3b2 [file] [log] [blame]
Andrew Geissler0205e8d2016-08-10 07:46:19 -05001#!/bin/bash -xe
2#
3# Build the required docker image to run QEMU and Robot test cases
Lei YUba111ab2020-05-12 19:57:56 +08004
5# Script Variables:
6# UBUNTU_MIRROR: <optional, the URL of a mirror of Ubuntu to override the
7# default ones in /etc/apt/sources.list>
8# default is empty, and no mirror is used.
Lei YU51b6aec2020-05-13 11:32:03 +08009# PIP_MIRROR: <optional, the URL of a PIP mirror>
10# default is empty, and no mirror is used.
Andrew Geissler0205e8d2016-08-10 07:46:19 -050011#
12# Parameters:
13# parm1: <optional, the name of the docker image to generate>
14# default is openbmc/ubuntu-robot-qemu
Andrew Geissler8b8333b2018-05-29 13:51:58 -050015# param2: <optional, the distro to build a docker image against>
Andrew Geissler0205e8d2016-08-10 07:46:19 -050016
17set -uo pipefail
18
Lei YUd3748742020-05-12 19:34:26 +080019http_proxy=${http_proxy:-}
20
Andrew Geissler0205e8d2016-08-10 07:46:19 -050021DOCKER_IMG_NAME=${1:-"openbmc/ubuntu-robot-qemu"}
Nan Zhou86ae1352022-06-27 22:30:55 +000022DISTRO=${2:-"ubuntu:jammy"}
Lei YUba111ab2020-05-12 19:57:56 +080023UBUNTU_MIRROR=${UBUNTU_MIRROR:-""}
Lei YU51b6aec2020-05-13 11:32:03 +080024PIP_MIRROR=${PIP_MIRROR:-""}
Andrew Geissler0205e8d2016-08-10 07:46:19 -050025
Lei YUba111ab2020-05-12 19:57:56 +080026MIRROR=""
27if [[ -n "${UBUNTU_MIRROR}" ]]; then
28 MIRROR="RUN echo \"deb ${UBUNTU_MIRROR} \$(. /etc/os-release && echo \$VERSION_CODENAME) main restricted universe multiverse\" > /etc/apt/sources.list && \
29 echo \"deb ${UBUNTU_MIRROR} \$(. /etc/os-release && echo \$VERSION_CODENAME)-updates main restricted universe multiverse\" >> /etc/apt/sources.list && \
30 echo \"deb ${UBUNTU_MIRROR} \$(. /etc/os-release && echo \$VERSION_CODENAME)-security main restricted universe multiverse\" >> /etc/apt/sources.list && \
31 echo \"deb ${UBUNTU_MIRROR} \$(. /etc/os-release && echo \$VERSION_CODENAME)-proposed main restricted universe multiverse\" >> /etc/apt/sources.list && \
32 echo \"deb ${UBUNTU_MIRROR} \$(. /etc/os-release && echo \$VERSION_CODENAME)-backports main restricted universe multiverse\" >> /etc/apt/sources.list"
33fi
34
Lei YU51b6aec2020-05-13 11:32:03 +080035PIP_MIRROR_CMD=""
36if [[ -n "${PIP_MIRROR}" ]]; then
Patrick Williams384d7412020-11-06 16:15:41 -060037 PIP_HOSTNAME=$(echo "${PIP_MIRROR}" | awk -F[/:] '{print $4}')
Lei YU51b6aec2020-05-13 11:32:03 +080038 PIP_MIRROR_CMD="RUN mkdir -p \${HOME}/.pip && \
39 echo \"[global]\" > \${HOME}/.pip/pip.conf && \
40 echo \"index-url=${PIP_MIRROR}\" >> \${HOME}/.pip/pip.conf &&\
41 echo \"[install]\" >> \${HOME}/.pip/pip.conf &&\
42 echo \"trusted-host=${PIP_HOSTNAME}\" >> \${HOME}/.pip/pip.conf"
43fi
44
Andrew Geissler0205e8d2016-08-10 07:46:19 -050045################################# docker img # #################################
46# Create docker image that can run QEMU and Robot Tests
47Dockerfile=$(cat << EOF
Andrew Geissler9096c692024-10-02 16:36:17 -040048FROM ${DISTRO}
Andrew Geissler0205e8d2016-08-10 07:46:19 -050049
Lei YUba111ab2020-05-12 19:57:56 +080050${MIRROR}
51
Lei YU51b6aec2020-05-13 11:32:03 +080052ARG DEBIAN_FRONTEND=noninteractive
Andrew Geissler0205e8d2016-08-10 07:46:19 -050053
54RUN apt-get update && apt-get install -yy \
55 debianutils \
56 gawk \
57 git \
Nan Zhou86ae1352022-06-27 22:30:55 +000058 python2 \
59 python2-dev \
Andrew Geissler0205e8d2016-08-10 07:46:19 -050060 python-setuptools \
Saqib Khan362ca852017-03-21 10:48:46 -050061 python3 \
62 python3-dev \
63 python3-setuptools \
Andrew Geissler0205e8d2016-08-10 07:46:19 -050064 socat \
65 texinfo \
66 wget \
67 gcc \
68 libffi-dev \
69 libssl-dev \
70 xterm \
71 mwm \
72 ssh \
73 vim \
74 iputils-ping \
75 sudo \
76 cpio \
77 unzip \
78 diffstat \
79 expect \
Rahul Maheshwari6b9bb1e2017-03-13 06:56:12 -050080 curl \
Andrew Geissler7a88f292018-01-04 15:16:02 -060081 build-essential \
Rahul Maheshwari3eafe342024-02-14 02:58:23 -060082 libdbus-glib-1-2 \
Andrew Geissler7a88f292018-01-04 15:16:02 -060083 libpixman-1-0 \
Michael Walshf1e83762018-03-28 15:51:43 -050084 libglib2.0-0 \
Andrew Jeffery6ba68142018-04-05 13:30:52 +093085 sshpass \
86 libasound2 \
87 libfdt1 \
Rahul Maheshwari7285ddb2018-09-20 00:01:40 -050088 libpcre3 \
Andrew Geissler851eaff2022-12-22 09:47:54 -060089 libslirp-dev \
George Keishingb76c0b62019-02-25 13:16:52 -060090 openssl \
91 libxml2-dev \
George Keishing26dd8e12019-02-26 12:31:11 -060092 libxslt-dev \
Andrew Geisslercd1b0ac2019-05-30 11:18:45 -050093 python3-pip \
Anusha Dathatri39b62802019-12-18 04:01:45 -060094 ipmitool \
Andrew Geissler6ddfc292021-02-23 18:46:17 -060095 xvfb \
96 rustc
Anusha Dathatri39b62802019-12-18 04:01:45 -060097
98RUN apt-get update -qqy \
99 && apt-get -qqy --no-install-recommends install firefox \
Rahul Maheshwari744b3bb2023-09-20 10:12:47 -0500100 && wget --no-verbose -O /tmp/firefox.tar.bz2 https://download-installer.cdn.mozilla.net/pub/firefox/releases/112.0.2/linux-x86_64/en-US/firefox-112.0.2.tar.bz2 \
Anusha Dathatri39b62802019-12-18 04:01:45 -0600101 && apt-get -y purge firefox \
102 && tar -C /opt -xjf /tmp/firefox.tar.bz2 \
Rahul Maheshwari744b3bb2023-09-20 10:12:47 -0500103 && mv /opt/firefox /opt/firefox-112.0.2 \
104 && ln -fs /opt/firefox-112.0.2/firefox /usr/bin/firefox
Andrew Geissler0205e8d2016-08-10 07:46:19 -0500105
Lei YU51b6aec2020-05-13 11:32:03 +0800106ENV HOME ${HOME}
107
108${PIP_MIRROR_CMD}
109
Andrew Geisslercd1b0ac2019-05-30 11:18:45 -0500110RUN pip3 install \
Andrew Geissler0205e8d2016-08-10 07:46:19 -0500111 tox \
Andrew Geisslercd1b0ac2019-05-30 11:18:45 -0500112 requests \
Michael Sheposa4d6d3d2019-08-15 17:11:56 -0500113 retrying \
Matthew Barth04881eb2019-09-30 13:28:18 -0500114 websocket-client \
Alanny Lopez8594e432017-05-17 15:42:59 -0500115 json2yaml \
George Keishing22de2382024-09-09 20:27:09 +0530116 robotframework==7.0.1 \
George Keishing09dcd892022-08-02 08:12:15 -0500117 robotframework-requests \
118 robotframework-jsonlibrary \
Andrew Geissler0205e8d2016-08-10 07:46:19 -0500119 robotframework-sshlibrary \
Sunil M55d0d752018-03-22 07:04:17 -0500120 robotframework-scplibrary \
George Keishing0e5dd8a2018-12-02 23:17:59 -0600121 pysnmp \
Jian Zhang8b362562022-09-22 21:21:15 +0800122 redfish>=3.1.7 \
George Keishing26dd8e12019-02-26 12:31:11 -0600123 beautifulsoup4 --upgrade \
George Keishing882254f2019-03-05 13:55:29 -0600124 lxml \
George Keishing428553d2019-04-02 10:04:11 -0500125 jsonschema \
George Keishingae29c892019-10-04 10:49:03 -0500126 redfishtool \
Anusha Dathatri39b62802019-12-18 04:01:45 -0600127 redfish_utilities \
128 robotframework-httplibrary \
Rahul Maheshwari744b3bb2023-09-20 10:12:47 -0500129 robotframework-seleniumlibrary==6.0.0 \
130 robotframework-xvfb==1.2.2 \
Anusha Dathatri39b62802019-12-18 04:01:45 -0600131 robotframework-angularjs \
132 scp \
Rahul Maheshwari744b3bb2023-09-20 10:12:47 -0500133 selenium==4.8.2 \
Anusha Dathatri39b62802019-12-18 04:01:45 -0600134 urllib3 \
George Keishing092ec342021-08-04 01:01:51 -0500135 click \
Rahul Maheshwari744b3bb2023-09-20 10:12:47 -0500136 xvfbwrapper==0.2.9
Anusha Dathatri39b62802019-12-18 04:01:45 -0600137
Rahul Maheshwari744b3bb2023-09-20 10:12:47 -0500138RUN wget https://github.com/mozilla/geckodriver/releases/download/v0.32.2/geckodriver-v0.32.2-linux64.tar.gz \
Anusha Dathatri39b62802019-12-18 04:01:45 -0600139 && tar xvzf geckodriver-*.tar.gz \
140 && mv geckodriver /usr/local/bin \
141 && chmod a+x /usr/local/bin/geckodriver
Andrew Geissler0205e8d2016-08-10 07:46:19 -0500142
Patrick Williams384d7412020-11-06 16:15:41 -0600143RUN grep -q ${GROUPS[0]} /etc/group || groupadd -g ${GROUPS[0]} ${USER}
Nan Zhouc2796fe2022-01-28 21:28:00 +0000144RUN grep -q ${UID} /etc/passwd || useradd -d ${HOME} -l -m -u ${UID} -g ${GROUPS[0]} \
Andrew Geissler0205e8d2016-08-10 07:46:19 -0500145 ${USER}
146USER ${USER}
Andrew Geissler0205e8d2016-08-10 07:46:19 -0500147RUN /bin/bash
148EOF
149)
150
151################################# docker img # #################################
152
Lei YUd3748742020-05-12 19:34:26 +0800153PROXY_ARGS=""
154if [[ -n "${http_proxy}" ]]; then
Patrick Williams476a7e92022-12-06 09:52:53 -0600155 PROXY_ARGS="--build-arg http_proxy=${http_proxy} --build-arg https_proxy=${http_proxy}"
Lei YUd3748742020-05-12 19:34:26 +0800156fi
157
Andrew Geissler0205e8d2016-08-10 07:46:19 -0500158# Build above image
Patrick Williams384d7412020-11-06 16:15:41 -0600159# shellcheck disable=SC2086 # PROXY_ARGS is intentionally word-split.
160docker build ${PROXY_ARGS} -t "${DOCKER_IMG_NAME}" - <<< "${Dockerfile}"