diff --git a/.gitignore b/.gitignore index 2ab113a44ef..bf9967b04ac 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,8 @@ src/mpdecimal/* !src/mpdecimal/Makefile src/python3/* !src/python3/Makefile +src/supervisor/* +!src/supervisor/Makefile # Autogenerated Dockerfiles dockers/docker-base/Dockerfile diff --git a/dockers/docker-base/Dockerfile.j2 b/dockers/docker-base/Dockerfile.j2 index b8b1e23a1c2..18761f3caac 100644 --- a/dockers/docker-base/Dockerfile.j2 +++ b/dockers/docker-base/Dockerfile.j2 @@ -1,8 +1,9 @@ FROM debian:jessie -## Clean documentation in FROM image +# 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 + +# Clean doc directories that are empty or only contain empty directories RUN while [ -n "$(find /usr/share/doc -depth -type d -empty -print -exec rmdir {} +)" ]; do :; done RUN rm -rf \ /usr/share/man/* \ @@ -13,18 +14,17 @@ RUN rm -rf \ /var/cache/man/* \ /usr/share/locale/* -## Make apt-get non-interactive +# Make apt-get non-interactive ENV DEBIAN_FRONTEND=noninteractive -## Configure data sources for apt/dpkg +# Configure data sources for apt/dpkg COPY ["sources.list", "/etc/apt/sources.list"] COPY ["dpkg_01_drop", "/etc/dpkg/dpkg.cfg.d/01_drop"] RUN apt-get update -## Pre-install fundamental packages +# Pre-install fundamental packages RUN apt-get -y install \ rsyslog \ - supervisor \ vim-tiny \ perl \ python \ @@ -34,25 +34,45 @@ COPY ["etc/rsyslog.conf", "/etc/rsyslog.conf"] COPY ["etc/rsyslog.d/*", "/etc/rsyslog.d/"] COPY ["root/.vimrc", "/root/.vimrc"] +# Install dependencies of supervisor +RUN apt-get -y install python-pkg-resources python-meld3 + +RUN mkdir -p /etc/supervisor +RUN mkdir -p /var/log/supervisor + +COPY ["etc/supervisor/supervisord.conf", "/etc/supervisor/"] + RUN apt-get -y purge \ exim4 \ exim4-base \ exim4-config \ exim4-daemon-light -{% if docker_base_dbgs %} -## Install common debug-packages -RUN apt-get -y install \ -{% for dbg_pkg in docker_base_dbgs.split(' ') -%} - {{ dbg_pkg }}{{' '}} +{% if docker_base_debs.strip() -%} +# Copy built Debian packages +{%- for deb in docker_base_debs.split(' ') %} +COPY debs/{{ deb }} debs/ +{%- endfor %} + +# Install built Debian packages and implicitly install their dependencies +{%- for deb in docker_base_debs.split(' ') %} +RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt debs/{{ deb }} +{%- endfor %} +{%- endif %} + +{% if docker_base_dbgs.strip() -%} +# Install common debug-packages +{%- for dbg_pkg in docker_base_dbgs.split(' ') %} +RUN apt-get -y install {{ dbg_pkg }} {%- endfor %} {% else %} RUN ln /usr/bin/vim.tiny /usr/bin/vim -{% endif %} +{%- endif %} + +# Clean up apt +# Remove /var/lib/apt/lists/*, could be obsoleted for derived images +RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y +RUN rm -rf /var/lib/apt/lists/* -## Clean up apt -## Remove /var/lib/apt/lists/*, could be obsoleted for derived images -RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y; \ - rm -rf /var/lib/apt/lists/*; \ - rm -rf /tmp/*; +RUN rm -rf /tmp/* diff --git a/dockers/docker-base/etc/supervisor/supervisord.conf b/dockers/docker-base/etc/supervisor/supervisord.conf new file mode 100644 index 00000000000..afead15524b --- /dev/null +++ b/dockers/docker-base/etc/supervisor/supervisord.conf @@ -0,0 +1,28 @@ +; supervisor config file + +[unix_http_server] +file=/var/run/supervisor.sock ; (the path to the socket file) +chmod=0700 ; sockef file mode (default 0700) + +[supervisord] +logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log) +pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid) +childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP) + +; the below section must remain in the config file for RPC +; (supervisorctl/web interface) to work, additional interfaces may be +; added by defining them in separate rpcinterface: sections +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[supervisorctl] +serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket + +; The [include] section can just contain the "files" setting. This +; setting can list multiple files (separated by whitespace or +; newlines). It can also contain wildcards. The filenames are +; interpreted as relative to this file. Included files *cannot* +; include files themselves. + +[include] +files = /etc/supervisor/conf.d/*.conf diff --git a/rules/docker-base.mk b/rules/docker-base.mk index 1580c357cdd..100b858fffa 100644 --- a/rules/docker-base.mk +++ b/rules/docker-base.mk @@ -2,6 +2,7 @@ DOCKER_BASE = docker-base.gz $(DOCKER_BASE)_PATH = $(DOCKERS_PATH)/docker-base +$(DOCKER_BASE)_DEPENDS += $(SUPERVISOR) ifeq ($(SONIC_CONFIG_DEBUG),y) GDB = gdb diff --git a/rules/supervisor.mk b/rules/supervisor.mk new file mode 100644 index 00000000000..cedacd96373 --- /dev/null +++ b/rules/supervisor.mk @@ -0,0 +1,5 @@ +# supervisor package + +SUPERVISOR = python-supervisor_3.3.2-1_all.deb +$(SUPERVISOR)_SRC_PATH = $(SRC_PATH)/supervisor +SONIC_MAKE_DEBS += $(SUPERVISOR) diff --git a/sonic-slave/Dockerfile b/sonic-slave/Dockerfile index 5757eb1d869..75ea5cf744d 100644 --- a/sonic-slave/Dockerfile +++ b/sonic-slave/Dockerfile @@ -200,23 +200,31 @@ RUN apt-get update && apt-get install -y \ procmail \ # For gtest libgtest-dev \ - cmake \ + cmake + # For linux build - && apt-get -y build-dep linux \ +RUN apt-get -y build-dep linux + # For gobgp build - && apt-get -yt jessie-backports install \ +RUN apt-get -yt jessie-backports install \ golang-go \ - golang-github-golang-mock-dev \ + golang-github-golang-mock-dev + # For p4 build - && pip install \ +RUN pip install \ ctypesgen \ - crc16 \ + crc16 + # For templating - j2cli \ +RUN pip install j2cli + # For sonic config engine testing - pyangbind +RUN pip install pyangbind + +# For supervisor build +RUN pip install meld3 mock -# Install dependencies for building isc-dhcp-relay +# Install dependencies for isc-dhcp-relay build RUN apt-get -y build-dep isc-dhcp RUN cd /usr/src/gtest && cmake . && make -C /usr/src/gtest diff --git a/src/supervisor/Makefile b/src/supervisor/Makefile new file mode 100644 index 00000000000..e9f1c65210a --- /dev/null +++ b/src/supervisor/Makefile @@ -0,0 +1,22 @@ +.ONESHELL: +SHELL = /bin/bash +.SHELLFLAGS += -e + +MAIN_TARGET = python-supervisor_3.3.2-1_all.deb + +$(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : + # Remove any stale files + rm -rf ./supervisor + + # Clone isc-dhcp repo + git clone git://github.com/Supervisor/supervisor.git + pushd ./supervisor + git checkout -f 3.3.2 + + # Build Python and Debian package + python setup.py --command-packages=stdeb.command bdist_deb + popd + + # Move the newly-built .deb packages to the destination directory + mv ./supervisor/deb_dist/$* $(DEST)/ +