Skip to content

Commit f2da2aa

Browse files
Support for package version caching
During the SONiC build, it downloads and installs packages for multiple build components which includes debian packages, pip modules, python packages, source code packages, git modules and docker images. The package versioning feature provides an infrastructure to select and freeze a particular version of a package. The package version caching feature provides an infrastructure to cache the package with the given version into a local storage, so that subsequent installation will not download from web instead it will load from local cache path. The following variable controls the verion caching feature. By default it is truned off. SONIC_VERSION_CACHE_METHOD = [none/cache] SONIC_VERSION_CACHE_SOURCE = /path/to/local/storage
1 parent 45ded68 commit f2da2aa

39 files changed

+1467
-223
lines changed

Makefile

+3-2
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,9 @@ ifeq ($(NOBUSTER), 0)
3939
endif
4040
ifeq ($(NOBULLSEYE), 0)
4141
BLDENV=bullseye make -f Makefile.work $@
42+
else
43+
make -f Makefile.work $@
4244
endif
43-
BLDENV=bullseye make -f Makefile.work docker-cleanup
4445

4546
jessie:
4647
@echo "+++ Making $@ +++"
@@ -84,7 +85,7 @@ $(PLATFORM_PATH):
8485
configure : $(PLATFORM_PATH)
8586
$(call make_work, $@)
8687

87-
clean reset showtag docker-cleanup sonic-slave-build sonic-slave-bash :
88+
clean reset showtag sonic-slave-build sonic-slave-bash :
8889
$(call make_work, $@)
8990

9091
# Freeze the versions, see more detail options: scripts/versions_manager.py freeze -h

Makefile.work

+91-41
Original file line numberDiff line numberDiff line change
@@ -172,21 +172,40 @@ endif
172172
endif
173173

174174
# Generate the version control build info
175+
SONIC_VERSION_CACHE := $(filter-out none,$(SONIC_VERSION_CACHE_METHOD))
176+
SONIC_OVERRIDE_BUILD_VARS += SONIC_VERSION_CACHE=$(SONIC_VERSION_CACHE)
177+
SONIC_OVERRIDE_BUILD_VARS += SONIC_VERSION_CACHE_SOURCE=$(SONIC_VERSION_CACHE_SOURCE)
178+
export SONIC_VERSION_CACHE SONIC_VERSION_CACHE_SOURCE
179+
$(shell test -d $(SONIC_VERSION_CACHE_SOURCE) || \
180+
mkdir -p $(SONIC_VERSION_CACHE_SOURCE) && chmod -f 777 $(SONIC_VERSION_CACHE_SOURCE) 2>/dev/null )
175181
$(shell SONIC_VERSION_CONTROL_COMPONENTS=$(SONIC_VERSION_CONTROL_COMPONENTS) \
176182
TRUSTED_GPG_URLS=$(TRUSTED_GPG_URLS) PACKAGE_URL_PREFIX=$(PACKAGE_URL_PREFIX) \
183+
DBGOPT='$(DBGOPT)' \
184+
DISTRO=$(BLDENV) \
185+
SONIC_VERSION_CACHE=$(SONIC_VERSION_CACHE) \
186+
SONIC_VERSION_CACHE_SOURCE=$(SONIC_VERSION_CACHE_SOURCE) \
177187
scripts/generate_buildinfo_config.sh)
178188

179189
# Generate the slave Dockerfile, and prepare build info for it
180-
$(shell CONFIGURED_ARCH=$(CONFIGURED_ARCH) MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) CROSS_BUILD_ENVIRON=$(CROSS_BUILD_ENVIRON) ENABLE_FIPS_FEATURE=$(ENABLE_FIPS_FEATURE) DOCKER_EXTRA_OPTS=$(DOCKER_EXTRA_OPTS) DEFAULT_CONTAINER_REGISTRY=$(DEFAULT_CONTAINER_REGISTRY) j2 $(SLAVE_DIR)/Dockerfile.j2 > $(SLAVE_DIR)/Dockerfile)
181-
$(shell CONFIGURED_ARCH=$(CONFIGURED_ARCH) MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) CROSS_BUILD_ENVIRON=$(CROSS_BUILD_ENVIRON) j2 $(SLAVE_DIR)/Dockerfile.user.j2 > $(SLAVE_DIR)/Dockerfile.user)
182-
$(shell BUILD_SLAVE=y DEFAULT_CONTAINER_REGISTRY=$(DEFAULT_CONTAINER_REGISTRY) scripts/prepare_docker_buildinfo.sh $(SLAVE_BASE_IMAGE) $(SLAVE_DIR)/Dockerfile $(CONFIGURED_ARCH) "" $(BLDENV))
190+
$(shell CONFIGURED_ARCH=$(CONFIGURED_ARCH) MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) \
191+
CROSS_BUILD_ENVIRON=$(CROSS_BUILD_ENVIRON) ENABLE_FIPS_FEATURE=$(ENABLE_FIPS_FEATURE) DOCKER_EXTRA_OPTS=$(DOCKER_EXTRA_OPTS) \
192+
DEFAULT_CONTAINER_REGISTRY=$(DEFAULT_CONTAINER_REGISTRY) j2 $(SLAVE_DIR)/Dockerfile.j2 > $(SLAVE_DIR)/Dockerfile)
193+
$(shell CONFIGURED_ARCH=$(CONFIGURED_ARCH) MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) \
194+
CROSS_BUILD_ENVIRON=$(CROSS_BUILD_ENVIRON) j2 $(SLAVE_DIR)/Dockerfile.user.j2 > $(SLAVE_DIR)/Dockerfile.user)
183195

196+
PREPARE_DOCKER=DEFAULT_CONTAINER_REGISTRY=$(DEFAULT_CONTAINER_REGISTRY) BUILD_SLAVE=y DBGOPT='$(DBGOPT)' SONIC_VERSION_CACHE=$(SONIC_VERSION_CACHE) \
197+
scripts/prepare_docker_buildinfo.sh $(SLAVE_BASE_IMAGE) $(SLAVE_DIR)/Dockerfile $(CONFIGURED_ARCH) "" $(BLDENV)
198+
199+
$(shell $(PREPARE_DOCKER) )
184200
# Add the versions in the tag, if the version change, need to rebuild the slave
185-
SLAVE_BASE_TAG = $(shell cat $(SLAVE_DIR)/Dockerfile $(SLAVE_DIR)/buildinfo/versions/versions-* src/sonic-build-hooks/hooks/* | sha1sum | awk '{print substr($$1,0,11);}')
201+
SLAVE_BASE_TAG = $(shell cat $(SLAVE_DIR)/Dockerfile $(SLAVE_DIR)/buildinfo/versions/versions-* src/sonic-build-hooks/hooks/* 2>/dev/null | sha1sum | awk '{print substr($$1,0,11);}')
186202
# Calculate the slave TAG based on $(USER)/$(PWD)/$(CONFIGURED_PLATFORM) to get unique SHA ID
187-
SLAVE_TAG = $(shell (cat $(SLAVE_DIR)/Dockerfile.user $(SLAVE_DIR)/Dockerfile $(SLAVE_DIR)/buildinfo/versions/versions-* .git/HEAD && echo $(USER)/$(PWD)/$(CONFIGURED_PLATFORM)) \
203+
SLAVE_TAG = $(shell (cat $(SLAVE_DIR)/Dockerfile.user $(SLAVE_DIR)/Dockerfile $(SLAVE_DIR)/buildinfo/versions/versions-* .git/HEAD 2>/dev/null && echo $(USER)/$(PWD)/$(CONFIGURED_PLATFORM)) \
188204
| sha1sum | awk '{print substr($$1,0,11);}')
189205

206+
COLLECT_DOCKER=DEFAULT_CONTAINER_REGISTRY=$(DEFAULT_CONTAINER_REGISTRY) DBGOPT='$(DBGOPT)' SONIC_VERSION_CACHE=$(SONIC_VERSION_CACHE) \
207+
scripts/collect_docker_version_files.sh $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) target $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) $(SLAVE_DIR) $(SLAVE_DIR)/Dockerfile
208+
190209
OVERLAY_MODULE_CHECK := \
191210
lsmod | grep -q "^overlay " &>/dev/null || \
192211
zgrep -q 'CONFIG_OVERLAY_FS=y' /proc/config.gz &>/dev/null || \
@@ -240,6 +259,10 @@ ifneq ($(SONIC_DPKG_CACHE_SOURCE),)
240259
DOCKER_RUN += -v "$(SONIC_DPKG_CACHE_SOURCE):/dpkg_cache:rw"
241260
endif
242261

262+
ifneq ($(SONIC_VERSION_CACHE_SOURCE),)
263+
DOCKER_RUN += -v "$(SONIC_VERSION_CACHE_SOURCE):/vcache:rw"
264+
endif
265+
243266
ifeq ($(SONIC_ENABLE_SECUREBOOT_SIGNATURE), y)
244267
ifneq ($(SIGNING_KEY),)
245268
DOCKER_SIGNING_SOURCE := $(shell dirname $(SIGNING_KEY))
@@ -328,26 +351,65 @@ DOCKER_BASE_LOG = $(SLAVE_DIR)/$(SLAVE_BASE_IMAGE)_$(SLAVE_BASE_TAG).log
328351
DOCKER_LOG = $(SLAVE_DIR)/$(SLAVE_IMAGE)_$(SLAVE_TAG).log
329352

330353

331-
DOCKER_BASE_BUILD = docker build --no-cache \
354+
DOCKER_SLAVE_BASE_BUILD = docker build --no-cache \
332355
-t $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) \
333356
--build-arg http_proxy=$(http_proxy) \
334357
--build-arg https_proxy=$(https_proxy) \
335358
--build-arg no_proxy=$(no_proxy) \
336-
$(SLAVE_DIR) $(SPLIT_LOG) $(DOCKER_BASE_LOG)
359+
--build-arg SONIC_VERSION_CACHE=$(SONIC_VERSION_CACHE) \
360+
--build-arg SONIC_VERSION_CONTROL_COMPONENTS=$(SONIC_VERSION_CONTROL_COMPONENTS) \
361+
$(SLAVE_DIR) \
362+
| awk '/^_VCSTART_$$/,/^_VCEND_$$/{if($$0 !~ /_VCSTART_|_VCEND_/)print >"$(SLAVE_BASE_IMAGE)/vcache/cache.base64";next}{print }' \
363+
$(SPLIT_LOG) $(DOCKER_BASE_LOG)
364+
337365

338366
DOCKER_BASE_PULL = docker pull \
339367
$(REGISTRY_SERVER):$(REGISTRY_PORT)/$(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG)
340368

341-
DOCKER_BUILD = docker build --no-cache \
369+
DOCKER_USER_BUILD = docker build --no-cache \
342370
--build-arg user=$(USER) \
343371
--build-arg uid=$(shell id -u) \
344372
--build-arg guid=$(shell id -g) \
345373
--build-arg hostname=$(shell echo $$HOSTNAME) \
346-
--build-arg slave_base_tag_ref=$(SLAVE_BASE_TAG) \
374+
--build-arg slave_base_tag_ref=$(SLAVE_BASE_TAG) \
347375
-t $(SLAVE_IMAGE):$(SLAVE_TAG) \
348376
-f $(SLAVE_DIR)/Dockerfile.user \
349377
$(SLAVE_DIR) $(SPLIT_LOG) $(DOCKER_LOG)
350378

379+
380+
DOCKER_SLAVE_BASE_BUILD_REGISTRY = \
381+
{ \
382+
[ $(ENABLE_DOCKER_BASE_PULL) == y ] && { echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found. Pulling...; } && \
383+
$(DOCKER_BASE_PULL) && \
384+
{ \
385+
docker tag $(REGISTRY_SERVER):$(REGISTRY_PORT)/$(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) && \
386+
$(COLLECT_DOCKER) ; \
387+
} \
388+
} || \
389+
{ \
390+
echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found in registry. Building... ; \
391+
$(PREPARE_DOCKER) ; \
392+
$(DOCKER_SLAVE_BASE_BUILD) ; \
393+
$(COLLECT_DOCKER) ; \
394+
}
395+
396+
SONIC_SLAVE_BASE_BUILD = \
397+
echo Checking sonic-slave-base image: $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG); \
398+
docker inspect --type image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) &> /dev/null || \
399+
{ \
400+
echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found. Building... ; \
401+
$(DOCKER_SLAVE_BASE_BUILD_REGISTRY) ; \
402+
}
403+
404+
SONIC_SLAVE_USER_BUILD = \
405+
echo Checking sonic-slave image: $(SLAVE_IMAGE):$(SLAVE_TAG); \
406+
docker inspect --type image $(SLAVE_IMAGE):$(SLAVE_TAG) &> /dev/null || \
407+
{ \
408+
echo Image $(SLAVE_IMAGE):$(SLAVE_TAG) not found. Building... ; \
409+
$(DOCKER_USER_BUILD) ; \
410+
}
411+
412+
351413
SONIC_BUILD_INSTRUCTION := make \
352414
-f slave.mk \
353415
PLATFORM=$(PLATFORM) \
@@ -412,9 +474,16 @@ SONIC_BUILD_INSTRUCTION := make \
412474

413475
.PHONY: sonic-slave-build sonic-slave-bash init reset
414476

477+
478+
COLLECT_BUILD_VERSION = DBGOPT='$(DBGOPT)' scripts/collect_build_version_files.sh $$?
479+
ifneq ($(filter clean,$(MAKECMDGOALS)),)
480+
COLLECT_BUILD_VERSION="echo "
481+
endif
482+
483+
415484
.DEFAULT_GOAL := all
416485

417-
%::
486+
%::|sonic-build-hooks
418487
ifneq ($(filter y, $(MULTIARCH_QEMU_ENVIRON) $(CROSS_BUILD_ENVIRON)),)
419488
@$(DOCKER_MULTIARCH_CHECK)
420489
ifneq ($(BLDENV), )
@@ -423,57 +492,38 @@ ifneq ($(BLDENV), )
423492
endif
424493
endif
425494
@$(OVERLAY_MODULE_CHECK)
495+
@$(SONIC_SLAVE_BASE_BUILD)
496+
@$(SONIC_SLAVE_USER_BUILD)
426497

427-
@pushd src/sonic-build-hooks; TRUSTED_GPG_URLS=$(TRUSTED_GPG_URLS) make all; popd
428-
@cp src/sonic-build-hooks/buildinfo/sonic-build-hooks* $(SLAVE_DIR)/buildinfo
429-
@docker inspect --type image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) &> /dev/null || \
430-
{ [ $(ENABLE_DOCKER_BASE_PULL) == y ] && { echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found. Pulling...; } && \
431-
$(DOCKER_BASE_PULL) && \
432-
{ docker tag $(REGISTRY_SERVER):$(REGISTRY_PORT)/$(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) && \
433-
scripts/collect_docker_version_files.sh $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) target ; } } || \
434-
{ echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found. Building... ; \
435-
$(DOCKER_BASE_BUILD) ; \
436-
scripts/collect_docker_version_files.sh $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) target ; }
437-
@docker inspect --type image $(SLAVE_IMAGE):$(SLAVE_TAG) &> /dev/null || \
438-
{ echo Image $(SLAVE_IMAGE):$(SLAVE_TAG) not found. Building... ; \
439-
$(DOCKER_BUILD) ; }
440498
ifeq "$(KEEP_SLAVE_ON)" "yes"
441499
ifdef SOURCE_FOLDER
442-
@$(DOCKER_RUN) -v $(SOURCE_FOLDER):/var/$(USER)/src $(SLAVE_IMAGE):$(SLAVE_TAG) bash -c "$(SONIC_BUILD_INSTRUCTION) $@; scripts/collect_build_version_files.sh \$$?; /bin/bash"
500+
@$(DOCKER_RUN) -v $(SOURCE_FOLDER):/var/$(USER)/src $(SLAVE_IMAGE):$(SLAVE_TAG) bash -c "$(SONIC_BUILD_INSTRUCTION) $@; $(COLLECT_BUILD_VERSION); /bin/bash"
443501
else
444-
@$(DOCKER_RUN) $(SLAVE_IMAGE):$(SLAVE_TAG) bash -c "$(SONIC_BUILD_INSTRUCTION) $@; scripts/collect_build_version_files.sh \$$?; /bin/bash"
502+
@$(DOCKER_RUN) $(SLAVE_IMAGE):$(SLAVE_TAG) bash -c "$(SONIC_BUILD_INSTRUCTION) $@; $(COLLECT_BUILD_VERSION); /bin/bash"
445503
endif
446504
else
447-
@$(DOCKER_RUN) $(SLAVE_IMAGE):$(SLAVE_TAG) bash -c "$(SONIC_BUILD_INSTRUCTION) $@; scripts/collect_build_version_files.sh \$$?"
505+
@$(DOCKER_RUN) $(SLAVE_IMAGE):$(SLAVE_TAG) bash -c "$(SONIC_BUILD_INSTRUCTION) $@; $(COLLECT_BUILD_VERSION);"
506+
@$(docker-image-cleanup)
448507
endif
449508

450509
docker-cleanup:
451-
$(docker-image-cleanup)
510+
@$(docker-image-cleanup)
452511

512+
.PHONY: sonic-build-hooks
453513
sonic-build-hooks:
454514
@pushd src/sonic-build-hooks; TRUSTED_GPG_URLS=$(TRUSTED_GPG_URLS) make all; popd
515+
@mkdir -p $(SLAVE_DIR)/buildinfo
455516
@cp src/sonic-build-hooks/buildinfo/sonic-build-hooks* $(SLAVE_DIR)/buildinfo
456517

457-
sonic-slave-base-build : sonic-build-hooks
518+
sonic-slave-base-build : |sonic-build-hooks
458519
ifeq ($(MULTIARCH_QEMU_ENVIRON), y)
459520
@$(DOCKER_MULTIARCH_CHECK)
460521
endif
461522
@$(OVERLAY_MODULE_CHECK)
462-
@echo Checking sonic-slave-base image: $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG)
463-
@docker inspect --type image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) &> /dev/null || \
464-
{ [ $(ENABLE_DOCKER_BASE_PULL) == y ] && { echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found. Pulling...; } && \
465-
$(DOCKER_BASE_PULL) && \
466-
{ docker tag $(REGISTRY_SERVER):$(REGISTRY_PORT)/$(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) && \
467-
scripts/collect_docker_version_files.sh $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) target ; } } || \
468-
{ echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found. Building... ; \
469-
$(DOCKER_BASE_BUILD) ; \
470-
scripts/collect_docker_version_files.sh $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) target ; }
523+
@$(SONIC_SLAVE_BASE_BUILD)
471524

472525
sonic-slave-build : sonic-slave-base-build
473-
@echo Checking sonic-slave image: $(SLAVE_IMAGE):$(SLAVE_TAG)
474-
@docker inspect --type image $(SLAVE_IMAGE):$(SLAVE_TAG) &> /dev/null || \
475-
{ echo Image $(SLAVE_IMAGE):$(SLAVE_TAG) not found. Building... ; \
476-
$(DOCKER_BUILD) ; }
526+
@$(SONIC_SLAVE_USER_BUILD)
477527

478528
sonic-slave-bash : sonic-slave-build
479529
@$(DOCKER_RUN) -t $(SLAVE_IMAGE):$(SLAVE_TAG) bash

build_debian.sh

+29-25
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,9 @@ echo '[INFO] Build host debian base system...'
8181
TARGET_PATH=$TARGET_PATH scripts/build_debian_base_system.sh $CONFIGURED_ARCH $IMAGE_DISTRO $FILESYSTEM_ROOT
8282

8383
# Prepare buildinfo
84-
sudo scripts/prepare_debian_image_buildinfo.sh $CONFIGURED_ARCH $IMAGE_DISTRO $FILESYSTEM_ROOT $http_proxy
84+
sudo DBGOPT="${DBGOPT}" SONIC_VERSION_CACHE=${SONIC_VERSION_CACHE} \
85+
scripts/prepare_debian_image_buildinfo.sh $CONFIGURED_ARCH $IMAGE_DISTRO $FILESYSTEM_ROOT $http_proxy
86+
8587

8688
sudo chown root:root $FILESYSTEM_ROOT
8789

@@ -111,8 +113,28 @@ sudo LANG=C chroot $FILESYSTEM_ROOT mount
111113
sudo cp files/apt/sources.list.$CONFIGURED_ARCH $FILESYSTEM_ROOT/etc/apt/sources.list
112114
sudo cp files/apt/apt.conf.d/{81norecommends,apt-{clean,gzip-indexes,no-languages},no-check-valid-until} $FILESYSTEM_ROOT/etc/apt/apt.conf.d/
113115

116+
sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y install apt-transport-https \
117+
ca-certificates \
118+
curl \
119+
gnupg2 \
120+
software-properties-common
121+
if [[ $CONFIGURED_ARCH == armhf ]]; then
122+
# update ssl ca certificates for secure pem
123+
sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT c_rehash
124+
fi
125+
sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT curl -o /tmp/docker.asc -fsSL https://download.docker.com/linux/debian/gpg
126+
sudo LANG=C chroot $FILESYSTEM_ROOT mv /tmp/docker.asc /etc/apt/trusted.gpg.d/
127+
sudo LANG=C chroot $FILESYSTEM_ROOT add-apt-repository \
128+
"deb [arch=$CONFIGURED_ARCH] https://download.docker.com/linux/debian $IMAGE_DISTRO stable"
129+
sudo LANG=C chroot $FILESYSTEM_ROOT apt-get update
130+
sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y install docker-ce=${DOCKER_VERSION} docker-ce-cli=${DOCKER_VERSION} containerd.io=${CONTAINERD_IO_VERSION}
131+
132+
# Uninstall 'python3-gi' installed as part of 'software-properties-common' to remove debian version of 'PyGObject'
133+
# pip version of 'PyGObject' will be installed during installation of 'sonic-host-services'
134+
sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y remove software-properties-common gnupg2 python3-gi
135+
114136
## Note: set lang to prevent locale warnings in your chroot
115-
sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y update
137+
sudo LANG=C chroot $FILESYSTEM_ROOT apt-get update
116138
sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y upgrade
117139

118140
echo '[INFO] Install and setup eatmydata'
@@ -233,25 +255,6 @@ echo '[INFO] Install docker'
233255
## Otherwise Docker will fail to start
234256
sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y install apparmor
235257
sudo cp files/image_config/ntp/ntp-apparmor $FILESYSTEM_ROOT/etc/apparmor.d/local/usr.sbin.ntpd
236-
sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y install apt-transport-https \
237-
ca-certificates \
238-
curl \
239-
gnupg2 \
240-
software-properties-common
241-
if [[ $CONFIGURED_ARCH == armhf ]]; then
242-
# update ssl ca certificates for secure pem
243-
sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT c_rehash
244-
fi
245-
sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT curl -o /tmp/docker.asc -fsSL https://download.docker.com/linux/debian/gpg
246-
sudo LANG=C chroot $FILESYSTEM_ROOT mv /tmp/docker.asc /etc/apt/trusted.gpg.d/
247-
sudo LANG=C chroot $FILESYSTEM_ROOT add-apt-repository \
248-
"deb [arch=$CONFIGURED_ARCH] https://download.docker.com/linux/debian $IMAGE_DISTRO stable"
249-
sudo LANG=C chroot $FILESYSTEM_ROOT apt-get update
250-
sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y install docker-ce=${DOCKER_VERSION} docker-ce-cli=${DOCKER_VERSION} containerd.io=${CONTAINERD_IO_VERSION}
251-
252-
# Uninstall 'python3-gi' installed as part of 'software-properties-common' to remove debian version of 'PyGObject'
253-
# pip version of 'PyGObject' will be installed during installation of 'sonic-host-services'
254-
sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y remove software-properties-common gnupg2 python3-gi
255258

256259
if [ "$INCLUDE_KUBERNETES" == "y" ]
257260
then
@@ -403,10 +406,10 @@ if [[ $TARGET_BOOTLOADER == grub ]]; then
403406
GRUB_PKG=grub-efi-arm64-bin
404407
fi
405408

406-
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y download \
409+
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get install -d -o dir::cache=/var/cache/apt \
407410
$GRUB_PKG
408411

409-
sudo mv $FILESYSTEM_ROOT/grub*.deb $FILESYSTEM_ROOT/$PLATFORM_DIR/grub
412+
sudo cp $FILESYSTEM_ROOT/var/cache/apt/archives/grub*.deb $FILESYSTEM_ROOT/$PLATFORM_DIR/grub
410413
fi
411414

412415
## Disable kexec supported reboot which was installed by default
@@ -596,7 +599,8 @@ if [[ $TARGET_BOOTLOADER == uboot ]]; then
596599
fi
597600

598601
# Collect host image version files before cleanup
599-
scripts/collect_host_image_version_files.sh $TARGET_PATH $FILESYSTEM_ROOT
602+
DBGOPT="${DBGOPT}" SONIC_VERSION_CACHE=${SONIC_VERSION_CACHE} \
603+
scripts/collect_host_image_version_files.sh $CONFIGURED_ARCH $IMAGE_DISTRO $TARGET_PATH $FILESYSTEM_ROOT
600604

601605
# Remove GCC
602606
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y remove gcc
@@ -615,7 +619,7 @@ sudo LANG=C chroot $FILESYSTEM_ROOT bash -c 'rm -rf /usr/share/doc/* /usr/share/
615619
[ -n "$http_proxy" ] && sudo rm -f $FILESYSTEM_ROOT/etc/apt/apt.conf.d/01proxy
616620

617621
## Clean up pip cache
618-
sudo LANG=C chroot $FILESYSTEM_ROOT pip3 cache purge
622+
sudo LANG=C chroot $FILESYSTEM_ROOT pip3 cache purge || true
619623

620624
## Umount all
621625
echo '[INFO] Umount all'

dockers/dockerfile-macros.j2

+4
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ RUN cd /python-wheels/ && pip3 install {{ packages | join(' ') }}
3030
{%- endif %}
3131
{%- endmacro %}
3232

33+
{% macro install_python3_wheels(packages) -%}
34+
RUN cd /python-wheels/ && python3 -m pip install {{ packages | join(' ') }}
35+
{%- endmacro %}
36+
3337
{% macro copy_files(prefix, files, dest) -%}
3438
COPY \
3539
{%- for file in files %}

platform/broadcom/sai.mk

+5
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,9 @@ $(BRCM_DNX_SAI)_URL = "$(LIBSAIBCM_DNX_URL_PREFIX)/$(BRCM_DNX_SAI)"
1717
SONIC_ONLINE_DEBS += $(BRCM_XGS_SAI)
1818
SONIC_ONLINE_DEBS += $(BRCM_DNX_SAI)
1919
$(BRCM_XGS_SAI_DEV)_DEPENDS += $(BRCM_XGS_SAI)
20+
21+
$(BRCM_XGS_SAI)_SKIP_VERSION=y
22+
$(BRCM_XGS_SAI_DEV)_SKIP_VERSION=y
23+
$(BRCM_DNX_SAI)_SKIP_VERSION=y
24+
2025
$(eval $(call add_conflict_package,$(BRCM_XGS_SAI_DEV),$(LIBSAIVS_DEV)))

rules/config

+9
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,15 @@ TRUSTED_GPG_URLS = https://packages.trafficmanager.net/debian/public_key.gpg,htt
210210
# docker: docker base images
211211
SONIC_VERSION_CONTROL_COMPONENTS ?= none
212212

213+
# SONIC_VERSION_CACHE allows the .deb,.py, wget, git, docker and go files to be stored in the cache path. This allows the submodules to
214+
# cache standard installation package and restored back to avoid the package download every time.
215+
# SONIC_VERSION_CACHE - Method of deb package caching
216+
# none : no caching
217+
# cache : Use cache if exists else build the source and update the cache
218+
# SONIC_VERSION_CACHE_SOURCE - Defines the version cache location details
219+
SONIC_VERSION_CACHE_METHOD ?= none
220+
SONIC_VERSION_CACHE_SOURCE ?= $(SONIC_DPKG_CACHE_SOURCE)/vcache
221+
213222
# SONiC docker registry
214223
#
215224
# Set the env variable ENABLE_DOCKER_BASE_PULL = y to enable pulling sonic-slave docker from registry

rules/functions

+1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ log_green = echo -e "$(GREEN)$(1)$(GRAY)"
4848
FLUSH_LOG = rm -f $@.log
4949

5050
LOG_SIMPLE = &>> $(PROJECT_ROOT)/$@.log || { [ $$? -eq 0 ] || pushd $(PROJECT_ROOT) > /dev/null ; ./update_screen.sh -e $@ ; popd > /dev/null ; false ; }
51+
LOG_SAVE = |& $(PROJECT_ROOT)/scripts/process_log.sh $(PROCESS_LOG_OPTION) &>> $(PROJECT_ROOT)/$@.log ; test $${PIPESTATUS[-2]} -eq 0 || { [ $$? -eq 0 ] || pushd $(PROJECT_ROOT) > /dev/null ; ./update_screen.sh -e $@ ; popd > /dev/null ; false ; }
5152
LOG = < /dev/null |& $(PROJECT_ROOT)/scripts/process_log.sh $(PROCESS_LOG_OPTION) &>> $(PROJECT_ROOT)/$@.log ; test $${PIPESTATUS[-2]} -eq 0 || { [ $$? -eq 0 ] || pushd $(PROJECT_ROOT) > /dev/null ; ./update_screen.sh -e $@ ; popd > /dev/null ; false ; }
5253

5354
###############################################################################

0 commit comments

Comments
 (0)