Skip to content

Commit 40780c0

Browse files
authored
[Build][202111] Support Debian snapshot mirror to improve build stability (#14664)
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 0e5a2b9 commit 40780c0

28 files changed

+190
-236
lines changed

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

Lines changed: 35 additions & 0 deletions
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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,6 @@ htmlcov/
9393
.vscode/
9494
.idea/
9595

96+
# Debian mirror Sources
97+
sources.list.*
98+
!sources.list*.j2

Makefile.work

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -140,12 +140,13 @@ SLAVE_IMAGE = $(SLAVE_BASE_IMAGE)-$(USER_LC)
140140
# Generate the version control build info
141141
$(shell SONIC_VERSION_CONTROL_COMPONENTS=$(SONIC_VERSION_CONTROL_COMPONENTS) \
142142
TRUSTED_GPG_URLS=$(TRUSTED_GPG_URLS) PACKAGE_URL_PREFIX=$(PACKAGE_URL_PREFIX) \
143+
MIRROR_SNAPSHOT=$(MIRROR_SNAPSHOT) \
143144
scripts/generate_buildinfo_config.sh)
144145

145146
# Generate the slave Dockerfile, and prepare build info for it
146147
$(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)
147148
$(shell CONFIGURED_ARCH=$(CONFIGURED_ARCH) MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) j2 $(SLAVE_DIR)/Dockerfile.user.j2 > $(SLAVE_DIR)/Dockerfile.user)
148-
$(shell BUILD_SLAVE=y DEFAULT_CONTAINER_REGISTRY=$(DEFAULT_CONTAINER_REGISTRY) scripts/prepare_docker_buildinfo.sh $(SLAVE_BASE_IMAGE) $(SLAVE_DIR)/Dockerfile $(CONFIGURED_ARCH) "" $(BLDENV))
149+
$(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))
149150

150151
# Add the versions in the tag, if the version change, need to rebuild the slave
151152
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);}')
@@ -307,13 +308,20 @@ SONIC_BUILD_INSTRUCTION := make \
307308
SLAVE_DIR=$(SLAVE_DIR) \
308309
ENABLE_AUTO_TECH_SUPPORT=$(ENABLE_AUTO_TECH_SUPPORT) \
309310
BUILD_MULTIASIC_KVM=$(BUILD_MULTIASIC_KVM) \
311+
MIRROR_URLS=$(MIRROR_URLS) \
312+
MIRROR_SECURITY_URLS=$(MIRROR_SECURITY_URLS) \
313+
MIRROR_SNAPSHOT=$(MIRROR_SNAPSHOT) \
310314
$(SONIC_OVERRIDE_BUILD_VARS)
311315

312316
.PHONY: sonic-slave-build sonic-slave-bash init reset
313317

314318
.DEFAULT_GOAL := all
315319

316-
%::
320+
export MIRROR_URLS
321+
export MIRROR_SECURITY_URLS
322+
export SONIC_VERSION_CONTROL_COMPONENTS
323+
324+
%:: | sonic-build-hooks
317325
ifeq ($(MULTIARCH_QEMU_ENVIRON), y)
318326
@$(DOCKER_MULTIARCH_CHECK)
319327
ifneq ($(BLDENV), )
@@ -323,8 +331,6 @@ endif
323331
endif
324332
@$(OVERLAY_MODULE_CHECK)
325333

326-
@pushd src/sonic-build-hooks; TRUSTED_GPG_URLS=$(TRUSTED_GPG_URLS) make all; popd
327-
@cp src/sonic-build-hooks/buildinfo/sonic-build-hooks* $(SLAVE_DIR)/buildinfo
328334
@docker inspect --type image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) &> /dev/null || \
329335
{ [ $(ENABLE_DOCKER_BASE_PULL) == y ] && { echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found. Pulling...; } && \
330336
$(DOCKER_BASE_PULL) && \
@@ -349,6 +355,8 @@ endif
349355
sonic-build-hooks:
350356
@pushd src/sonic-build-hooks; TRUSTED_GPG_URLS=$(TRUSTED_GPG_URLS) make all; popd
351357
@cp src/sonic-build-hooks/buildinfo/sonic-build-hooks* $(SLAVE_DIR)/buildinfo
358+
@[ "$(MULTIARCH_QEMU_ENVIRON)" == y ] && scripts/build_mirror_config.sh $(SLAVE_DIR) amd64 $(BLDENV)
359+
@scripts/build_mirror_config.sh $(SLAVE_DIR) $(CONFIGURED_ARCH) $(BLDENV)
352360

353361
sonic-slave-base-build : sonic-build-hooks
354362
ifeq ($(MULTIARCH_QEMU_ENVIRON), y)

build_debian.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ sudo LANG=C chroot $FILESYSTEM_ROOT mount
107107
[ -d $TRUSTED_GPG_DIR ] && [ ! -z "$(ls $TRUSTED_GPG_DIR)" ] && sudo cp $TRUSTED_GPG_DIR/* ${FILESYSTEM_ROOT}/etc/apt/trusted.gpg.d/
108108

109109
## Pointing apt to public apt mirrors and getting latest packages, needed for latest security updates
110+
scripts/build_mirror_config.sh files/apt $CONFIGURED_ARCH $IMAGE_DISTRO
110111
sudo cp files/apt/sources.list.$CONFIGURED_ARCH $FILESYSTEM_ROOT/etc/apt/sources.list
111112
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/
112113

dockers/docker-base-buster/Dockerfile.j2

Lines changed: 1 addition & 7 deletions
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

Lines changed: 0 additions & 13 deletions
This file was deleted.

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

Lines changed: 0 additions & 11 deletions
This file was deleted.

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

Lines changed: 0 additions & 11 deletions
This file was deleted.

dockers/docker-base-stretch/Dockerfile.j2

Lines changed: 1 addition & 7 deletions
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

Lines changed: 0 additions & 11 deletions
This file was deleted.

0 commit comments

Comments
 (0)