{% 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:buster {% endif %} {% from "dockers/dockerfile-macros.j2" import install_python_wheels, copy_files %} USER root WORKDIR /root MAINTAINER Pavel Shirshov COPY ["sources.list.{{ CONFIGURED_ARCH }}", "/etc/apt/sources.list"] COPY ["no-check-valid-until", "/etc/apt/apt.conf.d"] ## 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.71.0 \ less \ git \ iputils-ping \ hping3 \ curl \ tmux \ python \ python-dev \ python-libpcap \ python-scapy \ python-six \ python3 \ python3-venv \ python3-pip \ python3-dev \ python3-scapy \ python3-six \ libpcap-dev \ tacacs+ \ rsyslog \ ntp \ ntpstat \ ntpdate \ arping \ bridge-utils \ libteam-utils \ gdb \ automake \ iproute2 \ wireshark-common # 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 \ && pip install pyrasite \ && pip install retrying \ && mkdir -p /opt \ && cd /opt \ && wget https://raw.githubusercontent.com/p4lang/ptf/master/ptf_nn/ptf_nn_agent.py RUN python3 -m venv --system-site-packages env-python3 # Activating a virtualenv. The virtualenv automatically works for RUN, ENV and CMD. ENV VIRTUAL_ENV=/root/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 --ignore-installed pip # Install all python modules from pypi. python3-scapy is exception, ptf debian package requires python3-scapy RUN python3 -m pip install setuptools \ && pip3 install supervisor \ && pip3 install ipython==5.4.1 \ && pip3 install Cython \ && pip3 install cffi \ && pip3 install nnpy \ && pip3 install dpkt \ && pip3 install ipaddress \ && pip3 install pysubnettree \ && pip3 install paramiko \ && pip3 install Flask \ && pip3 install exabgp \ && pip3 install pyaml \ && pip3 install pybrctl pyro4 rpyc yabgp \ && pip3 install unittest-xml-reporting \ && pip3 install pyrasite \ && pip3 install python-libpcap \ && pip3 install enum34 \ && pip3 install grpcio \ && pip3 install grpcio-tools \ && pip3 install protobuf \ && pip3 install six==1.16.0 \ && pip3 install itsdangerous \ && pip3 install retrying \ && pip3 install jinja2 \ && pip3 install scapy==2.5.0 \ && pip3 install thrift {% if docker_ptf_whls.strip() -%} # Copy locally-built Python wheel dependencies {{ copy_files("python-wheels/", docker_ptf_whls.split(' '), "/python-wheels/") }} # Install locally-built Python wheel dependencies {{ install_python_wheels(docker_ptf_whls.split(' ')) }} {% endif %} # Deactivating a virtualenv. ENV PATH="$BACKUP_OF_PATH" ## 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 f2b11e4 \ && 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"]