Skip to content

Commit 2001bbd

Browse files
authored
[Build][202106] Support Debian snapshot mirror to improve build stability (#14663)
Why I did it Cherry-pick commits from master to support the snapshot based mirror, and fix the code conflicts. ad162ae [Build] Optimize the version control for Debian packages (#14557) 38c5d7f [Build] Support j2 template for debian sources for docker ptf (#13198) 5e4826e [Ci] Support to use the same snapshot for all platform builds (#13913) 8206925 [Build] Change the default mirror version config file (#13786) 5e4a866 [Build] Support Debian snapshot mirror to improve build stability (#13097) ac5d89c [Build] Support j2 template for debian sources (#12557) Work item tracking Microsoft ADO (number only): 18018114 How I did it How to verify it
1 parent 7e6a25e commit 2001bbd

27 files changed

+190
-201
lines changed

.azure-pipelines/azure-pipelines-UpgrateVersion.yml

+35
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,32 @@ parameters:
4242
- mellanox
4343

4444
stages:
45+
- stage: Prepare
46+
jobs:
47+
- job: Prepare
48+
steps:
49+
- script: |
50+
DEFAULT_MIRROR_URL_PREFIX=http://packages.trafficmanager.net
51+
DEBIAN_TIMESTAMP=$(curl $DEFAULT_MIRROR_URL_PREFIX/snapshot/debian/latest/timestamp)
52+
DEBIAN_SECURITY_TIMESTAMP=$(curl $DEFAULT_MIRROR_URL_PREFIX/snapshot/debian-security/latest/timestamp)
53+
echo "DEBIAN_TIMESTAMP=$DEBIAN_TIMESTAMP, DEBIAN_SECURITY_TIMESTAMP=$DEBIAN_SECURITY_TIMESTAMP"
54+
echo "##vso[task.setvariable variable=DEBIAN_TIMESTAMP;isOutput=true]$DEBIAN_TIMESTAMP"
55+
echo "##vso[task.setvariable variable=DEBIAN_SECURITY_TIMESTAMP;isOutput=true]$DEBIAN_SECURITY_TIMESTAMP"
56+
name: SetVersions
57+
displayName: 'Set snapshot versions'
4558
- stage: Build
59+
dependsOn: Prepare
4660
variables:
4761
- name: CACHE_MODE
4862
value: none
4963
- name: VERSION_CONTROL_OPTIONS
5064
value: 'SONIC_VERSION_CONTROL_COMPONENTS='
65+
- name: SKIP_CHECKOUT
66+
value: true
67+
- name: DEBIAN_TIMESTAMP
68+
value: $[ stageDependencies.Prepare.Prepare.outputs['SetVersions.DEBIAN_TIMESTAMP'] ]
69+
- name: DEBIAN_SECURITY_TIMESTAMP
70+
value: $[ stageDependencies.Prepare.Prepare.outputs['SetVersions.DEBIAN_SECURITY_TIMESTAMP'] ]
5171
- template: .azure-pipelines/template-variables.yml@buildimage
5272
jobs:
5373
- template: azure-pipelines-build.yml
@@ -56,6 +76,21 @@ stages:
5676
buildOptions: '${{ variables.VERSION_CONTROL_OPTIONS }} ENABLE_DOCKER_BASE_PULL=n SONIC_BUILD_JOBS=$(nproc) ENABLE_IMAGE_SIGNATURE=y'
5777
preSteps:
5878
- template: .azure-pipelines/template-clean-sonic-slave.yml@buildimage
79+
- checkout: self
80+
submodules: recursive
81+
fetchDepth: 0
82+
path: s
83+
displayName: 'Checkout code'
84+
- script: |
85+
echo "DEBIAN_TIMESTAMP=$DEBIAN_TIMESTAMP, DEBIAN_SECURITY_TIMESTAMP=$DEBIAN_SECURITY_TIMESTAMP"
86+
if [ "$MIRROR_SNAPSHOT" == y ]; then
87+
mkdir -p target/versions/default/
88+
echo "debian==$DEBIAN_TIMESTAMP" > target/versions/default/versions-mirror
89+
echo "debian-security==$DEBIAN_SECURITY_TIMESTAMP" >> target/versions/default/versions-mirror
90+
cat target/versions/default/versions-mirror
91+
fi
92+
displayName: 'Set snapshot versions'
93+
5994
- stage: UpgradeVersions
6095
jobs:
6196
- job: UpgradeVersions

.gitignore

+4
Original file line numberDiff line numberDiff line change
@@ -82,3 +82,7 @@ files/build/tmp
8282
dockers/**/buildinfo
8383
platform/**/buildinfo
8484
sonic-slave*/**/buildinfo
85+
86+
# Debian mirror Sources
87+
sources.list.*
88+
!sources.list*.j2

Makefile.work

+12-4
Original file line numberDiff line numberDiff line change
@@ -134,12 +134,13 @@ SLAVE_IMAGE = $(SLAVE_BASE_IMAGE)-$(USER_LC)
134134
# Generate the version control build info
135135
$(shell SONIC_VERSION_CONTROL_COMPONENTS=$(SONIC_VERSION_CONTROL_COMPONENTS) \
136136
TRUSTED_GPG_URLS=$(TRUSTED_GPG_URLS) PACKAGE_URL_PREFIX=$(PACKAGE_URL_PREFIX) \
137+
MIRROR_SNAPSHOT=$(MIRROR_SNAPSHOT) \
137138
scripts/generate_buildinfo_config.sh)
138139

139140
# Generate the slave Dockerfile, and prepare build info for it
140141
$(shell CONFIGURED_ARCH=$(CONFIGURED_ARCH) MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) DOCKER_EXTRA_OPTS=$(DOCKER_EXTRA_OPTS) DEFAULT_CONTAINER_REGISTRY=$(DEFAULT_CONTAINER_REGISTRY) j2 $(SLAVE_DIR)/Dockerfile.j2 > $(SLAVE_DIR)/Dockerfile)
141142
$(shell CONFIGURED_ARCH=$(CONFIGURED_ARCH) MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) j2 $(SLAVE_DIR)/Dockerfile.user.j2 > $(SLAVE_DIR)/Dockerfile.user)
142-
$(shell BUILD_SLAVE=y DEFAULT_CONTAINER_REGISTRY=$(DEFAULT_CONTAINER_REGISTRY) scripts/prepare_docker_buildinfo.sh $(SLAVE_BASE_IMAGE) $(SLAVE_DIR)/Dockerfile $(CONFIGURED_ARCH) "" $(BLDENV))
143+
$(shell BUILD_SLAVE=y DEFAULT_CONTAINER_REGISTRY=$(DEFAULT_CONTAINER_REGISTRY) MIRROR_SNAPSHOT=$(MIRROR_SNAPSHOT) scripts/prepare_docker_buildinfo.sh $(SLAVE_BASE_IMAGE) $(SLAVE_DIR)/Dockerfile $(CONFIGURED_ARCH) "" $(BLDENV))
143144

144145
# Add the versions in the tag, if the version change, need to rebuild the slave
145146
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);}')
@@ -282,13 +283,20 @@ SONIC_BUILD_INSTRUCTION := make \
282283
SONIC_DEFAULT_CONTAINER_REGISTRY=$(DEFAULT_CONTAINER_REGISTRY) \
283284
ENABLE_HOST_SERVICE_ON_START=$(ENABLE_HOST_SERVICE_ON_START) \
284285
SLAVE_DIR=$(SLAVE_DIR) \
286+
MIRROR_URLS=$(MIRROR_URLS) \
287+
MIRROR_SECURITY_URLS=$(MIRROR_SECURITY_URLS) \
288+
MIRROR_SNAPSHOT=$(MIRROR_SNAPSHOT) \
285289
$(SONIC_OVERRIDE_BUILD_VARS)
286290

287291
.PHONY: sonic-slave-build sonic-slave-bash init reset
288292

289293
.DEFAULT_GOAL := all
290294

291-
%::
295+
export MIRROR_URLS
296+
export MIRROR_SECURITY_URLS
297+
export SONIC_VERSION_CONTROL_COMPONENTS
298+
299+
%:: | sonic-build-hooks
292300
ifeq ($(MULTIARCH_QEMU_ENVIRON), y)
293301
@$(DOCKER_MULTIARCH_CHECK)
294302
ifneq ($(BLDENV), )
@@ -298,8 +306,6 @@ endif
298306
endif
299307
@$(OVERLAY_MODULE_CHECK)
300308

301-
@pushd src/sonic-build-hooks; TRUSTED_GPG_URLS=$(TRUSTED_GPG_URLS) make all; popd
302-
@cp src/sonic-build-hooks/buildinfo/sonic-build-hooks* $(SLAVE_DIR)/buildinfo
303309
@docker inspect --type image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) &> /dev/null || \
304310
{ [ $(ENABLE_DOCKER_BASE_PULL) == y ] && { echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found. Pulling...; } && \
305311
$(DOCKER_BASE_PULL) && \
@@ -324,6 +330,8 @@ endif
324330
sonic-build-hooks:
325331
@pushd src/sonic-build-hooks; TRUSTED_GPG_URLS=$(TRUSTED_GPG_URLS) make all; popd
326332
@cp src/sonic-build-hooks/buildinfo/sonic-build-hooks* $(SLAVE_DIR)/buildinfo
333+
@[ "$(MULTIARCH_QEMU_ENVIRON)" == y ] && scripts/build_mirror_config.sh $(SLAVE_DIR) amd64 $(BLDENV)
334+
@scripts/build_mirror_config.sh $(SLAVE_DIR) $(CONFIGURED_ARCH) $(BLDENV)
327335

328336
sonic-slave-base-build : sonic-build-hooks
329337
@$(OVERLAY_MODULE_CHECK)

build_debian.sh

+1
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ sudo LANG=C chroot $FILESYSTEM_ROOT mount
104104
[ -d $TRUSTED_GPG_DIR ] && [ ! -z "$(ls $TRUSTED_GPG_DIR)" ] && sudo cp $TRUSTED_GPG_DIR/* ${FILESYSTEM_ROOT}/etc/apt/trusted.gpg.d/
105105

106106
## Pointing apt to public apt mirrors and getting latest packages, needed for latest security updates
107+
scripts/build_mirror_config.sh files/apt $CONFIGURED_ARCH $IMAGE_DISTRO
107108
sudo cp files/apt/sources.list.$CONFIGURED_ARCH $FILESYSTEM_ROOT/etc/apt/sources.list
108109
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/
109110

dockers/docker-base-buster/Dockerfile.j2

+1-7
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,7 @@ ENV DEBIAN_FRONTEND=noninteractive
2727

2828
# Configure data sources for apt/dpkg
2929
COPY ["dpkg_01_drop", "/etc/dpkg/dpkg.cfg.d/01_drop"]
30-
{% if CONFIGURED_ARCH == "armhf" %}
31-
COPY ["sources.list.armhf", "/etc/apt/sources.list"]
32-
{% elif CONFIGURED_ARCH == "arm64" %}
33-
COPY ["sources.list.arm64", "/etc/apt/sources.list"]
34-
{% else %}
35-
COPY ["sources.list", "/etc/apt/sources.list"]
36-
{% endif %}
30+
COPY ["sources.list.{{ CONFIGURED_ARCH }}", "/etc/apt/sources.list"]
3731
COPY ["no_install_recommend_suggest", "/etc/apt/apt.conf.d"]
3832
COPY ["no-check-valid-until", "/etc/apt/apt.conf.d"]
3933

dockers/docker-base-buster/sources.list

-13
This file was deleted.

dockers/docker-base-buster/sources.list.arm64

-11
This file was deleted.

dockers/docker-base-buster/sources.list.armhf

-11
This file was deleted.

dockers/docker-base-stretch/Dockerfile.j2

+1-7
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,7 @@ ENV DEBIAN_FRONTEND=noninteractive
2727

2828
# Configure data sources for apt/dpkg
2929
COPY ["dpkg_01_drop", "/etc/dpkg/dpkg.cfg.d/01_drop"]
30-
{% if CONFIGURED_ARCH == "armhf" %}
31-
COPY ["sources.list.armhf", "/etc/apt/sources.list"]
32-
{% elif CONFIGURED_ARCH == "arm64" %}
33-
COPY ["sources.list.arm64", "/etc/apt/sources.list"]
34-
{% else %}
35-
COPY ["sources.list", "/etc/apt/sources.list"]
36-
{% endif %}
30+
COPY ["sources.list.{{ CONFIGURED_ARCH }}", "/etc/apt/sources.list"]
3731
COPY ["no_install_recommend_suggest", "/etc/apt/apt.conf.d"]
3832
COPY ["no-check-valid-until", "/etc/apt/apt.conf.d"]
3933

dockers/docker-base-stretch/sources.list

-11
This file was deleted.

dockers/docker-base-stretch/sources.list.arm64

-11
This file was deleted.

dockers/docker-base-stretch/sources.list.armhf

-11
This file was deleted.

dockers/docker-ptf/Dockerfile.j2

+3-5
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,21 @@ FROM {{ prefix }}debian:stretch
99

1010
MAINTAINER Pavel Shirshov
1111

12-
## Remove retired jessie-updates repo
13-
RUN sed -i '/deb http:\/\/deb.debian.org\/debian jessie-updates main/d' /etc/apt/sources.list
14-
1512
## Copy dependencies
1613
COPY \
1714
{% for deb in docker_ptf_debs.split(' ') -%}
1815
debs/{{ deb }}{{' '}}
1916
{%- endfor -%}
2017
debs/
2118

19+
COPY ["sources.list.{{ CONFIGURED_ARCH }}", "/etc/apt/sources.list"]
20+
2221
## Make apt-get non-interactive
2322
ENV DEBIAN_FRONTEND=noninteractive
2423

2524
## Set the apt source, update package cache and install necessary packages
2625
## TODO: Clean up this step
27-
RUN sed --in-place 's/httpredir.debian.org/debian-archive.trafficmanager.net/' /etc/apt/sources.list \
28-
&& apt-get update \
26+
RUN apt-get update \
2927
&& apt-get upgrade -y \
3028
&& apt-get dist-upgrade -y \
3129
&& apt-get install -y \

files/apt/sources.list.amd64

-13
This file was deleted.

files/apt/sources.list.arm64

-13
This file was deleted.

files/apt/sources.list.armhf

-13
This file was deleted.

files/apt/sources.list.j2

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# The configuration is generated by template
2+
# Please add additional sources in /etc/apt/sources.list.d
3+
4+
{% for mirror_url in MIRROR_URLS.split(',') %}
5+
deb [arch={{ ARCHITECTURE }}] {{ mirror_url }} {{ DISTRIBUTION }} main contrib non-free
6+
deb-src [arch={{ ARCHITECTURE }}] {{ mirror_url }} {{ DISTRIBUTION }} main contrib non-free
7+
deb [arch={{ ARCHITECTURE }}] {{ mirror_url }} {{ DISTRIBUTION }}-updates main contrib non-free
8+
deb-src [arch={{ ARCHITECTURE }}] {{ mirror_url }} {{ DISTRIBUTION }}-updates main contrib non-free
9+
deb [arch={{ ARCHITECTURE }}] {{ mirror_url }} {{ DISTRIBUTION }}-backports main contrib non-free
10+
{% endfor %}
11+
{% for mirror_url in MIRROR_SECURITY_URLS.split(',') %}
12+
{% set dist_separator='/' %}{% if 'packages.trafficmanager.net/debian' in mirror_url %}{% set dist_separator='_' %}{% endif %}
13+
{% if DISTRIBUTION == 'stretch' or DISTRIBUTION == 'buster' %}
14+
deb [arch={{ ARCHITECTURE }}] {{ mirror_url }} {{ DISTRIBUTION }}{{ dist_separator }}updates main contrib non-free
15+
deb-src [arch={{ ARCHITECTURE }}] {{ mirror_url }} {{ DISTRIBUTION }}{{ dist_separator }}updates main contrib non-free
16+
{% else %}
17+
deb [arch={{ ARCHITECTURE }}] {{ mirror_url }} {{ DISTRIBUTION }}-security main contrib non-free
18+
deb-src [arch={{ ARCHITECTURE }}] {{ mirror_url }} {{ DISTRIBUTION }}-security main contrib non-free
19+
{% endif %}
20+
{% endfor %}

rules/config

+3
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,9 @@ TRUSTED_GPG_URLS = https://packages.trafficmanager.net/debian/public_key.gpg,htt
186186
# docker: docker base images
187187
SONIC_VERSION_CONTROL_COMPONENTS ?= none
188188

189+
# MIRROR_SNAPSHOT - support mirror snapshot flag
190+
MIRROR_SNAPSHOT ?= n
191+
189192
# SONiC docker registry
190193
#
191194
# Set the env variable ENABLE_DOCKER_BASE_PULL = y to enable pulling sonic-slave docker from registry

0 commit comments

Comments
 (0)