diff --git a/dockers/docker-stp/Dockerfile.j2 b/dockers/docker-stp/Dockerfile.j2 new file mode 100644 index 000000000000..ea960bc8ba5f --- /dev/null +++ b/dockers/docker-stp/Dockerfile.j2 @@ -0,0 +1,38 @@ +{% from "dockers/dockerfile-macros.j2" import install_debian_packages, install_python_wheels, copy_files %} +FROM docker-config-engine-bookworm-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} + +ARG docker_container_name +RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name#%syslogtag%/;" /etc/rsyslog.conf + +## Make apt-get non-interactive +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update && \ + apt-get install -f -y \ + libdbus-1-3 \ + libdaemon0 \ + libjansson4 \ + libpython2.7 \ + # Install redis-tools dependencies + # TODO: implicitly install dependencies + libjemalloc2 \ + ebtables + +{% if docker_stp_debs.strip() -%} +# Copy locally-built Debian package dependencies +{{ copy_files("debs/", docker_stp_debs.split(' '), "/debs/") }} + +# Install locally-built Debian packages and implicitly install their dependencies +{{ install_debian_packages(docker_stp_debs.split(' ')) }} +{%- endif %} + +RUN apt-get clean -y && \ + apt-get autoclean -y && \ + apt-get autoremove -y && \ + rm -rf /debs + +COPY ["start.sh", "/usr/bin/"] +COPY ["supervisord.conf", "/etc/supervisor/conf.d/"] +COPY ["critical_processes", "/etc/supervisor"] + +ENTRYPOINT ["/usr/local/bin/supervisord"] diff --git a/dockers/docker-stp/base_image_files/stpctl b/dockers/docker-stp/base_image_files/stpctl new file mode 100644 index 000000000000..ee3420db2395 --- /dev/null +++ b/dockers/docker-stp/base_image_files/stpctl @@ -0,0 +1,5 @@ +#!/bin/bash + +# -t option needed only for shell, not for commands + +docker exec -i stp stpctl "$@" diff --git a/dockers/docker-stp/critical_processes b/dockers/docker-stp/critical_processes new file mode 100644 index 000000000000..9a96b1df216a --- /dev/null +++ b/dockers/docker-stp/critical_processes @@ -0,0 +1,2 @@ +program:stpd +program:stpmgrd diff --git a/dockers/docker-stp/start.sh b/dockers/docker-stp/start.sh new file mode 100644 index 000000000000..ab233f77c6e5 --- /dev/null +++ b/dockers/docker-stp/start.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +rm -f /var/run/rsyslogd.pid +rm -f /var/run/stpd/* +rm -f /var/run/stpmgrd/* + +supervisorctl start rsyslogd + +supervisorctl start stpd + +supervisorctl start stpmgrd diff --git a/dockers/docker-stp/supervisord.conf b/dockers/docker-stp/supervisord.conf new file mode 100644 index 000000000000..3320c11b4f4b --- /dev/null +++ b/dockers/docker-stp/supervisord.conf @@ -0,0 +1,36 @@ +[supervisord] +logfile_maxbytes=1MB +logfile_backups=2 +nodaemon=true + +[program:start.sh] +command=/usr/bin/start.sh +priority=1 +autostart=true +autorestart=false +stdout_logfile=syslog +stderr_logfile=syslog + +[program:rsyslogd] +command=/usr/sbin/rsyslogd -n +priority=2 +autostart=false +autorestart=false +stdout_logfile=syslog +stderr_logfile=syslog + +[program:stpd] +command=/usr/bin/stpd +priority=3 +autostart=false +autorestart=false +stdout_logfile=syslog +stderr_logfile=syslog + +[program:stpmgrd] +command=/usr/bin/stpmgrd +priority=3 +autostart=false +autorestart=false +stdout_logfile=syslog +stderr_logfile=syslog diff --git a/files/build_templates/stp.service.j2 b/files/build_templates/stp.service.j2 new file mode 100644 index 000000000000..3cd5ac23d648 --- /dev/null +++ b/files/build_templates/stp.service.j2 @@ -0,0 +1,19 @@ +[Unit] +Description=STP container +Requires=updategraph.service swss.service +After=updategraph.service swss.service syncd.service +Before=ntp-config.service +BindsTo=sonic.target +After=sonic.target +StartLimitIntervalSec=1200 +StartLimitBurst=3 + +[Service] +User={{ sonicadmin_user }} +ExecStartPre=/usr/bin/{{docker_container_name}}.sh start +ExecStart=/usr/bin/{{docker_container_name}}.sh wait +ExecStop=/usr/bin/{{docker_container_name}}.sh stop +RestartSec=30 + +[Install] +WantedBy=multi-user.target diff --git a/files/image_config/logrotate/rsyslog.j2 b/files/image_config/logrotate/rsyslog.j2 index b0a7ff7e7002..8622b23473e7 100644 --- a/files/image_config/logrotate/rsyslog.j2 +++ b/files/image_config/logrotate/rsyslog.j2 @@ -30,6 +30,7 @@ /var/log/syslog /var/log/teamd.log /var/log/telemetry.log +/var/log/stpd.log /var/log/gnmi.log /var/log/frr/bgpd.log /var/log/frr/zebra.log diff --git a/files/image_config/rsyslog/rsyslog.d/00-sonic.conf.j2 b/files/image_config/rsyslog/rsyslog.d/00-sonic.conf.j2 index a5b4689741dc..cecabc2d575f 100644 --- a/files/image_config/rsyslog/rsyslog.d/00-sonic.conf.j2 +++ b/files/image_config/rsyslog/rsyslog.d/00-sonic.conf.j2 @@ -52,3 +52,11 @@ if $msg startswith " telemetry" or ($msg startswith " dialout" )then { /var/log/telemetry.log stop } + +## stpd rules +if $programname contains "stp" then { + if not ($msg contains "STP_SYSLOG") then { + /var/log/stpd.log + stop + } +} diff --git a/rules/docker-stp.mk b/rules/docker-stp.mk new file mode 100644 index 000000000000..d35c89c290b3 --- /dev/null +++ b/rules/docker-stp.mk @@ -0,0 +1,31 @@ +# Docker image for STP + +DOCKER_STP_STEM = docker-stp +DOCKER_STP = $(DOCKER_STP_STEM).gz +DOCKER_STP_DBG = $(DOCKER_STP_STEM)-$(DBG_IMAGE_MARK).gz + +$(DOCKER_STP)_PATH = $(DOCKERS_PATH)/$(DOCKER_STP_STEM) + +$(DOCKER_STP)_DEPENDS += $(STP) $(SWSS) $(SONIC_RSYSLOG_PLUGIN) +$(DOCKER_STP)_DBG_DEPENDS = $($(DOCKER_CONFIG_ENGINE_BOOKWORM)_DBG_DEPENDS) +$(DOCKER_STP)_DBG_DEPENDS += $(STP) $(SWSS) $(SONIC_RSYSLOG_PLUGIN) + +$(DOCKER_STP)_DBG_IMAGE_PACKAGES = $($(DOCKER_CONFIG_ENGINE_BOOKWORM)_DBG_IMAGE_PACKAGES) + +$(DOCKER_STP)_LOAD_DOCKERS = $(DOCKER_CONFIG_ENGINE_BOOKWORM) + +ifeq ($(INCLUDE_STP), y) +SONIC_DOCKER_IMAGES += $(DOCKER_STP) +SONIC_INSTALL_DOCKER_IMAGES += $(DOCKER_STP) + +SONIC_DOCKER_DBG_IMAGES += $(DOCKER_STP_DBG) +SONIC_INSTALL_DOCKER_DBG_IMAGES += $(DOCKER_STP_DBG) +endif + +$(DOCKER_STP)_LOAD_DOCKERS = $(DOCKER_CONFIG_ENGINE_BOOKWORM) + +$(DOCKER_STP)_CONTAINER_NAME = stp +$(DOCKER_STP)_RUN_OPT += -t --cap-add=NET_ADMIN --cap-add=SYS_ADMIN +$(DOCKER_STP)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro + +$(DOCKER_STP)_BASE_IMAGE_FILES += stpctl:/usr/bin/stpctl \ No newline at end of file diff --git a/rules/libevent.mk b/rules/libevent.mk new file mode 100644 index 000000000000..438b70ebd33e --- /dev/null +++ b/rules/libevent.mk @@ -0,0 +1,10 @@ +# libevent + +LIBEVENT_VERSION = 2.1.8 + +export LIBEVENT_VERSION + +LIBEVENT = libevent_$(LIBEVENT_VERSION)_amd64.deb +$(LIBEVENT)_DPKGFLAGS += --force-all +$(LIBEVENT)_SRC_PATH = $(SRC_PATH)/libevent +SONIC_MAKE_DEBS += $(LIBEVENT) diff --git a/rules/sonic-stp.mk b/rules/sonic-stp.mk new file mode 100644 index 000000000000..5c38dde38ec5 --- /dev/null +++ b/rules/sonic-stp.mk @@ -0,0 +1,18 @@ +# STP package +# +STP_VERSION = 1.0.0 +export STP_VERSION + +STP = stp_$(STP_VERSION)_$(CONFIGURED_ARCH).deb +$(STP)_SRC_PATH = $(SRC_PATH)/sonic-stp +$(STP)_DEPENDS += $(LIBEVENT) +$(STP)_DEPENDS += $(LIBSWSSCOMMON_DEV) +$(STP)_RDEPENDS += $(LIBSWSSCOMMON) +SONIC_DPKG_DEBS += $(STP) + +STP_DBG = stp-dbg_$(STP_VERSION)_$(CONFIGURED_ARCH).deb +$(STP_DBG)_DEPENDS += $(STP) +$(STP_DBG)_RDEPENDS += $(STP) +$(eval $(call add_derived_package,$(STP),$(STP_DBG))) + +export STP diff --git a/rules/swss.mk b/rules/swss.mk index df12ade5a479..b68804887c1b 100644 --- a/rules/swss.mk +++ b/rules/swss.mk @@ -4,7 +4,7 @@ SWSS = swss_1.0.0_$(CONFIGURED_ARCH).deb $(SWSS)_SRC_PATH = $(SRC_PATH)/sonic-swss $(SWSS)_DEPENDS += $(LIBSAIREDIS_DEV) $(LIBSAIMETADATA_DEV) $(LIBTEAM_DEV) \ $(LIBTEAMDCTL) $(LIBTEAM_UTILS) $(LIBSWSSCOMMON_DEV) \ - $(LIBSAIVS) $(LIBSAIVS_DEV) \ + $(LIBSAIVS) $(LIBSAIVS_DEV) $(STP)\ $(PROTOBUF) $(PROTOBUF_LITE) $(PROTOBUF_DEV) $(LIB_SONIC_DASH_API) $(SWSS)_UNINSTALLS = $(LIBSAIVS_DEV) diff --git a/slave.mk b/slave.mk index f3d9ad3e237e..9b180a1f7705 100644 --- a/slave.mk +++ b/slave.mk @@ -441,6 +441,7 @@ $(info "BLDENV" : "$(BLDENV)") $(info "VS_PREPARE_MEM" : "$(VS_PREPARE_MEM)") $(info "INCLUDE_MGMT_FRAMEWORK" : "$(INCLUDE_MGMT_FRAMEWORK)") $(info "INCLUDE_ICCPD" : "$(INCLUDE_ICCPD)") +$(info "INCLUDE_STP" : "$(INCLUDE_STP)") $(info "INCLUDE_SYSTEM_TELEMETRY" : "$(INCLUDE_SYSTEM_TELEMETRY)") $(info "INCLUDE_SYSTEM_GNMI" : "$(INCLUDE_SYSTEM_GNMI)") $(info "INCLUDE_SYSTEM_BMP" : "$(INCLUDE_SYSTEM_BMP)") @@ -873,7 +874,7 @@ $(SONIC_INSTALL_DEBS) : $(DEBS_PATH)/%-install : .platform $$(addsuffix -install # put a lock here because dpkg does not allow installing packages in parallel if mkdir $(DEBS_PATH)/dpkg_lock &> /dev/null; then ifneq ($(CROSS_BUILD_ENVIRON),y) - { sudo DEBIAN_FRONTEND=noninteractive dpkg -i $(DEBS_PATH)/$* $(LOG) && rm -d $(DEBS_PATH)/dpkg_lock && break; } || { set +e; rm -d $(DEBS_PATH)/dpkg_lock; sudo lsof /var/lib/dpkg/lock-frontend; ps aux; exit 1 ; } + { sudo DEBIAN_FRONTEND=noninteractive dpkg -i $($*_DPKGFLAGS) $(DEBS_PATH)/$* $(LOG) && rm -d $(DEBS_PATH)/dpkg_lock && break; } || { set +e; rm -d $(DEBS_PATH)/dpkg_lock; sudo lsof /var/lib/dpkg/lock-frontend; ps aux; exit 1 ; } else # Relocate debian packages python libraries to the cross python virtual env location { sudo DEBIAN_FRONTEND=noninteractive dpkg -i $(if $(findstring $(LINUX_HEADERS),$*),--force-depends) $(DEBS_PATH)/$* $(LOG) && \ @@ -1451,6 +1452,7 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \ export include_dhcp_server="$(INCLUDE_DHCP_SERVER)" export include_mgmt_framework="$(INCLUDE_MGMT_FRAMEWORK)" export include_iccpd="$(INCLUDE_ICCPD)" + export include_stpd="$(INCLUDE_STP)" export pddf_support="$(PDDF_SUPPORT)" export include_pde="$(INCLUDE_PDE)" export shutdown_bgp_on_start="$(SHUTDOWN_BGP_ON_START)" diff --git a/src/libevent/Makefile b/src/libevent/Makefile new file mode 100644 index 000000000000..0e1934280eef --- /dev/null +++ b/src/libevent/Makefile @@ -0,0 +1,20 @@ +.ONESHELL: +SHELL = /bin/bash +.SHELLFLAGS += -e + +MAIN_TARGET = libevent_$(LIBEVENT_VERSION)_$(CONFIGURED_ARCH).deb + +$(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : + # Obtaining the libevent + rm -rf ./libevent-$(LIBEVENT_VERSION)-stable + wget -N "https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz" + tar -xzf libevent-$(LIBEVENT_VERSION)-stable.tar.gz + rm -rf libevent-$(LIBEVENT_VERSION)-stable.tar.gz + cp debian libevent-$(LIBEVENT_VERSION)-stable -r + + pushd ./libevent-$(LIBEVENT_VERSION)-stable + dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) + popd + mv $(MAIN_TARGET) $(DEST)/ + +#$(addprefix $(DEST)/, $(DERIVED_TARGETS)): $(DEST)/% : $(DEST)/$(MAIN_TARGET) diff --git a/src/libevent/debian/changelog b/src/libevent/debian/changelog new file mode 100644 index 000000000000..da450b541467 --- /dev/null +++ b/src/libevent/debian/changelog @@ -0,0 +1,4 @@ +sonic (2.1.8) stable; urgency=medium + + * libevent 2.1.8 stable version pulled github + -- LIBEVENT <@broadcom.com> Fri, 26 Apr 2019 12:00:00 -0800 diff --git a/src/libevent/debian/compat b/src/libevent/debian/compat new file mode 100644 index 000000000000..7f8f011eb73d --- /dev/null +++ b/src/libevent/debian/compat @@ -0,0 +1 @@ +7 diff --git a/src/libevent/debian/control b/src/libevent/debian/control new file mode 100644 index 000000000000..5be2936e55cc --- /dev/null +++ b/src/libevent/debian/control @@ -0,0 +1,18 @@ +Source: sonic +Maintainer: Broadcom +Section: net +Priority: optional +Build-Depends: dh-exec (>=0.3), debhelper (>= 9), autotools-dev +Standards-Version: 1.0.0 + +Package: libevent +Architecture: any +Depends: ${shlibs:Depends} +Description: This package contains Libevent2.1.8 for SONiC project. + +Package: libevent-dbg +Architecture: any +Section: debug +Priority: extra +Depends: libevent (=${binary:Version}) +Description: debugging symbols for libevent diff --git a/src/libevent/debian/rules b/src/libevent/debian/rules new file mode 100644 index 000000000000..a781d09adf5c --- /dev/null +++ b/src/libevent/debian/rules @@ -0,0 +1,16 @@ +#!/usr/bin/make -f + +DPKG_EXPORT_BUILDFLAGS = 1 +include /usr/share/dpkg/default.mk + +%: + dh $@ --with autotools-dev + +override_dh_auto_configure: + dh_auto_configure -- --disable-samples --disable-libevent-regress + +override_dh_auto_install: + dh_auto_install --destdir=debian/libevent + +override_dh_strip: + dh_strip --dbg-package=libevent-dbg