diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index 00fcf6732131..bebebbf9affb 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -110,7 +110,7 @@ sudo LANG=C chroot $FILESYSTEM_ROOT depmod -a {{kversion}} {% for image in installer_images.strip().split(' ') -%} sudo LANG=C chroot $FILESYSTEM_ROOT docker load < {{image}} {% endfor %} -sudo chroot $FILESYSTEM_ROOT service docker stop +sudo chroot $FILESYSTEM_ROOT service docker stop || true {% for script in installer_start_scrips.split(' ') -%} sudo cp {{script}} $FILESYSTEM_ROOT/usr/bin/ {% endfor %} diff --git a/slave.mk b/slave.mk index 485f8ff9206c..125896709bed 100644 --- a/slave.mk +++ b/slave.mk @@ -315,7 +315,20 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : .platform chmod +x sonic_debian_extension.sh, ) - ./build_debian.sh "$(USERNAME)" "$(shell perl -e 'print crypt("$(PASSWORD)", "salt"),"\n"')" $(LOG) + # Lock build_debian.sh execution to prevent issue with parallel accessing to docker engine. + INSTALLER_LOCK=/var/lock/sonic-buildimage-inÑ–taller.lock + while true; do + [ mkdir $(INSTALLER_LOCK) &>/dev/null ] && { + ./build_debian.sh "$(USERNAME)" "$(shell perl -e 'print crypt("$(PASSWORD)", "salt"),"\n"')" $(LOG) || { + rm -rf $(INSTALLER_LOCK_FILE) + exit 1 + } + + rm -rf $(INSTALLER_LOCK_FILE) + break + } + done + TARGET_MACHINE=$($*_MACHINE) IMAGE_TYPE=$($*_IMAGE_TYPE) ./build_image.sh $(LOG) $(foreach docker, $($*_DOCKERS), \