10205e8daSAndrew Geissler#!/bin/bash -xe 20205e8daSAndrew Geissler# 30205e8daSAndrew Geissler# Build the required docker image to run QEMU and Robot test cases 4ba111abfSLei YU 5ba111abfSLei YU# Script Variables: 6ba111abfSLei YU# UBUNTU_MIRROR: <optional, the URL of a mirror of Ubuntu to override the 7ba111abfSLei YU# default ones in /etc/apt/sources.list> 8ba111abfSLei YU# default is empty, and no mirror is used. 951b6aec6SLei YU# PIP_MIRROR: <optional, the URL of a PIP mirror> 1051b6aec6SLei YU# default is empty, and no mirror is used. 11b80ea07bSAndrew Geissler# DOCKER_REG: <optional, the URL of a docker registry to utilize 12fb45daa4SAndrew Geissler# instead of our default (public.ecr.aws/ubuntu) 13fb45daa4SAndrew Geissler# (ex. docker.io) 140205e8daSAndrew Geissler# Parameters: 150205e8daSAndrew Geissler# parm1: <optional, the name of the docker image to generate> 160205e8daSAndrew Geissler# default is openbmc/ubuntu-robot-qemu 178b8333b5SAndrew Geissler# param2: <optional, the distro to build a docker image against> 180205e8daSAndrew Geissler 190205e8daSAndrew Geisslerset -uo pipefail 200205e8daSAndrew Geissler 21d374874dSLei YUhttp_proxy=${http_proxy:-} 22d374874dSLei YU 230205e8daSAndrew GeisslerDOCKER_IMG_NAME=${1:-"openbmc/ubuntu-robot-qemu"} 2486ae1358SNan ZhouDISTRO=${2:-"ubuntu:jammy"} 25ba111abfSLei YUUBUNTU_MIRROR=${UBUNTU_MIRROR:-""} 2651b6aec6SLei YUPIP_MIRROR=${PIP_MIRROR:-""} 27fb45daa4SAndrew Geisslerdocker_reg=${DOCKER_REG:-"public.ecr.aws/ubuntu"} 280205e8daSAndrew Geissler 29ba111abfSLei YUMIRROR="" 30ba111abfSLei YUif [[ -n "${UBUNTU_MIRROR}" ]]; then 31ba111abfSLei YU MIRROR="RUN echo \"deb ${UBUNTU_MIRROR} \$(. /etc/os-release && echo \$VERSION_CODENAME) main restricted universe multiverse\" > /etc/apt/sources.list && \ 32ba111abfSLei YU echo \"deb ${UBUNTU_MIRROR} \$(. /etc/os-release && echo \$VERSION_CODENAME)-updates main restricted universe multiverse\" >> /etc/apt/sources.list && \ 33ba111abfSLei YU echo \"deb ${UBUNTU_MIRROR} \$(. /etc/os-release && echo \$VERSION_CODENAME)-security main restricted universe multiverse\" >> /etc/apt/sources.list && \ 34ba111abfSLei YU echo \"deb ${UBUNTU_MIRROR} \$(. /etc/os-release && echo \$VERSION_CODENAME)-proposed main restricted universe multiverse\" >> /etc/apt/sources.list && \ 35ba111abfSLei YU echo \"deb ${UBUNTU_MIRROR} \$(. /etc/os-release && echo \$VERSION_CODENAME)-backports main restricted universe multiverse\" >> /etc/apt/sources.list" 36ba111abfSLei YUfi 37ba111abfSLei YU 3851b6aec6SLei YUPIP_MIRROR_CMD="" 3951b6aec6SLei YUif [[ -n "${PIP_MIRROR}" ]]; then 40384d741bSPatrick Williams PIP_HOSTNAME=$(echo "${PIP_MIRROR}" | awk -F[/:] '{print $4}') 4151b6aec6SLei YU PIP_MIRROR_CMD="RUN mkdir -p \${HOME}/.pip && \ 4251b6aec6SLei YU echo \"[global]\" > \${HOME}/.pip/pip.conf && \ 4351b6aec6SLei YU echo \"index-url=${PIP_MIRROR}\" >> \${HOME}/.pip/pip.conf &&\ 4451b6aec6SLei YU echo \"[install]\" >> \${HOME}/.pip/pip.conf &&\ 4551b6aec6SLei YU echo \"trusted-host=${PIP_HOSTNAME}\" >> \${HOME}/.pip/pip.conf" 4651b6aec6SLei YUfi 4751b6aec6SLei YU 480205e8daSAndrew Geissler################################# docker img # ################################# 490205e8daSAndrew Geissler# Create docker image that can run QEMU and Robot Tests 500205e8daSAndrew GeisslerDockerfile=$(cat << EOF 51b80ea07bSAndrew GeisslerFROM ${docker_reg}/${DISTRO} 520205e8daSAndrew Geissler 53ba111abfSLei YU${MIRROR} 54ba111abfSLei YU 5551b6aec6SLei YUARG DEBIAN_FRONTEND=noninteractive 560205e8daSAndrew Geissler 570205e8daSAndrew GeisslerRUN apt-get update && apt-get install -yy \ 580205e8daSAndrew Geissler debianutils \ 590205e8daSAndrew Geissler gawk \ 600205e8daSAndrew Geissler git \ 6186ae1358SNan Zhou python2 \ 6286ae1358SNan Zhou python2-dev \ 630205e8daSAndrew Geissler python-setuptools \ 64362ca85cSSaqib Khan python3 \ 65362ca85cSSaqib Khan python3-dev \ 66362ca85cSSaqib Khan python3-setuptools \ 670205e8daSAndrew Geissler socat \ 680205e8daSAndrew Geissler texinfo \ 690205e8daSAndrew Geissler wget \ 700205e8daSAndrew Geissler gcc \ 710205e8daSAndrew Geissler libffi-dev \ 720205e8daSAndrew Geissler libssl-dev \ 730205e8daSAndrew Geissler xterm \ 740205e8daSAndrew Geissler mwm \ 750205e8daSAndrew Geissler ssh \ 760205e8daSAndrew Geissler vim \ 770205e8daSAndrew Geissler iputils-ping \ 780205e8daSAndrew Geissler sudo \ 790205e8daSAndrew Geissler cpio \ 800205e8daSAndrew Geissler unzip \ 810205e8daSAndrew Geissler diffstat \ 820205e8daSAndrew Geissler expect \ 836b9bb1e9SRahul Maheshwari curl \ 847a88f29eSAndrew Geissler build-essential \ 853eafe347SRahul Maheshwari libdbus-glib-1-2 \ 867a88f29eSAndrew Geissler libpixman-1-0 \ 87f1e8376dSMichael Walsh libglib2.0-0 \ 886ba6814fSAndrew Jeffery sshpass \ 896ba6814fSAndrew Jeffery libasound2 \ 906ba6814fSAndrew Jeffery libfdt1 \ 917285ddb3SRahul Maheshwari libpcre3 \ 92851eaff9SAndrew Geissler libslirp-dev \ 93b76c0b65SGeorge Keishing openssl \ 94b76c0b65SGeorge Keishing libxml2-dev \ 9526dd8e14SGeorge Keishing libxslt-dev \ 96cd1b0ac6SAndrew Geissler python3-pip \ 9739b62803SAnusha Dathatri ipmitool \ 986ddfc299SAndrew Geissler xvfb \ 996ddfc299SAndrew Geissler rustc 10039b62803SAnusha Dathatri 10139b62803SAnusha DathatriRUN apt-get update -qqy \ 10239b62803SAnusha Dathatri && apt-get -qqy --no-install-recommends install firefox \ 103744b3bb9SRahul Maheshwari && 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 \ 10439b62803SAnusha Dathatri && apt-get -y purge firefox \ 10539b62803SAnusha Dathatri && tar -C /opt -xjf /tmp/firefox.tar.bz2 \ 106744b3bb9SRahul Maheshwari && mv /opt/firefox /opt/firefox-112.0.2 \ 107744b3bb9SRahul Maheshwari && ln -fs /opt/firefox-112.0.2/firefox /usr/bin/firefox 1080205e8daSAndrew Geissler 10951b6aec6SLei YUENV HOME ${HOME} 11051b6aec6SLei YU 11151b6aec6SLei YU${PIP_MIRROR_CMD} 11251b6aec6SLei YU 113cd1b0ac6SAndrew GeisslerRUN pip3 install \ 1140205e8daSAndrew Geissler tox \ 115cd1b0ac6SAndrew Geissler requests \ 116a4d6d3d2SMichael Shepos retrying \ 11704881eb6SMatthew Barth websocket-client \ 1188594e43cSAlanny Lopez json2yaml \ 11902c7920aSGeorge Keishing robotframework==7.2.2 \ 12009dcd89bSGeorge Keishing robotframework-requests \ 12109dcd89bSGeorge Keishing robotframework-jsonlibrary \ 1220205e8daSAndrew Geissler robotframework-sshlibrary \ 12355d0d752SSunil M robotframework-scplibrary \ 1240e5dd8a1SGeorge Keishing pysnmp \ 1258b36256fSJian Zhang redfish>=3.1.7 \ 12626dd8e14SGeorge Keishing beautifulsoup4 --upgrade \ 127882254f8SGeorge Keishing lxml \ 128428553dbSGeorge Keishing jsonschema \ 129ae29c891SGeorge Keishing redfishtool \ 13039b62803SAnusha Dathatri redfish_utilities \ 13139b62803SAnusha Dathatri robotframework-httplibrary \ 132744b3bb9SRahul Maheshwari robotframework-seleniumlibrary==6.0.0 \ 133744b3bb9SRahul Maheshwari robotframework-xvfb==1.2.2 \ 13439b62803SAnusha Dathatri robotframework-angularjs \ 13539b62803SAnusha Dathatri scp \ 136744b3bb9SRahul Maheshwari selenium==4.8.2 \ 13739b62803SAnusha Dathatri urllib3 \ 138092ec34bSGeorge Keishing click \ 139*147139aeSGeorge Keishing xvfbwrapper==0.2.9 \ 140*147139aeSGeorge Keishing aenum==3.1.15 \ 141*147139aeSGeorge Keishing colorama==0.4.6 \ 142*147139aeSGeorge Keishing pyasn1==0.6.1 \ 143*147139aeSGeorge Keishing pyasn1_modules==0.4.1 \ 144*147139aeSGeorge Keishing sseclient-py==1.8.0 14539b62803SAnusha Dathatri 146744b3bb9SRahul MaheshwariRUN wget https://github.com/mozilla/geckodriver/releases/download/v0.32.2/geckodriver-v0.32.2-linux64.tar.gz \ 14739b62803SAnusha Dathatri && tar xvzf geckodriver-*.tar.gz \ 14839b62803SAnusha Dathatri && mv geckodriver /usr/local/bin \ 14939b62803SAnusha Dathatri && chmod a+x /usr/local/bin/geckodriver 1500205e8daSAndrew Geissler 151384d741bSPatrick WilliamsRUN grep -q ${GROUPS[0]} /etc/group || groupadd -g ${GROUPS[0]} ${USER} 152c2796fe8SNan ZhouRUN grep -q ${UID} /etc/passwd || useradd -d ${HOME} -l -m -u ${UID} -g ${GROUPS[0]} \ 1530205e8daSAndrew Geissler ${USER} 1540205e8daSAndrew GeisslerUSER ${USER} 1550205e8daSAndrew GeisslerRUN /bin/bash 1560205e8daSAndrew GeisslerEOF 1570205e8daSAndrew Geissler) 1580205e8daSAndrew Geissler 1590205e8daSAndrew Geissler################################# docker img # ################################# 1600205e8daSAndrew Geissler 161d374874dSLei YUPROXY_ARGS="" 162d374874dSLei YUif [[ -n "${http_proxy}" ]]; then 163d374874dSLei YU PROXY_ARGS="--build-arg http_proxy=${http_proxy} --build-arg https_proxy=${http_proxy}" 164d374874dSLei YUfi 165d374874dSLei YU 1660205e8daSAndrew Geissler# Build above image 167384d741bSPatrick Williams# shellcheck disable=SC2086 # PROXY_ARGS is intentionally word-split. 168384d741bSPatrick Williamsdocker build ${PROXY_ARGS} -t "${DOCKER_IMG_NAME}" - <<< "${Dockerfile}" 169