[sonic-app-ext] support app extensions installation during build (#7593)
Signed-off-by: Stepan Blyschak stepanb@mellanox.com Why I did it To support building DHCP relay as extension and installing it during build time. How I did it Created infrastructure. Users need to define their packages in rules/sonic-packages.mk How to verify it Together with #6531
This commit is contained in:
parent
9ce7c6d9fe
commit
9de7e6860b
@ -702,6 +702,28 @@ sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT docker pull k8s.gcr
|
|||||||
echo "docker images pull complete"
|
echo "docker images pull complete"
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% macro get_install_options(set_owner, enabled) -%}
|
||||||
|
{% set args = ["-y", "-v", "DEBUG"] -%}
|
||||||
|
{% if set_owner -%}
|
||||||
|
{% set args = args + ["--set-owner", set_owner] -%}
|
||||||
|
{% endif -%}
|
||||||
|
{% if enabled == "y" -%}
|
||||||
|
{% set args = args + ["--enable"] -%}
|
||||||
|
{% endif -%}
|
||||||
|
{{ args | join(' ') }}
|
||||||
|
{% endmacro -%}
|
||||||
|
|
||||||
|
{% for package in sonic_packages.strip().split() -%}
|
||||||
|
{% set name, repo, version, set_owner, enabled = package.split('|') -%}
|
||||||
|
sudo LANG=C chroot $FILESYSTEM_ROOT sonic-package-manager repository add {{ name }} {{ repo }}
|
||||||
|
sudo LANG=C chroot $FILESYSTEM_ROOT sonic-package-manager install {{ name }}=={{ version }} {{ get_install_options(set_owner, enabled) }}
|
||||||
|
{% endfor -%}
|
||||||
|
|
||||||
|
{% for package in sonic_local_packages.strip().split() -%}
|
||||||
|
{% set name, path, set_owner, enabled = package.split('|') -%}
|
||||||
|
sudo LANG=C chroot $FILESYSTEM_ROOT sonic-package-manager install --from-tarball {{ path }} {{ get_install_options(set_owner, enabled) }}
|
||||||
|
{% endfor -%}
|
||||||
|
|
||||||
sudo umount $FILESYSTEM_ROOT/target
|
sudo umount $FILESYSTEM_ROOT/target
|
||||||
sudo rm -r $FILESYSTEM_ROOT/target
|
sudo rm -r $FILESYSTEM_ROOT/target
|
||||||
if [ $MULTIARCH_QEMU_ENVIRON == y ]; then
|
if [ $MULTIARCH_QEMU_ENVIRON == y ]; then
|
||||||
|
@ -3,6 +3,15 @@
|
|||||||
DEPENDENT="radv dhcp_relay"
|
DEPENDENT="radv dhcp_relay"
|
||||||
MULTI_INST_DEPENDENT="teamd"
|
MULTI_INST_DEPENDENT="teamd"
|
||||||
|
|
||||||
|
# Update dependent list based on other packages requirements
|
||||||
|
if [[ -f /etc/sonic/${SERVICE}_dependent ]]; then
|
||||||
|
DEPENDENT="${DEPENDENT} $(cat /etc/sonic/${SERVICE}_dependent)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -f /etc/sonic/${SERVICE}_multi_inst_dependent ]]; then
|
||||||
|
MULTI_INST_DEPENDENT="${MULTI_INST_DEPENDENT} cat /etc/sonic/${SERVICE}_multi_inst_dependent"
|
||||||
|
fi
|
||||||
|
|
||||||
function debug()
|
function debug()
|
||||||
{
|
{
|
||||||
/usr/bin/logger $1
|
/usr/bin/logger $1
|
||||||
|
9
rules/sonic-packages.mk
Normal file
9
rules/sonic-packages.mk
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# rules to define remote packages that need to be installed
|
||||||
|
# during SONiC image build
|
||||||
|
|
||||||
|
## Example:
|
||||||
|
## PACKAGE = my-package
|
||||||
|
## $(PACKAGE)_REPOSITORY = myrepo/mypackage
|
||||||
|
## $(PACKAGE)_VERSION = 1.0.0
|
||||||
|
## SONIC_PACKAGES += $(PACKAGE)
|
||||||
|
|
19
slave.mk
19
slave.mk
@ -722,6 +722,8 @@ $(addprefix $(TARGET_PATH)/, $(DOCKER_IMAGES)) : $(TARGET_PATH)/%.gz : .platform
|
|||||||
$$(addprefix $(PYTHON_DEBS_PATH)/,$$($$*.gz_PYTHON_DEBS)) \
|
$$(addprefix $(PYTHON_DEBS_PATH)/,$$($$*.gz_PYTHON_DEBS)) \
|
||||||
$$(addprefix $(PYTHON_WHEELS_PATH)/,$$($$*.gz_PYTHON_WHEELS)) \
|
$$(addprefix $(PYTHON_WHEELS_PATH)/,$$($$*.gz_PYTHON_WHEELS)) \
|
||||||
$$(addsuffix -load,$$(addprefix $(TARGET_PATH)/,$$($$*.gz_LOAD_DOCKERS))) \
|
$$(addsuffix -load,$$(addprefix $(TARGET_PATH)/,$$($$*.gz_LOAD_DOCKERS))) \
|
||||||
|
$$(addsuffix -install,$$(addprefix $(PYTHON_WHEELS_PATH)/,$$($$*.gz_INSTALL_PYTHON_WHEELS))) \
|
||||||
|
$$(addsuffix -install,$$(addprefix $(DEBS_PATH)/,$$($$*.gz_INSTALL_DEBS))) \
|
||||||
$$($$*.gz_PATH)/Dockerfile.j2 \
|
$$($$*.gz_PATH)/Dockerfile.j2 \
|
||||||
$(call dpkg_depend,$(TARGET_PATH)/%.gz.dep)
|
$(call dpkg_depend,$(TARGET_PATH)/%.gz.dep)
|
||||||
$(HEADER)
|
$(HEADER)
|
||||||
@ -748,6 +750,7 @@ $(addprefix $(TARGET_PATH)/, $(DOCKER_IMAGES)) : $(TARGET_PATH)/%.gz : .platform
|
|||||||
$(eval export $(subst -,_,$(notdir $($*.gz_PATH)))_whls=$(shell printf "$(subst $(SPACE),\n,$(call expand,$($*.gz_PYTHON_WHEELS)))\n" | awk '!a[$$0]++'))
|
$(eval export $(subst -,_,$(notdir $($*.gz_PATH)))_whls=$(shell printf "$(subst $(SPACE),\n,$(call expand,$($*.gz_PYTHON_WHEELS)))\n" | awk '!a[$$0]++'))
|
||||||
$(eval export $(subst -,_,$(notdir $($*.gz_PATH)))_dbgs=$(shell printf "$(subst $(SPACE),\n,$(call expand,$($*.gz_DBG_PACKAGES)))\n" | awk '!a[$$0]++'))
|
$(eval export $(subst -,_,$(notdir $($*.gz_PATH)))_dbgs=$(shell printf "$(subst $(SPACE),\n,$(call expand,$($*.gz_DBG_PACKAGES)))\n" | awk '!a[$$0]++'))
|
||||||
$(eval export $(subst -,_,$(notdir $($*.gz_PATH)))_pkgs=$(shell printf "$(subst $(SPACE),\n,$(call expand,$($*.gz_APT_PACKAGES)))\n" | awk '!a[$$0]++'))
|
$(eval export $(subst -,_,$(notdir $($*.gz_PATH)))_pkgs=$(shell printf "$(subst $(SPACE),\n,$(call expand,$($*.gz_APT_PACKAGES)))\n" | awk '!a[$$0]++'))
|
||||||
|
if [ -d $($*.gz_PATH)/cli-plugin-tests/ ]; then pushd $($*.gz_PATH)/cli-plugin-tests; pytest-$($(SONIC_UTILITIES_PY3)_PYTHON_VERSION) -v $(LOG); popd; fi
|
||||||
# Label docker image with componenets versions
|
# Label docker image with componenets versions
|
||||||
$(eval export $(subst -,_,$(notdir $($*.gz_PATH)))_labels=$(foreach component,$($*.gz_DEPENDS) $($*.gz_PYTHON_DEBS) $($*.gz_PYTHON_WHEELS),\
|
$(eval export $(subst -,_,$(notdir $($*.gz_PATH)))_labels=$(foreach component,$($*.gz_DEPENDS) $($*.gz_PYTHON_DEBS) $($*.gz_PYTHON_WHEELS),\
|
||||||
$(shell [[ ! -z "$($(component)_VERSION)" && ! -z "$($(component)_NAME)" ]] && \
|
$(shell [[ ! -z "$($(component)_VERSION)" && ! -z "$($(component)_NAME)" ]] && \
|
||||||
@ -882,6 +885,7 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \
|
|||||||
$(SONIC_UTILITIES_DATA) \
|
$(SONIC_UTILITIES_DATA) \
|
||||||
$(SONIC_HOST_SERVICES_DATA)) \
|
$(SONIC_HOST_SERVICES_DATA)) \
|
||||||
$$(addprefix $(TARGET_PATH)/,$$($$*_DOCKERS)) \
|
$$(addprefix $(TARGET_PATH)/,$$($$*_DOCKERS)) \
|
||||||
|
$$(addprefix $(TARGET_PATH)/,$$(SONIC_PACKAGES_LOCAL)) \
|
||||||
$$(addprefix $(FILES_PATH)/,$$($$*_FILES)) \
|
$$(addprefix $(FILES_PATH)/,$$($$*_FILES)) \
|
||||||
$(if $(findstring y,$(ENABLE_ZTP)),$(addprefix $(IMAGE_DISTRO_DEBS_PATH)/,$(SONIC_ZTP))) \
|
$(if $(findstring y,$(ENABLE_ZTP)),$(addprefix $(IMAGE_DISTRO_DEBS_PATH)/,$(SONIC_ZTP))) \
|
||||||
$(addprefix $(PYTHON_WHEELS_PATH)/,$(SONIC_UTILITIES_PY3)) \
|
$(addprefix $(PYTHON_WHEELS_PATH)/,$(SONIC_UTILITIES_PY3)) \
|
||||||
@ -933,9 +937,18 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \
|
|||||||
export lazy_build_installer_debs="$(foreach deb, $($*_LAZY_BUILD_INSTALLS), $(addprefix $($(deb)_MACHINE)|,$(deb)))"
|
export lazy_build_installer_debs="$(foreach deb, $($*_LAZY_BUILD_INSTALLS), $(addprefix $($(deb)_MACHINE)|,$(deb)))"
|
||||||
export installer_images="$(foreach docker, $($*_DOCKERS),\
|
export installer_images="$(foreach docker, $($*_DOCKERS),\
|
||||||
$(addprefix $($(docker)_PACKAGE_NAME)|,\
|
$(addprefix $($(docker)_PACKAGE_NAME)|,\
|
||||||
$(addprefix $($(docker)_PATH)|,\
|
$(addprefix $($(docker)_PATH)|,\
|
||||||
$(addprefix $($(docker)_MACHINE)|,\
|
$(addprefix $($(docker)_MACHINE)|,\
|
||||||
$(addprefix $(TARGET_PATH)/,$(addsuffix :$($(docker)_VERSION),$(docker)))))))"
|
$(addprefix $(TARGET_PATH)/,$(addsuffix :$($(docker)_VERSION),$(docker)))))))"
|
||||||
|
export sonic_packages="$(foreach package, $(SONIC_PACKAGES),\
|
||||||
|
$(addsuffix |$($(package)_DEFAULT_FEATURE_STATE_ENABLED),\
|
||||||
|
$(addsuffix |$($(package)_DEFAULT_FEATURE_OWNER),\
|
||||||
|
$(addsuffix |$($(package)_VERSION),\
|
||||||
|
$(addsuffix |$($(package)_REPOSITORY), $(package))))))"
|
||||||
|
export sonic_local_packages="$(foreach package, $(SONIC_PACKAGES_LOCAL),\
|
||||||
|
$(addsuffix |$($(package)_DEFAULT_FEATURE_STATE_ENABLED),\
|
||||||
|
$(addsuffix |$($(package)_DEFAULT_FEATURE_OWNER),\
|
||||||
|
$(addsuffix |$(addprefix $(TARGET_PATH)/, $(package)), $(package)))))"
|
||||||
export sonic_py_common_py2_wheel_path="$(addprefix $(PYTHON_WHEELS_PATH)/,$(SONIC_PY_COMMON_PY2))"
|
export sonic_py_common_py2_wheel_path="$(addprefix $(PYTHON_WHEELS_PATH)/,$(SONIC_PY_COMMON_PY2))"
|
||||||
export sonic_py_common_py3_wheel_path="$(addprefix $(PYTHON_WHEELS_PATH)/,$(SONIC_PY_COMMON_PY3))"
|
export sonic_py_common_py3_wheel_path="$(addprefix $(PYTHON_WHEELS_PATH)/,$(SONIC_PY_COMMON_PY3))"
|
||||||
export config_engine_py2_wheel_path="$(addprefix $(PYTHON_WHEELS_PATH)/,$(SONIC_CONFIG_ENGINE_PY2))"
|
export config_engine_py2_wheel_path="$(addprefix $(PYTHON_WHEELS_PATH)/,$(SONIC_CONFIG_ENGINE_PY2))"
|
||||||
|
Reference in New Issue
Block a user