Skip to content

Commit 50df593

Browse files
committed
Squashed commit of the following:
commit 69f74304e2c848d4ca4c7767c7b0b228f5351de6 Author: xumia <[email protected]> Date: Wed Nov 9 08:09:53 2022 +0800 [Build] Support j2 template for debian sources (sonic-net#12557) Why I did it Unify the Debian mirror sources Make easy to upgrade to the next Debian release, not source url code change required. Support to customize the Debian mirror sources during the build Relative issue: sonic-net#12523
1 parent 0e5a2b9 commit 50df593

21 files changed

+69
-228
lines changed

.gitignore

+3
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

+8-3
Original file line numberDiff line numberDiff line change
@@ -307,13 +307,18 @@ SONIC_BUILD_INSTRUCTION := make \
307307
SLAVE_DIR=$(SLAVE_DIR) \
308308
ENABLE_AUTO_TECH_SUPPORT=$(ENABLE_AUTO_TECH_SUPPORT) \
309309
BUILD_MULTIASIC_KVM=$(BUILD_MULTIASIC_KVM) \
310+
MIRROR_URLS=$(MIRROR_URLS) \
311+
MIRROR_SECURITY_URLS=$(MIRROR_SECURITY_URLS) \
310312
$(SONIC_OVERRIDE_BUILD_VARS)
311313

312314
.PHONY: sonic-slave-build sonic-slave-bash init reset
313315

314316
.DEFAULT_GOAL := all
315317

316-
%::
318+
export MIRROR_URLS
319+
export MIRROR_SECURITY_URLS
320+
321+
%:: | sonic-build-hooks
317322
ifeq ($(MULTIARCH_QEMU_ENVIRON), y)
318323
@$(DOCKER_MULTIARCH_CHECK)
319324
ifneq ($(BLDENV), )
@@ -323,8 +328,6 @@ endif
323328
endif
324329
@$(OVERLAY_MODULE_CHECK)
325330

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
328331
@docker inspect --type image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) &> /dev/null || \
329332
{ [ $(ENABLE_DOCKER_BASE_PULL) == y ] && { echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found. Pulling...; } && \
330333
$(DOCKER_BASE_PULL) && \
@@ -349,6 +352,8 @@ endif
349352
sonic-build-hooks:
350353
@pushd src/sonic-build-hooks; TRUSTED_GPG_URLS=$(TRUSTED_GPG_URLS) make all; popd
351354
@cp src/sonic-build-hooks/buildinfo/sonic-build-hooks* $(SLAVE_DIR)/buildinfo
355+
@[ "$(MULTIARCH_QEMU_ENVIRON)" == y ] && scripts/build_mirror_config.sh $(SLAVE_DIR) amd64 $(BLDENV)
356+
@scripts/build_mirror_config.sh $(SLAVE_DIR) $(CONFIGURED_ARCH) $(BLDENV)
352357

353358
sonic-slave-base-build : sonic-build-hooks
354359
ifeq ($(MULTIARCH_QEMU_ENVIRON), y)

build_debian.sh

+1
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

+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.

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

-18
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 %}

scripts/build_mirror_config.sh

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#!/bin/bash
2+
3+
# Generate the sources.list.<arch> in the config path
4+
CONFIG_PATH=$1
5+
export ARCHITECTURE=$2
6+
export DISTRIBUTION=$3
7+
8+
# The default mirror urls
9+
DEFAULT_MIRROR_URLS=http://debian-archive.trafficmanager.net/debian/,http://packages.trafficmanager.net/debian/debian/
10+
DEFAULT_MIRROR_SECURITY_URLS=http://debian-archive.trafficmanager.net/debian-security/,http://packages.trafficmanager.net/debian/debian-security/
11+
12+
# The debian-archive.trafficmanager.net does not support armhf, use debian.org instead
13+
if [ "$ARCHITECTURE" == "armhf" ]; then
14+
DEFAULT_MIRROR_URLS=http://deb.debian.org/debian/,http://packages.trafficmanager.net/debian/debian/
15+
DEFAULT_MIRROR_SECURITY_URLS=http://deb.debian.org/debian-security/,http://packages.trafficmanager.net/debian/debian-security/
16+
fi
17+
18+
[ -z "$MIRROR_URLS" ] && MIRROR_URLS=$DEFAULT_MIRROR_URLS
19+
[ -z "$MIRROR_SECURITY_URLS" ] && MIRROR_SECURITY_URLS=$DEFAULT_MIRROR_SECURITY_URLS
20+
21+
TEMPLATE=files/apt/sources.list.j2
22+
[ -f files/apt/sources.list.$ARCHITECTURE.j2 ] && TEMPLATE=files/apt/sources.list.$ARCHITECTURE.j2
23+
[ -f $CONFIG_PATH/sources.list.j2 ] && TEMPLATE=$CONFIG_PATH/sources.list.j2
24+
[ -f $CONFIG_PATH/sources.list.$ARCHITECTURE.j2 ] && TEMPLATE=$CONFIG_PATH/sources.list.$ARCHITECTURE.j2
25+
26+
MIRROR_URLS=$MIRROR_URLS MIRROR_SECURITY_URLS=$MIRROR_SECURITY_URLS j2 $TEMPLATE | sed '/^$/N;/^\n$/D' > $CONFIG_PATH/sources.list.$ARCHITECTURE

scripts/prepare_docker_buildinfo.sh

+4
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ if [ -z "$DISTRO" ]; then
2222
[ -z "$DISTRO" ] && DISTRO=jessie
2323
fi
2424

25+
if [[ "$IMAGENAME" == docker-base-* ]]; then
26+
scripts/build_mirror_config.sh ${DOCKERFILE_PATH} $ARCH $DISTRO
27+
fi
28+
2529
# add script for reproducible build. using sha256 instead of tag for docker base image.
2630
scripts/docker_version_control.sh $@
2731

slave.mk

+2
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,8 @@ export TRUSTED_GPG_URLS
132132
export SONIC_VERSION_CONTROL_COMPONENTS
133133
DEFAULT_CONTAINER_REGISTRY := $(SONIC_DEFAULT_CONTAINER_REGISTRY)
134134
export DEFAULT_CONTAINER_REGISTRY
135+
export MIRROR_URLS
136+
export MIRROR_SECURITY_URLS
135137

136138
ifeq ($(SONIC_ENABLE_PFCWD_ON_START),y)
137139
ENABLE_PFCWD_ON_START = y

0 commit comments

Comments
 (0)