ae0a47dc6e
#### Why I did it Cherry-pick commits from master to support the snapshot based mirror, and fix the code conflicts. And add the last commit to fix the build broken issue according to the mirror change.ad162ae0e
[Build] Optimize the version control for Debian packages (https://github.com/sonic-net/sonic-buildimage/pull/14557)38c5d7fce
[Build] Support j2 template for debian sources for docker ptf (https://github.com/sonic-net/sonic-buildimage/pull/13198)5e4826ebf
[Ci] Support to use the same snapshot for all platform builds (#13913)820692563
[Build] Change the default mirror version config file (#13786)5e4a866e3
[Build] Support Debian snapshot mirror to improve build stability (#13097)ac5d89c6a
[Build] Support j2 template for debian sources (#12557)
172 lines
5.0 KiB
Django/Jinja
172 lines
5.0 KiB
Django/Jinja
{% set prefix = DEFAULT_CONTAINER_REGISTRY %}
|
|
{% if CONFIGURED_ARCH == "armhf" and MULTIARCH_QEMU_ENVIRON == "y" %}
|
|
FROM {{ prefix }}multiarch/debian-debootstrap:armhf-stretch
|
|
{% elif CONFIGURED_ARCH == "arm64" and MULTIARCH_QEMU_ENVIRON == "y" %}
|
|
FROM {{ prefix }}multiarch/debian-debootstrap:arm64-stretch
|
|
{% else %}
|
|
FROM {{ prefix }}debian:stretch
|
|
{% endif %}
|
|
|
|
MAINTAINER Pavel Shirshov
|
|
|
|
## Copy dependencies
|
|
COPY \
|
|
{% for deb in docker_ptf_debs.split(' ') -%}
|
|
debs/{{ deb }}{{' '}}
|
|
{%- endfor -%}
|
|
debs/
|
|
|
|
COPY ["sources.list.{{ CONFIGURED_ARCH }}", "/etc/apt/sources.list"]
|
|
|
|
## Make apt-get non-interactive
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
|
|
## Set the apt source, update package cache and install necessary packages
|
|
## TODO: Clean up this step
|
|
RUN apt-get update \
|
|
&& apt-get upgrade -y \
|
|
&& apt-get dist-upgrade -y \
|
|
&& apt-get install -y \
|
|
autoconf \
|
|
openssh-server \
|
|
vim \
|
|
telnet \
|
|
net-tools \
|
|
traceroute \
|
|
lsof \
|
|
tcpdump \
|
|
ethtool \
|
|
unzip \
|
|
pkg-config \
|
|
binutils \
|
|
build-essential \
|
|
libssl-dev \
|
|
libffi-dev \
|
|
wget \
|
|
cmake \
|
|
libqt5core5a \
|
|
libqt5network5 \
|
|
libboost-atomic1.62.0 \
|
|
less \
|
|
git \
|
|
iputils-ping \
|
|
hping3 \
|
|
curl \
|
|
tmux \
|
|
python \
|
|
python-dev \
|
|
python-libpcap \
|
|
python-scapy \
|
|
python-six \
|
|
tacacs+ \
|
|
rsyslog \
|
|
ntp \
|
|
ntpstat \
|
|
ntpdate \
|
|
arping \
|
|
bridge-utils
|
|
|
|
RUN dpkg -i \
|
|
{% for deb in docker_ptf_debs.split(' ') -%}
|
|
debs/{{ deb }}{{' '}}
|
|
{%- endfor %}
|
|
|
|
# Install all python modules from pypi. python-scapy is exception, ptf debian package requires python-scapy
|
|
# TODO: Clean up this step
|
|
RUN rm -rf /debs \
|
|
&& apt-get -y autoclean \
|
|
&& apt-get -y autoremove \
|
|
&& rm -rf /var/lib/apt/lists/* \
|
|
&& wget --https-only https://bootstrap.pypa.io/pip/2.7/get-pip.py \
|
|
&& python get-pip.py \
|
|
&& rm -f get-pip.py \
|
|
&& pip install setuptools \
|
|
&& pip install supervisor \
|
|
&& pip install ipython==5.4.1 \
|
|
&& git clone https://github.com/p4lang/scapy-vxlan.git \
|
|
&& cd scapy-vxlan \
|
|
&& python setup.py install \
|
|
&& cd .. \
|
|
&& rm -fr scapy-vxlan \
|
|
&& git clone https://github.com/sflow/sflowtool \
|
|
&& cd sflowtool \
|
|
&& ./boot.sh \
|
|
&& ./configure \
|
|
&& make \
|
|
&& make install \
|
|
&& cd .. \
|
|
&& rm -fr sflowtool \
|
|
&& git clone https://github.com/dyninc/OpenBFDD.git \
|
|
&& cd OpenBFDD \
|
|
&& ./autogen.sh \
|
|
&& ./configure \
|
|
&& make \
|
|
&& make install \
|
|
&& cd .. \
|
|
&& rm -fr OpenBFDD \
|
|
&& wget https://github.com/nanomsg/nanomsg/archive/1.0.0.tar.gz \
|
|
&& tar xvfz 1.0.0.tar.gz \
|
|
&& cd nanomsg-1.0.0 \
|
|
&& mkdir -p build \
|
|
&& cd build \
|
|
&& cmake .. \
|
|
&& make install \
|
|
&& ldconfig \
|
|
&& cd ../.. \
|
|
&& rm -fr nanomsg-1.0.0 \
|
|
&& rm -f 1.0.0.tar.gz \
|
|
&& pip install cffi \
|
|
&& pip install nnpy \
|
|
&& pip install dpkt \
|
|
&& pip install ipaddress \
|
|
&& pip install pysubnettree \
|
|
&& pip install paramiko \
|
|
&& pip install flask \
|
|
&& pip install exabgp==3.4.17\
|
|
&& pip install pyaml \
|
|
&& pip install pybrctl pyro4 rpyc yabgp \
|
|
&& pip install unittest-xml-reporting \
|
|
&& mkdir -p /opt \
|
|
&& cd /opt \
|
|
&& wget https://raw.githubusercontent.com/p4lang/ptf/master/ptf_nn/ptf_nn_agent.py
|
|
|
|
## Adjust sshd settings
|
|
RUN mkdir /var/run/sshd \
|
|
&& echo 'root:root' | chpasswd \
|
|
&& sed -ri '/^#?PermitRootLogin/c\PermitRootLogin yes' /etc/ssh/sshd_config \
|
|
&& sed -ri '/^#?UsePAM/c\UsePAM no' /etc/ssh/sshd_config \
|
|
&& sed -ri '/^#?UseDNS/c\UseDNS no' /etc/ssh/sshd_config
|
|
|
|
COPY supervisord.conf /etc/supervisor/
|
|
COPY conf.d/ /etc/supervisor/conf.d/
|
|
COPY ptf_tgen.sh /ptf_tgen/
|
|
|
|
# Move tcpdump into /usr/bin Otherwise it's impossible to run tcpdump due to a docker bug
|
|
RUN mv /usr/sbin/tcpdump /usr/bin/tcpdump
|
|
RUN ln -s /usr/bin/tcpdump /usr/sbin/tcpdump
|
|
|
|
RUN mkdir -p /var/log/supervisor
|
|
|
|
# Install Python-based GNMI client
|
|
RUN git clone https://github.com/lguohan/gnxi.git \
|
|
&& cd gnxi \
|
|
&& git checkout 53901ab \
|
|
&& cd gnmi_cli_py \
|
|
&& pip install -r requirements.txt
|
|
|
|
COPY \
|
|
{% for deb in docker_ptf_debs.split(' ') -%}
|
|
debs/{{ deb }}{{' '}}
|
|
{%- endfor -%}
|
|
debs/
|
|
|
|
RUN dpkg -i \
|
|
{% for deb in docker_ptf_debs.split(' ') -%}
|
|
debs/{{ deb }}{{' '}}
|
|
{%- endfor %}
|
|
|
|
COPY ["*.ini", "/etc/ptf/"]
|
|
EXPOSE 22 8009
|
|
|
|
ENTRYPOINT ["/usr/local/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"]
|