{% if CONFIGURED_ARCH == "armhf" and MULTIARCH_QEMU_ENVIRON == "y" %} FROM multiarch/debian-debootstrap:armhf-stretch {% elif CONFIGURED_ARCH == "arm64" and MULTIARCH_QEMU_ENVIRON == "y" %} FROM multiarch/debian-debootstrap:arm64-stretch {% else %} FROM debian:stretch {% endif %} MAINTAINER Pavel Shirshov ## Remove retired jessie-updates repo RUN sed -i '/deb http:\/\/deb.debian.org\/debian jessie-updates main/d' /etc/apt/sources.list ## Copy dependencies COPY \ {% for deb in docker_ptf_debs.split(' ') -%} debs/{{ deb }}{{' '}} {%- endfor -%} debs/ ## 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 sed --in-place 's/httpredir.debian.org/debian-archive.trafficmanager.net/' /etc/apt/sources.list \ && 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"]