afbf1ee2fb
In case when more than one user builds SONiC on same machine, we can keep generic part that installs all packages to slave image apart from creating user and calling user-related commands. Then generic base image will be built only once, allowing other users to build only smaller specific to them layers. Signed-off-by: marian-pritsak <marianp@mellanox.com>
74 lines
2.6 KiB
Makefile
74 lines
2.6 KiB
Makefile
###############################################################################
|
|
## Wrapper for starting make inside sonic-slave container
|
|
###############################################################################
|
|
|
|
SHELL = /bin/bash
|
|
|
|
USER := $(shell id -un)
|
|
PWD := $(shell pwd)
|
|
|
|
# Remove lock file in case previous run was forcefully stopped
|
|
$(shell rm -f .screen)
|
|
|
|
MAKEFLAGS += -B
|
|
|
|
SLAVE_BASE_TAG = $(shell shasum sonic-slave/Dockerfile | awk '{print substr($$1,0,11);}')
|
|
SLAVE_TAG = $(shell shasum sonic-slave/Dockerfile.user | awk '{print substr($$1,0,11);}')
|
|
SLAVE_BASE_IMAGE = sonic-slave-base
|
|
SLAVE_IMAGE = sonic-slave-$(USER)
|
|
|
|
DOCKER_RUN := docker run --rm=true --privileged \
|
|
-v $(PWD):/sonic \
|
|
-w /sonic \
|
|
-i$(if $(TERM),t,)
|
|
|
|
DOCKER_BASE_BUILD = docker build --no-cache \
|
|
-t $(SLAVE_BASE_IMAGE) \
|
|
sonic-slave && \
|
|
docker tag $(SLAVE_BASE_IMAGE):latest $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG)
|
|
|
|
DOCKER_BUILD = docker build --no-cache \
|
|
--build-arg user=$(USER) \
|
|
--build-arg uid=$(shell id -u) \
|
|
--build-arg guid=$(shell id -g) \
|
|
--build-arg hostname=$(shell echo $$HOSTNAME) \
|
|
-t $(SLAVE_IMAGE) \
|
|
-f sonic-slave/Dockerfile.user \
|
|
sonic-slave && \
|
|
docker tag $(SLAVE_IMAGE):latest $(SLAVE_IMAGE):$(SLAVE_TAG)
|
|
|
|
.PHONY: sonic-slave-build sonic-slave-bash
|
|
|
|
.DEFAULT_GOAL := all
|
|
|
|
%::
|
|
@docker inspect --type image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) &> /dev/null || \
|
|
{ echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found. Building... ; \
|
|
$(DOCKER_BASE_BUILD) ; }
|
|
@docker inspect --type image $(SLAVE_IMAGE):$(SLAVE_TAG) &> /dev/null || \
|
|
{ echo Image $(SLAVE_IMAGE):$(SLAVE_TAG) not found. Building... ; \
|
|
$(DOCKER_BUILD) ; }
|
|
@$(DOCKER_RUN) $(SLAVE_IMAGE):$(SLAVE_TAG) make \
|
|
-f slave.mk \
|
|
PLATFORM=$(PLATFORM) \
|
|
BUILD_NUMBER=$(BUILD_NUMBER) \
|
|
ENABLE_DHCP_GRAPH_SERVICE=$(ENABLE_DHCP_GRAPH_SERVICE) \
|
|
SHUTDOWN_BGP_ON_START=$(SHUTDOWN_BGP_ON_START) \
|
|
SONIC_ENABLE_SYNCD_RPC=$(ENABLE_SYNCD_RPC) \
|
|
PASSWORD=$(PASSWORD) \
|
|
USERNAME=$(USERNAME) \
|
|
$@
|
|
|
|
sonic-slave-build :
|
|
$(DOCKER_BASE_BUILD)
|
|
$(DOCKER_BUILD)
|
|
|
|
sonic-slave-bash :
|
|
@docker inspect --type image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) &> /dev/null || \
|
|
{ echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found. Building... ; \
|
|
$(DOCKER_BASE_BUILD) ; }
|
|
@docker inspect --type image $(SLAVE_IMAGE):$(SLAVE_TAG) &> /dev/null || \
|
|
{ echo Image $(SLAVE_IMAGE):$(SLAVE_TAG) not found. Building... ; \
|
|
$(DOCKER_BUILD) ; }
|
|
@$(DOCKER_RUN) -t $(SLAVE_IMAGE):$(SLAVE_TAG) bash
|