Skip to content
Open
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
59 changes: 47 additions & 12 deletions build_docker.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,53 @@ BUILD_ARGUMENTS=()
mapfile -t BUILD_ARGUMENTS < <(compgen -e | sed -nE '/^(.*)(_proxy|_PROXY)$/{s/^/--build-arg=/;p}')
BUILD_ARGUMENTS+=( "--progress=plain" "--network=host" "--build-arg" "IMAGE_CACHE_REGISTRY=${IMAGE_CACHE_REGISTRY}" )

docker buildx build "${BUILD_ARGUMENTS[@]}" -t "${IMAGE_REGISTRY}/mcm/sdk:${IMAGE_TAG}" -f "${SCRIPT_DIR}/sdk/Dockerfile" "$@" "${SCRIPT_DIR}"
MCM_SDK="$(echo docker buildx build "${BUILD_ARGUMENTS[@]}" -t "${IMAGE_REGISTRY}/mcm/sdk:${IMAGE_TAG}" -f "${SCRIPT_DIR}/sdk/Dockerfile" "$@" "${SCRIPT_DIR}")"
MCM_MEDIA_PROXY="$(echo docker buildx build "${BUILD_ARGUMENTS[@]}" -t "${IMAGE_REGISTRY}/mcm/media-proxy:${IMAGE_TAG}" --target media-proxy -f "${SCRIPT_DIR}/media-proxy/Dockerfile" "$@" "${SCRIPT_DIR}")"
MCM_MTL_MANAGER="$(echo docker buildx build "${BUILD_ARGUMENTS[@]}" -t "${IMAGE_REGISTRY}/mcm/mtl-manager:${IMAGE_TAG}" --target mtl-manager -f "${SCRIPT_DIR}/media-proxy/Dockerfile" "$@" "${SCRIPT_DIR}")"
MCM_MESH_AGENT="$(echo docker buildx build "${BUILD_ARGUMENTS[@]}" -t "${IMAGE_REGISTRY}/mcm/mesh-agent:${IMAGE_TAG}" --target mesh-agent -f "${SCRIPT_DIR}/media-proxy/Dockerfile" "$@" "${SCRIPT_DIR}")"

docker buildx build "${BUILD_ARGUMENTS[@]}" -t "${IMAGE_REGISTRY}/mcm/media-proxy:${IMAGE_TAG}" --target media-proxy -f "${SCRIPT_DIR}/media-proxy/Dockerfile" "$@" "${SCRIPT_DIR}"
docker buildx build "${BUILD_ARGUMENTS[@]}" -t "${IMAGE_REGISTRY}/mcm/mtl-manager:${IMAGE_TAG}" --target mtl-manager -f "${SCRIPT_DIR}/media-proxy/Dockerfile" "$@" "${SCRIPT_DIR}"
docker buildx build "${BUILD_ARGUMENTS[@]}" -t "${IMAGE_REGISTRY}/mcm/mesh-agent:${IMAGE_TAG}" --target mesh-agent -f "${SCRIPT_DIR}/media-proxy/Dockerfile" "$@" "${SCRIPT_DIR}"
FFMPEG_7_0="$(echo docker buildx build "${BUILD_ARGUMENTS[@]}" --build-arg FFMPEG_VER="7.0" -t "${IMAGE_REGISTRY}/mcm/ffmpeg:${IMAGE_TAG}" -f "${SCRIPT_DIR}/ffmpeg-plugin/Dockerfile" "$@" "${SCRIPT_DIR}")"
FFMPEG_6_1="$(echo docker buildx build "${BUILD_ARGUMENTS[@]}" --build-arg FFMPEG_VER="6.1" -t "${IMAGE_REGISTRY}/mcm/ffmpeg:6.1-${IMAGE_TAG}" -f "${SCRIPT_DIR}/ffmpeg-plugin/Dockerfile" "$@" "${SCRIPT_DIR}")"

docker buildx build "${BUILD_ARGUMENTS[@]}" --build-arg FFMPEG_VER="7.0" -t "${IMAGE_REGISTRY}/mcm/ffmpeg:${IMAGE_TAG}" -f "${SCRIPT_DIR}/ffmpeg-plugin/Dockerfile" "$@" "${SCRIPT_DIR}"
docker buildx build "${BUILD_ARGUMENTS[@]}" --build-arg FFMPEG_VER="6.1" -t "${IMAGE_REGISTRY}/mcm/ffmpeg:6.1-${IMAGE_TAG}" -f "${SCRIPT_DIR}/ffmpeg-plugin/Dockerfile" "$@" "${SCRIPT_DIR}"
export MCM_SDK
export MCM_MEDIA_PROXY
export MCM_MTL_MANAGER
export MCM_MESH_AGENT
export FFMPEG_7_0
export FFMPEG_6_1

docker tag "${IMAGE_REGISTRY}/mcm/sdk:${IMAGE_TAG}" "mcm/sample-app:${IMAGE_TAG}"
docker tag "${IMAGE_REGISTRY}/mcm/media-proxy:${IMAGE_TAG}" "mcm/media-proxy:${IMAGE_TAG}"
docker tag "${IMAGE_REGISTRY}/mcm/mtl-manager:${IMAGE_TAG}" "mcm/mtl-manager:${IMAGE_TAG}"
docker tag "${IMAGE_REGISTRY}/mcm/mesh-agent:${IMAGE_TAG}" "mcm/mesh-agent:${IMAGE_TAG}"
docker tag "${IMAGE_REGISTRY}/mcm/ffmpeg:${IMAGE_TAG}" "mcm/ffmpeg:${IMAGE_TAG}"
docker tag "${IMAGE_REGISTRY}/mcm/ffmpeg:6.1-${IMAGE_TAG}" "mcm/ffmpeg:6.1-${IMAGE_TAG}"
function build_and_tag_all_dockerfiles() {
$MCM_SDK
$MCM_MEDIA_PROXY
$MCM_MTL_MANAGER
$MCM_MESH_AGENT
$FFMPEG_7_0
$FFMPEG_6_1

docker tag "${IMAGE_REGISTRY}/mcm/sdk:${IMAGE_TAG}" "mcm/sample-app:${IMAGE_TAG}"
docker tag "${IMAGE_REGISTRY}/mcm/media-proxy:${IMAGE_TAG}" "mcm/media-proxy:${IMAGE_TAG}"
docker tag "${IMAGE_REGISTRY}/mcm/mtl-manager:${IMAGE_TAG}" "mcm/mtl-manager:${IMAGE_TAG}"
docker tag "${IMAGE_REGISTRY}/mcm/mesh-agent:${IMAGE_TAG}" "mcm/mesh-agent:${IMAGE_TAG}"
docker tag "${IMAGE_REGISTRY}/mcm/ffmpeg:${IMAGE_TAG}" "mcm/ffmpeg:${IMAGE_TAG}"
docker tag "${IMAGE_REGISTRY}/mcm/ffmpeg:6.1-${IMAGE_TAG}" "mcm/ffmpeg:6.1-${IMAGE_TAG}"
}
function print_build_help_dockerfiles() {
echo -e MCM_SDK="${MCM_SDK}\n"
echo -e MCM_MEDIA_PROXY="${MCM_MEDIA_PROXY}\n"
echo -e MCM_MTL_MANAGER="${MCM_MTL_MANAGER}\n"
echo -e MCM_MESH_AGENT="${MCM_MESH_AGENT}\n"
echo -e FFMPEG_7_0="${FFMPEG_7_0}\n"
echo -e FFMPEG_6_1="${FFMPEG_6_1}\n"
}

# Allow sourcing of the script. Run only when asked
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
# ======= RUNTIME EXEC START
build_and_tag_all_dockerfiles
print_build_help_dockerfiles
# ======= RUNTIME EXEC STOP
else
# ======= SOURCED SCRIPT START
return 0
# ======= RUNTIME SCRIPT STOP
fi
103 changes: 19 additions & 84 deletions media-proxy/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,30 +8,27 @@ ARG IMAGE_NAME=library/ubuntu:22.04@sha256:a6d2b38300ce017add71440577d5b0a90460d

FROM ${IMAGE_CACHE_REGISTRY}/${IMAGE_NAME} AS builder

ARG MCM_DIR="/opt/mcm"
ARG VERSIONS_FILE="versions.env"
COPY "${VERSIONS_FILE}" /opt/versions.env
ENV BASH_ENV=/opt/versions.env
ARG GITHUB_CREDENTIALS=""
COPY . "${MCM_DIR}"
COPY "${VERSIONS_FILE}" "${MCM_DIR}/versions.env"

ARG MTL_VER=""
ARG DPDK_VER=""
ARG GPRC_VER=""
ARG JPEGXS_VER=""
ARG LIBFABRIC_VER=""
SHELL ["/bin/bash", "-ex", "-o", "pipefail", "-c"]
ENV BASH_ENV="${MCM_DIR}/versions.env"

ARG MCM_DIR="/opt/mcm"
ARG MTL_DIR="/opt/mtl"
ARG DPDK_DIR="/opt/dpdk"
ARG XDP_DIR="/opt/xdp"
ARG GRPC_DIR="/opt/grpc"
ARG JPEGXS_DIR="/opt/jpegxs"
ARG LIBFABRIC_DIR="/opt/libfabric"
ENV PREFIX_DIR="/install"
ENV REPO_DIR="${MCM_DIR}"
ENV BUILD_DIR="${REPO_DIR}/_build}"
ENV GRPC_DIR="${BUILD_DIR}/grpc"
ENV DPDK_DIR="${BUILD_DIR}/dpdk"
ENV XDP_DIR="${BUILD_DIR}/xdp"
ENV JPEGXS_DIR="${BUILD_DIR}/jpegxs"
ENV LIBFABRIC_DIR="${BUILD_DIR}/libfabric"

ARG GITHUB_CREDENTIALS=""
ARG PREFIX_DIR="/install"
ENV PATH="${PREFIX_DIR}/bin:/root/.local/bin:/root/bin:/root/usr/bin:$PATH"
ENV PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/local/lib/x86_64-linux-gnu/pkgconfig

SHELL ["/bin/bash", "-ex", "-o", "pipefail", "-c"]
# Install package dependencies
RUN apt-get update --fix-missing && \
apt-get full-upgrade -y && \
Expand All @@ -56,73 +53,11 @@ RUN curl -Lf "https://go.dev/dl/go${GOLANG_GO_VER}.linux-amd64.tar.gz" -o "/usr/
go install "${GOLANG_PROTOBUF_GEN}" && \
go install "${GOLANG_GRPC_GEN}"

# Clone MTL, DPDK and xdp-tools repo
WORKDIR ${DPDK_DIR}
RUN git clone --branch main https://${GITHUB_CREDENTIALS}github.com/OpenVisualCloud/Media-Transport-Library "${MTL_DIR}" && \
git -C "${MTL_DIR}" checkout ${MTL_VER} && \
git clone --branch v${DPDK_VER} --depth 1 https://github.com/DPDK/dpdk.git "${DPDK_DIR}" && \
git clone --recurse-submodules https://github.com/xdp-project/xdp-tools.git "${XDP_DIR}" && \
git clone --depth 1 --branch "${LIBFABRIC_VER}" https://github.com/ofiwg/libfabric "${LIBFABRIC_DIR}" && \
git clone --branch ${GPRC_VER} --recurse-submodules --depth 1 --shallow-submodules https://github.com/grpc/grpc "${GRPC_DIR}" && \
git clone https://github.com/OpenVisualCloud/SVT-JPEG-XS "${JPEGXS_DIR}" && \
git -C ${JPEGXS_DIR} checkout ${JPEGXS_VER} && \
patch -p1 -i <(cat "${MTL_DIR}/patches/dpdk/${DPDK_VER}/"*.patch)
RUN patch -d "${DPDK_DIR}" -p1 < "${MTL_DIR}/patches/dpdk/${DPDK_VER}/hdr_split/"*.patch || true
RUN patch -d "${DPDK_DIR}" -p1 < "${MTL_DIR}/patches/dpdk/${DPDK_VER}/tsn/"*.patch || true

# Build the xdp-tools project
WORKDIR ${XDP_DIR}
RUN ./configure && \
make && \
make install && \
DESTDIR="${PREFIX_DIR}" make install && \
make -C "${XDP_DIR}/lib/libbpf/src" && \
make -C "${XDP_DIR}/lib/libbpf/src" install && \
DESTDIR="${PREFIX_DIR}" make -C "${XDP_DIR}/lib/libbpf/src" install

WORKDIR ${LIBFABRIC_DIR}
RUN ./autogen.sh && \
./configure --enable-verbs && \
make "-j$(nproc)" && \
make install && \
DESTDIR="${PREFIX_DIR}" make install

# Build the DPDK
WORKDIR ${DPDK_DIR}
RUN meson setup build && \
ninja -C build && \
meson install -C build && \
DESTDIR="${PREFIX_DIR}" meson install -C build

# Build MTL
WORKDIR ${MTL_DIR}
RUN ./build.sh && \
DESTDIR="${PREFIX_DIR}" meson install -C build

# gRPC
WORKDIR ${GRPC_DIR}/cmake/build
RUN cmake -DgRPC_BUILD_TESTS=OFF -DgRPC_INSTALL=ON ../.. && \
make "-j$(nproc)" && \
make install && \
cmake -DgRPC_BUILD_TESTS=ON -DgRPC_INSTALL=ON ../.. && \
make "-j$(nproc)" grpc_cli && \
cp grpc_cli "${PREFIX_DIR}/usr/local/bin/"

# Build and install JPEG XS
WORKDIR ${JPEGXS_DIR}/Build/linux
RUN ./build.sh release install && \
./build.sh release --prefix "${PREFIX_DIR}/usr/local" install

# Build and install JPEG XS imtl plugin
WORKDIR ${JPEGXS_DIR}/imtl-plugin
RUN ./build.sh build-only && \
DESTDIR="${PREFIX_DIR}" meson install --no-rebuild -C build && \
mkdir -p /install/usr/local/etc/ && \
cp ${JPEGXS_DIR}/imtl-plugin/kahawai.json /install/usr/local/etc/jpegxs.json
WORKDIR "${MCM_DIR}"
RUN scripts/setup_build_env.sh

# Build MCM
WORKDIR ${MCM_DIR}
COPY . ${MCM_DIR}
RUN ./build.sh "${PREFIX_DIR}" && \
cp "${MTL_DIR}/build/manager/MtlManager" "${PREFIX_DIR}/usr/local/bin/" && \
cp -fR "/usr/local/lib/bpf/"* "${PREFIX_DIR}/usr/local/lib/bpf/" && \
Expand All @@ -137,7 +72,7 @@ RUN ./build.sh "${PREFIX_DIR}" && \

ARG IMAGE_CACHE_REGISTRY
ARG IMAGE_NAME
FROM ${IMAGE_CACHE_REGISTRY}/${IMAGE_NAME} as media-proxy
FROM ${IMAGE_CACHE_REGISTRY}/${IMAGE_NAME} AS media-proxy

LABEL maintainer="[email protected],[email protected]"
LABEL org.opencontainers.image.title="Media Communications Mesh Media Proxy"
Expand Down Expand Up @@ -184,7 +119,7 @@ SHELL ["/bin/bash", "-c"]
ENTRYPOINT ["/usr/local/bin/media_proxy"]
HEALTHCHECK --interval=30s --timeout=5s CMD ps aux | grep "media_proxy" || exit 1

FROM media-proxy as mtl-manager
FROM media-proxy AS mtl-manager

LABEL maintainer="[email protected],[email protected]"
LABEL org.opencontainers.image.title="Media Communications Mesh Mtl Manager"
Expand All @@ -198,7 +133,7 @@ SHELL ["/bin/bash", "-c"]
ENTRYPOINT ["/usr/local/bin/MtlManager"]
HEALTHCHECK --interval=30s --timeout=5s CMD if(( $(ps aux | grep "MtlManager" | wc -l) != 2 )); then exit 1; fi

FROM media-proxy as mesh-agent
FROM media-proxy AS mesh-agent

LABEL maintainer="[email protected],[email protected]"
LABEL org.opencontainers.image.title="Media Communications Mesh Mesh Agent"
Expand Down
44 changes: 7 additions & 37 deletions scripts/common.sh
Original file line number Diff line number Diff line change
@@ -1,52 +1,22 @@
#!/bin/bash

# SPDX-License-Identifier: BSD-3-Clause
# Copyright 2024 Intel Corporation
# Copyright 2025 Intel Corporation

REPO_DIR="$(readlink -f "$(dirname -- "${BASH_SOURCE[0]}")/..")"
export REPO_DIR
export BUILD_DIR="${BUILD_DIR:-${REPO_DIR}/_build}"
export DRIVERS_DIR="${DRIVERS_DIR:-/opt/intel/drivers}"
export PREFIX_DIR="${PREFIX_DIR:-${REPO_DIR}/_install}"

MCM_VERSIONS_FILE_PATH="$(readlink -f "${MCM_VERSIONS_FILE:-${REPO_DIR}/versions.env}")"
export MCM_VERSIONS_FILE_PATH

MCM_VERSIONS_FILE_PATH="$(readlink -f "${MCM_VERSIONS_FILE_PATH:-${REPO_DIR}/versions.env}")"
if [[ -f "${MCM_VERSIONS_FILE_PATH}" ]]; then
# shellcheck source="versions.env"
. "${MCM_VERSIONS_FILE_PATH}"

export MTL_DIR="${BUILD_DIR}/mtl"
MTL_VERSIONS_FILE_PATH="${MTL_VERSIONS_FILE:-${MTL_DIR}/versions.env}"

if [[ -f "${MTL_VERSIONS_FILE_PATH}" ]]; then
MTL_VERSIONS_FILE_PATH="$(readlink -f "${MTL_VERSIONS_FILE_PATH}")"
export MTL_VERSIONS_FILE_PATH
# shellcheck source=/dev/null
. "${MTL_VERSIONS_FILE_PATH}"
. "${MCM_VERSIONS_FILE_PATH}"
fi

export DPDK_DIR="${BUILD_DIR}/dpdk"
export XDP_DIR="${BUILD_DIR}/xdp"
export BPF_DIR="${XDP_DIR}/lib/libbpf"
export GRPC_DIR="${BUILD_DIR}/grpc"
export JPEGXS_DIR="${BUILD_DIR}/jpegxs"
export LIBFABRIC_DIR="${BUILD_DIR}/libfabric"
export LIBFDT_DIR="${BUILD_DIR}/libfdt"
export JSONC_DIR="${BUILD_DIR}/json-c"
export CMAKE_DIR="${BUILD_DIR}/cmake"
export NASM_DIR="${BUILD_DIR}/nasm"

export ICE_DIR="${DRIVERS_DIR}/ice/${ICE_VER}"
export IRDMA_DIR="${DRIVERS_DIR}/irdma/${IRDMA_VER}"

PM="${PM:-apt-get}"
KERNEL_VERSION="${KERNEL_VERSION:-$(uname -r)}"
export TZ="${TZ:-Europe/Warsaw}"
export NPROC="${NPROC:-$(nproc)}"
NPROC="${NPROC:-$(nproc)}"

if ! grep "/root/.local/bin" <<< "${PATH}" > /dev/null 2>&1; then
export PATH="/root/.local/bin:/root/bin:/root/usr/bin:${PATH}"
export PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/local/lib/x86_64-linux-gnu/pkgconfig:${PKG_CONFIG_PATH}"
export PATH="/root/.local/bin:/root/bin:/root/usr/bin:${PATH}"
export PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/local/lib/x86_64-linux-gnu/pkgconfig:${PKG_CONFIG_PATH}"
fi

BOLD="${BOLD:-\e[1;}"
Expand Down
6 changes: 0 additions & 6 deletions scripts/setup_build_env.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,6 @@
SCRIPT_DIR="$(readlink -f "$(dirname -- "${BASH_SOURCE[0]}")")"
. "${SCRIPT_DIR}/common.sh"

export PM="${PM:-apt-get}"
export DEBIAN_FRONTEND="noninteractive"

export KERNEL_VERSION="${KERNEL_VERSION:-$(uname -r)}"
export INSTALL_USE_CUSTOM_PATH="${INSTALL_USE_CUSTOM_PATH:-false}"

SYS_PKG_CONFIG_PATH="${SYS_PKG_CONFIG_PATH:-/usr/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/lib/x86_64-linux-gnu/pkgconfig}"
if [[ "${PKG_CONFIG_PATH}" != *"${SYS_PKG_CONFIG_PATH}"* ]]; then
export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:${SYS_PKG_CONFIG_PATH}"
Expand Down
Loading
Loading