2019-06-22 13:26:23 -05:00
{ % from "dockers/dockerfile-macros.j2" import install_debian_packages, install_python_wheels, copy_files %}
2021-04-18 10:17:57 -05:00
{ % if CONFIGURED_ARCH = = "armhf" and MULTIARCH_QEMU_ENVIRON = = "y" %}
2019-07-26 00:06:41 -05:00
FROM multiarch/debian-debootstrap:armhf-stretch
2021-04-18 10:17:57 -05:00
{ % elif CONFIGURED_ARCH = = "arm64" and MULTIARCH_QEMU_ENVIRON = = "y" %}
2019-07-26 00:06:41 -05:00
FROM multiarch/debian-debootstrap:arm64-stretch
{ % else %}
Support to build armhf/arm64 platforms on arm based system (#7731)
Why I did it
Support to build armhf/arm64 platforms on arm based system without qemu simulator.
When building the armhf/arm64 on arm based system, it is not necessary to use qemu simulator.
How I did it
Build armhf on armhf system, or build arm64 on arm64 system, by default, qemu simulator will not be used.
When building armhf on arm64, and you have enabled armhf docker, then it will build images without simulator automatically. It is based how the docker service is run.
Docker base image change:
For amd64, change from debian:to amd64/debian:
For arm64, change from multiarch/debian-debootstrap:arm64- to arm64v8/debian:
For armhf, change from multiarch/debian-debootstrap:armhf- to arm32v7/debian:
See https://github.com/docker-library/official-images#architectures-other-than-amd64
The mapping relations:
arm32v6 --- armel
arm32v7 --- armhf
arm64v8 --- arm64
Docker image armhf deprecated info: https://hub.docker.com/r/armhf/debian, using arm32v7 instead.
2021-08-12 09:24:37 -05:00
FROM {{DOCKER_BASE_ARCH}}/debian:stretch
2019-07-26 00:06:41 -05:00
{ % endif %}
2019-01-31 01:05:52 -06:00
# Clean documentation in FROM image
RUN find /usr/share/doc -depth \( -type f -o -type l \) ! -name copyright | xargs rm || true
# Clean doc directories that are empty or only contain empty directories
2019-06-22 13:26:23 -05:00
RUN while [ -n " $( find /usr/share/doc -depth -type d -empty -print -exec rmdir { } +) " ] ; do :; done && \
rm -rf \
2019-01-31 01:05:52 -06:00
/usr/share/man/* \
/usr/share/groff/* \
/usr/share/info/* \
/usr/share/lintian/* \
/usr/share/linda/* \
/var/cache/man/* \
/usr/share/locale/*
# Make apt-get non-interactive
ENV DEBIAN_FRONTEND = noninteractive
# Configure data sources for apt/dpkg
COPY [ "dpkg_01_drop" , "/etc/dpkg/dpkg.cfg.d/01_drop" ]
2019-07-26 00:06:41 -05:00
{ % if CONFIGURED_ARCH = = "armhf" %}
COPY [ "sources.list.armhf" , "/etc/apt/sources.list" ]
{ % elif CONFIGURED_ARCH = = "arm64" %}
COPY [ "sources.list.arm64" , "/etc/apt/sources.list" ]
{ % else %}
2019-01-31 01:05:52 -06:00
COPY [ "sources.list" , "/etc/apt/sources.list" ]
2019-07-26 00:06:41 -05:00
{ % endif %}
2019-01-31 01:05:52 -06:00
COPY [ "no_install_recommend_suggest" , "/etc/apt/apt.conf.d" ]
2020-01-07 17:52:49 -06:00
COPY [ "no-check-valid-until" , "/etc/apt/apt.conf.d" ]
2019-01-31 01:05:52 -06:00
2019-06-22 13:26:23 -05:00
# Update apt cache and
# pre-install fundamental packages
RUN apt-get update && \
apt-get -y install \
2020-11-11 20:19:48 -06:00
curl \
2019-06-22 13:26:23 -05:00
less \
perl \
procps \
python \
2020-05-08 23:24:05 -05:00
python-pip \
2019-06-22 13:26:23 -05:00
vim-tiny \
2020-11-20 01:41:32 -06:00
# Install redis-tools
redis-tools= 5:5.0.3-3~bpo9+2 \
2020-04-05 15:29:34 -05:00
# common dependencies
libpython2.7 \
libdaemon0 \
libdbus-1-3 \
2020-05-21 02:22:19 -05:00
libjansson4 \
2020-01-23 18:50:17 -06:00
# ip and ifconfig utility missing in docker for arm arch
2019-07-26 00:06:41 -05:00
iproute2 \
2020-05-21 02:22:19 -05:00
net-tools \
2020-07-08 12:27:05 -05:00
# for processing json files in bash environment
2020-10-25 22:39:38 -05:00
jq \
# for sairedis zmq rpc channel
libzmq5
2019-07-26 00:06:41 -05:00
2020-09-21 04:09:50 -05:00
# Install a newer version of rsyslog from stretch-backports to support -iNONE
RUN apt-get -y -t stretch-backports install rsyslog
2020-11-11 20:19:48 -06:00
# Install redis-tools
{ % if CONFIGURED_ARCH = = "armhf" %}
RUN curl -o redis-tools_6.0.6-1~bpo10+1_armhf.deb "https://sonicstorage.blob.core.windows.net/packages/redis/redis-tools_6.0.6-1_bpo10+1_armhf.deb?sv=2015-04-05&sr=b&sig=67vHAMxsl%2BS3X1KsqhdYhakJkGdg5FKSPgU8kUiw4as%3D&se=2030-10-24T04%3A22%3A40Z&sp=r"
RUN dpkg -i redis-tools_6.0.6-1~bpo10+1_armhf.deb || apt-get install -f -y
RUN rm redis-tools_6.0.6-1~bpo10+1_armhf.deb
{ % elif CONFIGURED_ARCH = = "arm64" %}
RUN curl -o redis-tools_6.0.6-1~bpo10+1_arm64.deb "https://sonicstorage.blob.core.windows.net/packages/redis/redis-tools_6.0.6-1_bpo10+1_arm64.deb?sv=2015-04-05&sr=b&sig=GbkJV2wWln3hoz27zKi5erdk3NDKrAFrQriA97bcRCY%3D&se=2030-10-24T04%3A22%3A21Z&sp=r"
RUN dpkg -i redis-tools_6.0.6-1~bpo10+1_arm64.deb || apt-get install -f -y
RUN rm redis-tools_6.0.6-1~bpo10+1_arm64.deb
{ % else %}
RUN curl -o redis-tools_6.0.6-1~bpo10+1_amd64.deb "https://sonicstorage.blob.core.windows.net/packages/redis/redis-tools_6.0.6-1~bpo10+1_amd64.deb?sv=2015-04-05&sr=b&sig=73zbmjkf3pi%2Bn0R8Hy7CWT2EUvOAyzM5aLYJWCLySGM%3D&se=2030-09-06T19%3A44%3A59Z&sp=r"
RUN dpkg -i redis-tools_6.0.6-1~bpo10+1_amd64.deb || apt-get install -f -y
RUN rm redis-tools_6.0.6-1~bpo10+1_amd64.deb
{ % endif %}
2020-11-20 01:41:32 -06:00
# Some Python packages require setuptools (or pkg_resources, which is supplied by setuptools)
# and some require wheel
RUN pip install setuptools = = 40.8.0
RUN pip install wheel
2020-05-08 23:24:05 -05:00
# For templating
RUN pip install j2cli
2020-11-20 01:41:32 -06:00
# Install supervisor
RUN pip install supervisor>= 3.4.0
# Add support for supervisord to handle startup dependencies
RUN pip install supervisord-dependent-startup= = 1.4.0
2019-06-22 13:26:23 -05:00
RUN mkdir -p /etc/supervisor /var/log/supervisor
2019-01-31 01:05:52 -06:00
RUN apt-get -y purge \
exim4 \
exim4-base \
exim4-config \
exim4-daemon-light
{ % if docker_base_stretch_debs.strip( ) -%}
2019-06-22 13:26:23 -05:00
# Copy locally-built Debian package dependencies
{ { copy_files( "debs/" , docker_base_stretch_debs.split( ' ' ) , "/debs/" ) } }
2019-01-31 01:05:52 -06:00
# Install built Debian packages and implicitly install their dependencies
2019-06-22 13:26:23 -05:00
{ { install_debian_packages( docker_base_stretch_debs.split( ' ' ) ) } }
2019-01-31 01:05:52 -06:00
{ %- endif %}
# Clean up apt
# Remove /var/lib/apt/lists/*, could be obsoleted for derived images
2019-06-22 13:26:23 -05:00
RUN apt-get clean -y && \
apt-get autoclean -y && \
apt-get autoremove -y && \
rm -rf /var/lib/apt/lists/* /tmp/*
COPY [ "etc/rsyslog.conf" , "/etc/rsyslog.conf" ]
COPY [ "etc/rsyslog.d/*" , "/etc/rsyslog.d/" ]
COPY [ "root/.vimrc" , "/root/.vimrc" ]
2019-01-31 01:05:52 -06:00
2019-11-20 09:39:49 -06:00
RUN ln /usr/bin/vim.tiny /usr/bin/vim
2019-06-22 13:26:23 -05:00
COPY [ "etc/supervisor/supervisord.conf" , "/etc/supervisor/" ]