This repository has been archived on 2025-03-20. You can view files and clone it, but cannot push or open issues or pull requests.
sonic-buildimage/dockers/docker-sonic-mgmt/Dockerfile.j2
Saikrishna Arcot 87f137be25
Upgrade paramiko in docker-ptf to 2.9.5 (#16897)
With Debian Bookworm, Paramiko 2.9 or newer will need to be used to be
able to connect to devices running that version of Debian
(specifically, to those running OpenSSH 9.2).

Paramiko is currently on 3.3.1. For now, upgrade to 2.9.5.

Signed-off-by: Saikrishna Arcot <sarcot@microsoft.com>
2023-10-24 22:51:16 -07:00

364 lines
14 KiB
Django/Jinja
Executable File

{% set prefix = DEFAULT_CONTAINER_REGISTRY %}
FROM {{ prefix }}ubuntu:20.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y apt-transport-https \
apt-utils \
build-essential \
ca-certificates \
cmake \
curl \
default-jre \
git \
gnupg \
gnupg-agent \
iproute2 \
iputils-ping \
isc-dhcp-client \
libffi-dev \
libssl-dev \
libxml2 \
libxslt1-dev \
lsb-release \
jq \
openssh-server \
psmisc \
python \
python-dev \
python3-pip \
python3-venv \
rsyslog \
shellcheck \
snmp \
software-properties-common \
sshpass \
sudo \
tcpdump \
telnet \
vim
RUN pip3 install --upgrade pip setuptools wheel
RUN pip3 install aiohttp \
allure-pytest==2.8.22 \
ansible==2.9.27 \
azure-storage-blob==12.9.0 \
azure-kusto-data \
azure-kusto-ingest \
defusedxml \
celery[redis]==5.2.7 \
cffi \
contextlib2==0.6.0.post1 \
cryptography==3.3.2 \
ctypesgen \
dpkt \
dpugen==0.1.1 \
"future>=0.16.0" \
gitpython \
ipaddr \
ipython==8.12.2 \
ixload \
ixnetwork-restpy==1.0.64 \
ixnetwork-open-traffic-generator==0.0.79 \
jinja2==2.10.1 \
jsonpatch \
lxml \
markupsafe==2.0.1 \
mock \
msrest==0.6.21 \
natsort \
ncclient \
netaddr \
netmiko==2.4.2 \
pandas \
paramiko==2.9.5 \
passlib \
pexpect \
prettytable \
psutil \
ptf \
pyasn1==0.4.8 \
pycryptodome==3.9.8 \
pyfiglet \
pylint==1.8.1 \
pyro4 \
pysnmp==4.4.12 \
pysubnettree \
pytest-ansible \
pytest-html \
pytest-repeat \
pytest-xdist==1.28.0 \
python-dateutil \
pytest==7.1.3 \
PyYAML \
redis \
requests \
retry \
rpyc \
scandir \
scapy==2.4.5 \
setuptools-rust \
six \
snappi[ixnetwork,convergence]==0.7.44 \
tabulate \
textfsm==1.1.2 \
thrift==0.11.0 \
virtualenv \
&& wget https://github.com/nanomsg/nanomsg/archive/1.2.tar.gz \
&& tar xvfz 1.2.tar.gz \
&& cd nanomsg-1.2 \
&& mkdir -p build \
&& cd build \
&& cmake .. \
&& make install \
&& ldconfig \
&& cd ../.. \
&& rm -fr nanomsg-1.2 \
&& rm -f 1.2.tar.gz \
&& pip3 install nnpy
RUN curl -fsSL http://archive.ubuntu.com/ubuntu/pool/universe/s/scapy/python-scapy_2.3.3-3_all.deb \
--output python-scapy_2.3.3-3_all.deb \
&& dpkg -i python-scapy_2.3.3-3_all.deb \
&& rm -f python-scapy_2.3.3-3_all.deb
RUN curl -fsSL https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py \
&& python2 get-pip.py \
&& rm -f get-pip.py \
&& ln -sf `which pip2` /usr/bin/pip
RUN pip install --upgrade pip setuptools wheel
RUN pip install allure-pytest==2.8.22 \
ansible==2.8.12 \
azure-storage-blob==12.9.0 \
celery[redis]==4.4.7 \
cffi==1.12.0 \
contextlib2==0.6.0.post1 \
cryptography==3.3.2 \
ctypesgen \
dpkt \
dpugen==0.1.1 \
"future>=0.16.0" \
gitpython \
ipaddr \
ipython==5.4.1 \
ixload \
ixnetwork-restpy==1.0.64 \
ixnetwork-open-traffic-generator==0.0.79 \
jinja2==2.10.1 \
jsonpatch \
lazy-object-proxy==1.6.0 \
lxml \
mock \
msrest==0.6.21 \
natsort \
netaddr \
netmiko==2.4.2 \
nnpy \
pandas \
paramiko==2.7.1 \
passlib \
pexpect \
prettytable \
psutil \
pyaml==21.10.1 \
pyasn1==0.1.9 \
pycryptodome==3.9.8 \
pyfiglet \
pylint==1.8.1 \
pyro4 \
pysnmp==4.2.5 \
pysubnettree \
pytest==4.6.11 \
pytest-ansible \
pytest-repeat \
pytest-html \
pytest-xdist==1.28.0 \
python-dateutil \
PyYAML \
redis \
requests \
retry \
rpyc \
scandir \
six \
snappi[ixnetwork,convergence]==0.7.44 \
statistics \
tabulate \
textfsm==1.1.3 \
thrift==0.11.0 \
virtualenv \
&& git clone https://github.com/p4lang/scapy-vxlan.git \
&& cd scapy-vxlan \
&& python setup.py install \
&& cd .. \
&& rm -fr scapy-vxlan \
&& pip install scapy==2.4.5 --upgrade --ignore-installed
# Install docker-ce-cli
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - \
&& add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
&& apt-get update \
&& apt-get install -y docker-ce-cli
# Install Azure CLI, following https://learn.microsoft.com/en-us/cli/azure/install-azure-cli-linux?pivots=apt#option-2-step-by-step-installation-instructions
RUN mkdir -p /etc/apt/keyrings \
&& curl -sLS https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | tee /etc/apt/keyrings/microsoft.gpg > /dev/null \
&& chmod go+r /etc/apt/keyrings/microsoft.gpg \
&& echo "deb [arch=`dpkg --print-architecture` signed-by=/etc/apt/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/azure-cli/ `lsb_release -cs` main" | tee /etc/apt/sources.list.d/azure-cli.list \
&& apt-get update && apt-get install -y azure-cli
## Copy and install sonic-mgmt docker dependencies
COPY \
{% for deb in docker_sonic_mgmt_debs.split(' ') -%}
debs/{{ deb }}{{' '}}
{%- endfor -%}
debs/
RUN dpkg -i \
{% for deb in docker_sonic_mgmt_debs.split(' ') -%}
debs/{{ deb }}{{' '}}
{%- endfor %}
# Install protobuf 3.21.12 which is from https://deb.debian.org/debian/pool/main/p/protobuf/protobuf_3.21.12-3.dsc
RUN mkdir -p /tmp/protobuf \
&& cd /tmp/protobuf \
&& wget https://sonicstorage.blob.core.windows.net/public/ubuntu/20.04/libprotobuf-dev_3.21.12-3_amd64.deb \
&& wget https://sonicstorage.blob.core.windows.net/public/ubuntu/20.04/libprotobuf-lite32_3.21.12-3_amd64.deb \
&& wget https://sonicstorage.blob.core.windows.net/public/ubuntu/20.04/libprotobuf32_3.21.12-3_amd64.deb \
&& wget https://sonicstorage.blob.core.windows.net/public/ubuntu/20.04/libprotoc-dev_3.21.12-3_amd64.deb \
&& wget https://sonicstorage.blob.core.windows.net/public/ubuntu/20.04/libprotoc32_3.21.12-3_amd64.deb \
&& wget https://sonicstorage.blob.core.windows.net/public/ubuntu/20.04/protobuf-compiler_3.21.12-3_amd64.deb \
&& wget https://sonicstorage.blob.core.windows.net/public/ubuntu/20.04/python3-protobuf_3.21.12-3_amd64.deb \
&& dpkg -i *.deb \
&& rm -rf /tmp/protobuf
# Install dash-api
RUN cd /tmp \
&& mkdir -p /usr/lib/python3/dist-packages/dash_api \
&& wget https://raw.githubusercontent.com/sonic-net/sonic-buildimage/master/src/sonic-dash-api/pypkg/__init__.py -O /usr/lib/python3/dist-packages/dash_api/__init__.py \
&& git clone https://github.com/sonic-net/sonic-dash-api.git \
&& protoc -I=sonic-dash-api/proto --python_out=/usr/lib/python3/dist-packages/dash_api sonic-dash-api/proto/*.proto \
&& rm -rf /tmp/sonic-dash-api
RUN mkdir /var/run/sshd
EXPOSE 22
# Add user
ARG user
ARG uid
ARG guid
ARG hostname
ENV BUILD_HOSTNAME $hostname
ENV USER $user
ENV CC=gcc CPP=cpp CXX=c++ LDSHARED="gcc -pthread -shared" PYMSSQL_BUILD_WITH_BUNDLED_FREETDS=1
RUN groupadd -f -r -g $guid g$user
RUN useradd $user -l -u $uid -g $guid -d /var/$user -m -s /bin/bash
COPY sonic-jenkins.pub /var/$user/.ssh/authorized_keys2
RUN echo "Host *\n\tStrictHostKeyChecking no\n" > /var/$user/.ssh/config
RUN chown $user /var/$user/.ssh -R
RUN chmod go= /var/$user/.ssh -R
# Add user to sudoers
RUN echo "$user ALL=(ALL) NOPASSWD:ALL" >>/etc/sudoers
USER $user
WORKDIR /var/$user
# Add az symlink for backwards compatibility
RUN mkdir bin && ln -s /usr/bin/az bin/az
RUN python3 -m venv --system-site-packages env-python3
# Activating a virtualenv. The virtualenv automatically works for RUN, ENV and CMD.
ENV VIRTUAL_ENV=env-python3
ARG BACKUP_OF_PATH="$PATH"
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8 PYTHONIOENCODING=UTF-8
RUN python3 -m pip install --upgrade pip setuptools wheel
RUN python3 -m pip install aiohttp \
allure-pytest==2.8.22 \
ansible==2.9.27 \
azure-storage-blob==12.9.0 \
azure-kusto-data \
azure-kusto-ingest \
defusedxml \
celery[redis]==5.2.7 \
cffi \
contextlib2==0.6.0.post1 \
cryptography==3.3.2 \
ctypesgen \
dpkt \
dpugen==0.1.1 \
"future>=0.16.0" \
gitpython \
ipaddr \
ipython==8.12.2 \
ixload \
ixnetwork-restpy==1.0.64 \
ixnetwork-open-traffic-generator==0.0.79 \
jinja2==2.10.1 \
jsonpatch \
lxml \
markupsafe==2.0.1 \
mock \
msrest==0.6.21 \
natsort \
ncclient \
netaddr \
netmiko==2.4.2 \
nnpy \
pandas \
paramiko==2.7.1 \
passlib \
pexpect \
prettytable \
psutil \
ptf \
pyasn1==0.4.8 \
pycryptodome==3.9.8 \
pyfiglet \
pylint==1.8.1 \
pyro4 \
pysnmp==4.4.12 \
pysubnettree \
pytest-ansible \
pytest-html \
pytest-repeat \
pytest-xdist==1.28.0 \
python-dateutil \
pytest==7.1.3 \
PyYAML \
redis \
requests \
retry \
rpyc \
scandir \
scapy==2.4.5 \
setuptools-rust \
six \
snappi[ixnetwork,convergence]==0.7.44 \
sshconf==0.2.5 \
tabulate \
textfsm==1.1.2 \
thrift==0.11.0 \
virtualenv
# Deactivating a virtualenv
ENV PATH="$BACKUP_OF_PATH"
USER root
WORKDIR /azp
COPY ./start.sh .
RUN chmod +x start.sh
USER $user
WORKDIR /var/$user