mirror of
				https://github.com/Telecominfraproject/ols-nos.git
				synced 2025-10-29 17:22:33 +00:00 
			
		
		
		
	Define a base Docker image and config-engine docker image based on Debian Stretch (#2076)
* Build a Docker base image based on Debian Stretch * Build a config-engine Docker image based on Stretch * Do not install socat from Debian repo * Add changes that were made to docker-base since this PR was opened
This commit is contained in:
		
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -47,7 +47,9 @@ src/thrift/* | ||||
|  | ||||
| # Autogenerated Dockerfiles | ||||
| dockers/docker-base/Dockerfile | ||||
| dockers/docker-base-stretch/Dockerfile | ||||
| dockers/docker-config-engine/Dockerfile | ||||
| dockers/docker-config-engine-stretch/Dockerfile | ||||
| dockers/docker-database/Dockerfile | ||||
| dockers/docker-dhcp-relay/Dockerfile | ||||
| dockers/docker-fpm-frr/Dockerfile | ||||
|   | ||||
							
								
								
									
										79
									
								
								dockers/docker-base-stretch/Dockerfile.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								dockers/docker-base-stretch/Dockerfile.j2
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | ||||
| FROM debian:stretch | ||||
|  | ||||
| # 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 | ||||
| RUN while [ -n "$(find /usr/share/doc -depth -type d -empty -print -exec rmdir {} +)" ]; do :; done | ||||
| RUN rm -rf               \ | ||||
|     /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"] | ||||
| COPY ["sources.list", "/etc/apt/sources.list"] | ||||
| COPY ["no_install_recommend_suggest", "/etc/apt/apt.conf.d"] | ||||
| RUN apt-get update | ||||
|  | ||||
| # Pre-install fundamental packages | ||||
| RUN apt-get -y install \ | ||||
|     less               \ | ||||
|     perl               \ | ||||
|     procps             \ | ||||
|     python             \ | ||||
|     rsyslog            \ | ||||
|     vim-tiny | ||||
|  | ||||
| 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_stretch_debs.strip() -%} | ||||
| # Copy built Debian packages | ||||
| {%- for deb in docker_base_stretch_debs.split(' ') %} | ||||
| COPY debs/{{ deb }} debs/ | ||||
| {%- endfor %} | ||||
|  | ||||
| # Install built Debian packages and implicitly install their dependencies | ||||
| {%- for deb in docker_base_stretch_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_stretch_dbgs.strip() -%} | ||||
| # Install common debug-packages | ||||
| {%- for dbg_pkg in docker_base_stretch_dbgs.split(' ') %} | ||||
| RUN apt-get -y install {{ dbg_pkg }} | ||||
| {%- endfor %} | ||||
| {% else %} | ||||
| RUN ln /usr/bin/vim.tiny /usr/bin/vim | ||||
| {%- 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/* | ||||
|  | ||||
| RUN rm -rf /tmp/* | ||||
							
								
								
									
										13
									
								
								dockers/docker-base-stretch/LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								dockers/docker-base-stretch/LICENSE
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| Copyright 2016 Microsoft, Inc. | ||||
|  | ||||
| Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| you may not use this file except in compliance with the License. | ||||
| You may obtain a copy of the License at | ||||
|  | ||||
|     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  | ||||
| Unless required by applicable law or agreed to in writing, software | ||||
| distributed under the License is distributed on an "AS IS" BASIS, | ||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| See the License for the specific language governing permissions and | ||||
| limitations under the License. | ||||
							
								
								
									
										22
									
								
								dockers/docker-base-stretch/dpkg_01_drop
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								dockers/docker-base-stretch/dpkg_01_drop
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| ## Drop unnecessary files | ||||
| ## ref: https://wiki.ubuntu.com/ReducingDiskFootprint | ||||
|  | ||||
| ## Documentation | ||||
| path-exclude /usr/share/doc/* | ||||
| # we need to keep copyright files for legal reasons | ||||
| path-include /usr/share/doc/*/copyright | ||||
| path-exclude /usr/share/man/* | ||||
| path-exclude /usr/share/groff/* | ||||
| path-exclude /usr/share/info/* | ||||
| # lintian stuff is small, but really unnecessary | ||||
| path-exclude /usr/share/lintian/* | ||||
| path-exclude /usr/share/linda/* | ||||
|  | ||||
| ## Translations | ||||
| path-exclude /usr/share/locale/* | ||||
|  | ||||
| ## Landscape | ||||
| path-exclude /usr/share/pyshared/twisted/test* | ||||
| path-exclude /usr/lib/python*/dist-packages/twisted/test* | ||||
| path-exclude /usr/share/pyshared/twisted/*/test* | ||||
| path-exclude /usr/lib/python*/dist-packages/twisted/*/test* | ||||
							
								
								
									
										69
									
								
								dockers/docker-base-stretch/etc/rsyslog.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								dockers/docker-base-stretch/etc/rsyslog.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,69 @@ | ||||
| # | ||||
| #  /etc/rsyslog.conf    Configuration file for rsyslog. | ||||
| # | ||||
| #                       For more information see | ||||
| #                       /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html | ||||
|  | ||||
|  | ||||
| ################# | ||||
| #### MODULES #### | ||||
| ################# | ||||
|  | ||||
| $ModLoad imuxsock # provides support for local system logging | ||||
| #$ModLoad imklog  # provides kernel logging support | ||||
| #$ModLoad immark  # provides --MARK-- message capability | ||||
|  | ||||
| # provides UDP syslog reception | ||||
| #$ModLoad imudp | ||||
| #$UDPServerRun 514 | ||||
|  | ||||
| # provides TCP syslog reception | ||||
| #$ModLoad imtcp | ||||
| #$InputTCPServerRun 514 | ||||
|  | ||||
|  | ||||
| ########################### | ||||
| #### GLOBAL DIRECTIVES #### | ||||
| ########################### | ||||
|  | ||||
| # Set remote syslog server | ||||
| template (name="ForwardFormatInContainer" type="string" string="<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg%") | ||||
| *.* action(type="omfwd" target="127.0.0.1" port="514" protocol="udp" Template="ForwardFormatInContainer") | ||||
|  | ||||
| # | ||||
| # Use traditional timestamp format. | ||||
| # To enable high precision timestamps, comment out the following line. | ||||
| # | ||||
| #$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat | ||||
|  | ||||
| # Define a custom template | ||||
| $template SONiCFileFormat,"%TIMESTAMP%.%timestamp:::date-subseconds% %HOSTNAME% %syslogseverity-text:::uppercase% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n" | ||||
| $ActionFileDefaultTemplate SONiCFileFormat | ||||
|  | ||||
| # | ||||
| # Set the default permissions for all log files. | ||||
| # | ||||
| $FileOwner root | ||||
| $FileGroup adm | ||||
| $FileCreateMode 0640 | ||||
| $DirCreateMode 0755 | ||||
| $Umask 0022 | ||||
|  | ||||
| # | ||||
| # Where to place spool and state files | ||||
| # | ||||
| $WorkDirectory /var/spool/rsyslog | ||||
|  | ||||
| # | ||||
| # Include all config files in /etc/rsyslog.d/ | ||||
| # | ||||
| $IncludeConfig /etc/rsyslog.d/*.conf | ||||
|  | ||||
| # | ||||
| # Suppress duplicate messages and report "message repeated n times" | ||||
| # | ||||
| $RepeatedMsgReduction on | ||||
|  | ||||
| ############### | ||||
| #### RULES #### | ||||
| ############### | ||||
| @@ -0,0 +1,9 @@ | ||||
| $ModLoad imfile | ||||
|  | ||||
| $InputFileName /var/log/supervisor/supervisord.log | ||||
| $InputFileTag supervisord | ||||
| $InputFileStateFile state-supervisor | ||||
| $InputFileSeverity info | ||||
| $InputFileFacility local0 | ||||
| $InputFilePersistStateInterval 1 | ||||
| $InputRunFileMonitor | ||||
							
								
								
									
										33
									
								
								dockers/docker-base-stretch/etc/supervisor/supervisord.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								dockers/docker-base-stretch/etc/supervisor/supervisord.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | ||||
| ; supervisor config file | ||||
|  | ||||
| [unix_http_server] | ||||
| file=/var/run/supervisor.sock   ; (the path to the socket file) | ||||
| chmod=0700                       ; sockef file mode (default 0700) | ||||
| username=dummy | ||||
| password=dummy | ||||
|  | ||||
| [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) | ||||
| user=root | ||||
|  | ||||
| ; 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 | ||||
| username=dummy | ||||
| password=dummy | ||||
|  | ||||
| ; 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 | ||||
							
								
								
									
										5
									
								
								dockers/docker-base-stretch/no_install_recommend_suggest
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								dockers/docker-base-stretch/no_install_recommend_suggest
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| # Instruct apt-get to NOT install "recommended" or "suggested" packages by | ||||
| # default when installing a package. | ||||
|  | ||||
| APT::Install-Recommends "false"; | ||||
| APT::Install-Suggests "false"; | ||||
							
								
								
									
										2
									
								
								dockers/docker-base-stretch/root/.vimrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								dockers/docker-base-stretch/root/.vimrc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| " enable vim features | ||||
| set nocompatible | ||||
							
								
								
									
										8
									
								
								dockers/docker-base-stretch/sources.list
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								dockers/docker-base-stretch/sources.list
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| ## Debian mirror on Microsoft Azure | ||||
| ## Ref: http://debian-archive.trafficmanager.net/ | ||||
|  | ||||
| deb http://debian-archive.trafficmanager.net/debian/ stretch main contrib non-free | ||||
| deb-src http://debian-archive.trafficmanager.net/debian/ stretch main contrib non-free | ||||
| deb http://debian-archive.trafficmanager.net/debian-security/ stretch/updates main contrib non-free | ||||
| deb-src http://debian-archive.trafficmanager.net/debian-security/ stretch/updates main contrib non-free | ||||
| deb http://debian-archive.trafficmanager.net/debian/ stretch-backports main contrib non-free | ||||
							
								
								
									
										47
									
								
								dockers/docker-config-engine-stretch/Dockerfile.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								dockers/docker-config-engine-stretch/Dockerfile.j2
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | ||||
| FROM docker-base-stretch | ||||
|  | ||||
| ## Make apt-get non-interactive | ||||
| ENV DEBIAN_FRONTEND=noninteractive | ||||
|  | ||||
| RUN apt-get update | ||||
|  | ||||
| # Dependencies for sonic-cfggen | ||||
| RUN apt-get install -y python-lxml python-yaml python-bitarray python-pip python-dev python-natsort python-setuptools | ||||
|  | ||||
| RUN pip install --upgrade pip | ||||
|  | ||||
| RUN pip install netaddr ipaddr jinja2 pyangbind==0.5.10 | ||||
|  | ||||
| {% if docker_config_engine_stretch_debs.strip() %} | ||||
| COPY \ | ||||
| {% for deb in docker_config_engine_stretch_debs.split(' ') -%} | ||||
| debs/{{ deb }}{{' '}} | ||||
| {%- endfor -%} | ||||
| debs/ | ||||
| {%- endif -%} | ||||
|  | ||||
| {% if docker_config_engine_stretch_debs.strip() %} | ||||
| RUN dpkg -i \ | ||||
| {% for deb in docker_config_engine_stretch_debs.split(' ') -%} | ||||
| debs/{{ deb }}{{' '}} | ||||
| {%- endfor %} | ||||
| {%- endif -%} | ||||
|  | ||||
| {% if docker_config_engine_stretch_whls.strip() %} | ||||
| COPY \ | ||||
| {% for whl in docker_config_engine_stretch_whls.split(' ') -%} | ||||
| python-wheels/{{ whl }}{{' '}} | ||||
| {%- endfor -%} | ||||
| python-wheels/ | ||||
| {%- endif -%} | ||||
|  | ||||
| {% if docker_config_engine_stretch_whls.strip() %} | ||||
| RUN pip install \ | ||||
| {% for whl in docker_config_engine_stretch_whls.split(' ') -%} | ||||
| python-wheels/{{ whl }}{{' '}} | ||||
| {%- endfor %} | ||||
| {%- endif -%} | ||||
|  | ||||
| ## Clean up | ||||
| RUN apt-get remove -y python-pip python-dev; apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y | ||||
| RUN rm -rf /debs /python-wheels | ||||
							
								
								
									
										18
									
								
								rules/docker-base-stretch.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								rules/docker-base-stretch.mk
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| # Docker base image (based on Debian Stretch) | ||||
|  | ||||
| DOCKER_BASE_STRETCH = docker-base-stretch.gz | ||||
| $(DOCKER_BASE_STRETCH)_PATH = $(DOCKERS_PATH)/docker-base-stretch | ||||
| $(DOCKER_BASE_STRETCH)_DEPENDS += $(SUPERVISOR) | ||||
| $(DOCKER_BASE_STRETCH)_DEPENDS += $(SOCAT) | ||||
|  | ||||
| ifeq ($(INSTALL_DEBUG_TOOLS),y) | ||||
| GDB = gdb | ||||
| GDBSERVER = gdbserver | ||||
| VIM = vim | ||||
| OPENSSH = openssh-client | ||||
| SSHPASS = sshpass | ||||
| STRACE = strace | ||||
| $(DOCKER_BASE_STRETCH)_DBG_PACKAGES += $(GDB) $(GDBSERVER) $(VIM) $(OPENSSH) $(SSHPASS) $(STRACE) | ||||
| endif | ||||
|  | ||||
| SONIC_DOCKER_IMAGES += $(DOCKER_BASE_STRETCH) | ||||
							
								
								
									
										8
									
								
								rules/docker-config-engine-stretch.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								rules/docker-config-engine-stretch.mk
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| # docker image for sonic config engine | ||||
|  | ||||
| DOCKER_CONFIG_ENGINE_STRETCH = docker-config-engine-stretch.gz | ||||
| $(DOCKER_CONFIG_ENGINE_STRETCH)_PATH = $(DOCKERS_PATH)/docker-config-engine-stretch | ||||
| $(DOCKER_CONFIG_ENGINE_STRETCH)_PYTHON_WHEELS += $(SWSSSDK_PY2) | ||||
| $(DOCKER_CONFIG_ENGINE_STRETCH)_PYTHON_WHEELS += $(SONIC_CONFIG_ENGINE) | ||||
| $(DOCKER_CONFIG_ENGINE_STRETCH)_LOAD_DOCKERS += $(DOCKER_BASE_STRETCH) | ||||
| SONIC_DOCKER_IMAGES += $(DOCKER_CONFIG_ENGINE_STRETCH) | ||||
		Reference in New Issue
	
	Block a user
	 Joe LeVeque
					Joe LeVeque