**- Why I did it** python2 is end of life and SONiC is going to support python3. This PR is going to support: 1. Build pmon daemons with python3 2. Install and run python3 version pmon daemons **- How I did it** 1. Change pmon daemons make files to build bothe python2 and python3 whl 2. Change docker-platform-monitor make files to install both python2 and python3 whl 3. Change pmon docker startup files to start pmon daemons according to the supported platform API version
94 lines
3.3 KiB
Django/Jinja
Executable File
94 lines
3.3 KiB
Django/Jinja
Executable File
{% from "dockers/dockerfile-macros.j2" import install_debian_packages, install_python_wheels, copy_files %}
|
|
FROM docker-config-engine-buster
|
|
|
|
ARG docker_container_name
|
|
ARG image_version
|
|
RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name#%syslogtag%/;" /etc/rsyslog.conf
|
|
|
|
# Make apt-get non-interactive
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
|
|
# Pass the image_version to container
|
|
ENV IMAGE_VERSION=$image_version
|
|
|
|
# Install required packages
|
|
RUN apt-get update && \
|
|
apt-get install -y \
|
|
build-essential \
|
|
python3-dev \
|
|
ipmitool \
|
|
librrd8 \
|
|
librrd-dev \
|
|
rrdtool \
|
|
python-smbus \
|
|
ethtool \
|
|
dmidecode \
|
|
i2c-tools \
|
|
python-jsonschema
|
|
|
|
# TODO: Remove these lines once we no longer need Python 2
|
|
RUN apt-get install -f -y python-dev python-pip
|
|
RUN pip2 install --upgrade 'pip<21'
|
|
RUN apt-get purge -y python-pip
|
|
|
|
# On Arista devices, the sonic_platform wheel is not installed in the container.
|
|
# Instead, the installation directory is mounted from the host OS. However, this method
|
|
# doesn't ensure all dependencies are installed in the container. So here we
|
|
# install any dependencies required by the Arista sonic_platform package.
|
|
# TODO: eliminate the need to install these explicitly.
|
|
# NOTE: Only install enum34 for Python 2, as our version of Python 3 is 3.7, which
|
|
# contains 'enum' as part of the standard library. Installing enum34 there will
|
|
# cause conflicts.
|
|
RUN pip2 install enum34
|
|
|
|
# Barefoot platform vendors' sonic_platform packages import the Python 'thrift' library
|
|
RUN pip2 install thrift==0.13.0
|
|
RUN pip3 install thrift==0.13.0
|
|
|
|
{% if docker_platform_monitor_debs.strip() -%}
|
|
# Copy locally-built Debian package dependencies
|
|
{{ copy_files("debs/", docker_platform_monitor_debs.split(' '), "/debs/") }}
|
|
|
|
# Install locally-built Debian packages and implicitly install their dependencies
|
|
{{ install_debian_packages(docker_platform_monitor_debs.split(' ')) }}
|
|
{%- endif %}
|
|
|
|
{% if docker_platform_monitor_pydebs.strip() -%}
|
|
# Copy locally-built Debian package dependencies
|
|
{{ copy_files("python-debs/", docker_platform_monitor_pydebs.split(' '), "/debs/") }}
|
|
|
|
# Install locally-built Debian packages and implicitly install their dependencies
|
|
{{ install_debian_packages(docker_platform_monitor_pydebs.split(' ')) }}
|
|
{%- endif %}
|
|
|
|
{% if docker_platform_monitor_whls.strip() -%}
|
|
# Copy locally-built Python wheel dependencies
|
|
{{ copy_files("python-wheels/", docker_platform_monitor_whls.split(' '), "/python-wheels/") }}
|
|
|
|
# Install locally-built Python wheel dependencies
|
|
{{ install_python_wheels(docker_platform_monitor_whls.split(' ')) }}
|
|
{% endif %}
|
|
|
|
|
|
# TODO: Remove this line once we no longer need Python 2
|
|
RUN apt-get purge -y python-dev
|
|
|
|
# Clean up
|
|
RUN apt-get purge -y \
|
|
build-essential \
|
|
python3-dev && \
|
|
apt-get clean -y && \
|
|
apt-get autoclean -y && \
|
|
apt-get autoremove -y && \
|
|
rm -rf /debs \
|
|
/python-wheels \
|
|
~/.cache
|
|
|
|
COPY ["docker_init.sh", "lm-sensors.sh", "/usr/bin/"]
|
|
COPY ["docker-pmon.supervisord.conf.j2", "/usr/share/sonic/templates/"]
|
|
COPY ["ssd_tools/*", "/usr/bin/"]
|
|
COPY ["files/supervisor-proc-exit-listener", "/usr/bin"]
|
|
COPY ["critical_processes", "/etc/supervisor"]
|
|
|
|
ENTRYPOINT ["/usr/bin/docker_init.sh"]
|