Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 0 additions & 9 deletions docker-sonic-alpinevs.mk
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,12 @@ SONIC_DOCKER_IMAGES += $(DOCKER_SONIC_ALPINEVS)
SONIC_TRIXIE_DOCKERS += $(DOCKER_SONIC_ALPINEVS)

ALPINEVS_DOCKER_STAGING_DIR := $(PLATFORM_PATH)/docker-sonic-alpinevs/bin
ALPINEVS_PKT_HANDLER_SRC_DIR := $(PLATFORM_PATH)/src/services/pkt-handler
ALPINEVS_CONFIG_SRC := $(PLATFORM_PATH)/src/services/config/alpinevs-config.sh
ALPINEVS_INIT_SRC := $(PLATFORM_PATH)/docker-sonic-alpinevs/alpinevs-init.sh
ALPINEVS_ADMIN_USERNAME_FILE := $(ALPINEVS_DOCKER_STAGING_DIR)/sonic-admin.username
ALPINEVS_ADMIN_PASSWORD_HASH := $(ALPINEVS_DOCKER_STAGING_DIR)/sonic-admin.password.hash

ALPINEVS_DOCKER_STAGE_FILES := \
$(ALPINEVS_DOCKER_STAGING_DIR)/pkt-handler \
$(ALPINEVS_DOCKER_STAGING_DIR)/alpinevs-config.sh \
$(ALPINEVS_DOCKER_STAGING_DIR)/alpinevs-init.sh \
$(ALPINEVS_ADMIN_USERNAME_FILE) \
Expand All @@ -77,13 +75,6 @@ $(ALPINEVS_ADMIN_PASSWORD_HASH): | $(ALPINEVS_DOCKER_STAGING_DIR)
printf '%s\n' '!' > "$@"; \
fi

# Always rebuild it before staging the Docker build-context copy
.PHONY: $(ALPINEVS_DOCKER_STAGING_DIR)/pkt-handler
$(ALPINEVS_DOCKER_STAGING_DIR)/pkt-handler: | $(ALPINEVS_DOCKER_STAGING_DIR)
$(MAKE) -C $(ALPINEVS_PKT_HANDLER_SRC_DIR) clean
$(MAKE) -C $(ALPINEVS_PKT_HANDLER_SRC_DIR) all
cp $(ALPINEVS_PKT_HANDLER_SRC_DIR)/pkt-handler $@

$(ALPINEVS_DOCKER_STAGING_DIR)/alpinevs-config.sh: \
$(ALPINEVS_CONFIG_SRC) | $(ALPINEVS_DOCKER_STAGING_DIR)
cp -L $< $@
Expand Down
6 changes: 5 additions & 1 deletion docker-sonic-alpinevs/Dockerfile.j2
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ RUN sed -ri 's/^# save ""$/save ""/g; \

COPY ["50-default.conf", "/etc/rsyslog.d/"]
COPY ["start.sh", "orchagent.sh", "telemetry.sh", "files/update_chassisdb_config", "/usr/bin/"]
COPY ["alpinevs-script.sh", "alpinevs-healthcheck.sh", "p4rt.sh", "bin/alpinevs-init.sh","bin/alpinevs-config.sh","bin/pkt-handler", "/usr/bin/"]
COPY ["alpinevs-script.sh", "alpinevs-healthcheck.sh", "p4rt.sh", "bin/alpinevs-init.sh","bin/alpinevs-config.sh","/usr/bin/"]
COPY ["uptime", "/usr/local/bin/uptime"]
COPY ["docker", "/usr/local/bin/docker"]
COPY ["supervisord.conf.j2", "/usr/share/sonic/templates/"]
Expand Down Expand Up @@ -178,6 +178,10 @@ RUN sonic_admin="$(cat /tmp/sonic-admin.username)" && \

COPY sshd.conf /etc/supervisor/conf.d/sshd.conf

# Enable CLI completion in interactive root shells, including sudo su.
RUN printf '\nif [ -r /usr/share/bash-completion/bash_completion ]; then\n . /usr/share/bash-completion/bash_completion\nfi\n' \
>> /root/.bashrc

ENV PLATFORM=x86_64-kvm_x86_64-r0
ENV HWSKU=alpinevs
ENV SOC_TARGET_SERVER=127.0.0.1:50000
Expand Down
15 changes: 14 additions & 1 deletion pkt-handler.mk
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,19 @@ ALPINE_SRC_PATH=platform/alpinevs
PKT_HANDLER = lucius-pkthandler_1.0-2_$(CONFIGURED_ARCH).deb
$(PKT_HANDLER)_SRC_PATH = $(ALPINE_SRC_PATH)/src/services/pkt-handler
$(PKT_HANDLER)_DEPENDS += $(LIBNL3_DEV) $(LIBNL_GENL3_DEV)

$(PKT_HANDLER)_RDEPENDS += $(LIBNL3) $(LIBNL_GENL3)

PKT_HANDLER_SRC_FILES = \
$(wildcard $($(PKT_HANDLER)_SRC_PATH)/*.go) \
$(wildcard $($(PKT_HANDLER)_SRC_PATH)/go.mod) \
$(wildcard $($(PKT_HANDLER)_SRC_PATH)/go.sum) \
$($(PKT_HANDLER)_SRC_PATH)/Makefile \
$($(PKT_HANDLER)_SRC_PATH)/lucius-pkthandler.service \
$(wildcard $($(PKT_HANDLER)_SRC_PATH)/debian/*)

$(addprefix $(DEBS_PATH)/,$(PKT_HANDLER)): $(PKT_HANDLER_SRC_FILES)

$(DEBS_PATH)/$(PKT_HANDLER): $(PKT_HANDLER_SRC_FILES)
$(DOCKER_SONIC_ALPINEVS)_CONTAINER_DEBS += $(PKT_HANDLER)

SONIC_DPKG_DEBS += $(PKT_HANDLER)
48 changes: 46 additions & 2 deletions src/build/build_alpinevs_docker_save.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,48 @@
gzip -d -c target/sonic-alpinevs.img.gz > platform/alpinevs/src/deploy/kne/vm/vm.img
#!/bin/bash
set -eo pipefail

IMAGE_FILE="target/sonic-alpinevs.img.gz"
VM_DIR="platform/alpinevs/src/deploy/kne/vm"
MAX_RETRIES=3
RETRY_DELAY=5

# 1. Check if input image exists before proceeding
if [ ! -f "$IMAGE_FILE" ]; then
echo "ERROR: File '$IMAGE_FILE' not found. Please run the build to produce sonic-alpinevs.img.gz first." >&2
exit 1
fi

# 2. Decompress input image
mkdir -p "$VM_DIR"
gzip -d -c "$IMAGE_FILE" > "$VM_DIR/vm.img"

# 3. Ensure Docker service is running
sudo service docker status > /dev/null 2>&1 || (sudo service docker start > /dev/null 2>&1 && ./scripts/wait_for_docker.sh 60)
DOCKER_BUILDKIT=0 docker build platform/alpinevs/src/deploy/kne/vm -t alpine-vs:latest

# 4. Docker build with retry logic for network/package retrieval failures
build_passed=0
for ((i=1; i<=MAX_RETRIES; i++)); do
echo "Building docker image 'alpine-vs:latest' (Attempt $i/$MAX_RETRIES)..."
if DOCKER_BUILDKIT=0 docker build "$VM_DIR" -t alpine-vs:latest; then
build_passed=1
echo "Docker build succeeded."
break
else
echo "WARNING: Docker build failed on attempt $i." >&2
if [ $i -lt $MAX_RETRIES ]; then
echo "Retrying in ${RETRY_DELAY} seconds..." >&2
sleep $RETRY_DELAY
fi
fi
done

if [ $build_passed -ne 1 ]; then
echo "ERROR: Docker build failed after $MAX_RETRIES attempts." >&2
exit 1
fi

# 5. Save the final image tarball
mkdir -p target
docker save alpine-vs:latest | gzip -c > target/sonic-alpinevs-docker.tar.gz

echo "Successfully built and exported target/sonic-alpinevs-docker.tar.gz"
6 changes: 4 additions & 2 deletions src/deploy/kne/vm/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
FROM ubuntu:20.04
FROM ubuntu:22.04

ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update -qy \
&& apt-get upgrade -qy \
&& apt-get install -qy --no-install-recommends software-properties-common \
&& add-apt-repository -y universe \
&& apt-get update -qy \
&& apt-get install -y \
bridge-utils \
iproute2 \
Expand Down
1 change: 0 additions & 1 deletion src/services/init/debian/install
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,3 @@ alpinevs-init.service lib/systemd/system/
pmon_daemon_control.json usr/share/sonic/device/x86_64-kvm_x86_64-r0/alpine_vs
sai.profile usr/share/sonic/device/x86_64-kvm_x86_64-r0/alpine_vs
platform.json usr/share/sonic/device/x86_64-kvm_x86_64-r0/alpine_vs
hwsku.json usr/share/sonic/device/x86_64-kvm_x86_64-r0/alpine_vs
40 changes: 40 additions & 0 deletions utils/get_official_build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#!/usr/bin/env bash
set -euo pipefail


#Script to download the official alpine build from Github

API="https://dev.azure.com/mssonic/build/_apis/build"

# DEFINITION_ID = 1 to download alpine from sonic-buildimage master build,
# DEFINITION_ID = 3412 to download alpine from the alpine official build
# Both are practically the same
DEFINITION_ID="1"
BRANCH="master"
ARTIFACT="sonic-buildimage.alpinevs"
IMAGE="target/sonic-alpinevs.img.gz"

BUILD_ID=$(
curl -fsSL \
"$API/builds?definitions=$DEFINITION_ID&branchName=refs/heads/$BRANCH&resultFilter=succeeded&queryOrder=finishTimeDescending&%24top=1&api-version=7.1" | jq -er '.value[0].id'
)

ZIP_URL=$(
curl -fsSL "$API/builds/$BUILD_ID/artifacts?artifactName=$ARTIFACT&api-version=7.1" | jq -er '.resource.downloadUrl'
)

echo "Build ID: $BUILD_ID"
echo "Artifact ZIP URL: $ZIP_URL"

OUTPUT_FILE="${ARTIFACT}-${BUILD_ID}.zip"
echo "Downloading $OUTPUT_FILE..."

curl -L -C - \
--retry 100 \
--retry-delay 5 \
--retry-all-errors \
--connect-timeout 60 \
-o "$OUTPUT_FILE" \
"$ZIP_URL"

echo "Download complete: $(pwd)/$OUTPUT_FILE"
Loading