67 lines
2.7 KiB
Docker
67 lines
2.7 KiB
Docker
# Stage 1: Build patched Rust FFI with HKDF support for Element Call E2EE
|
|
# Fork: onestacked/livekit-rust-sdks branch EC-compat-changes
|
|
# PR: https://github.com/livekit/rust-sdks/pull/904
|
|
FROM rust:latest AS rust-build
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
git cmake g++ libssl-dev pkg-config protobuf-compiler \
|
|
libva-dev libglib2.0-dev nasm \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
WORKDIR /build
|
|
RUN git clone --branch EC-compat-changes --depth 1 \
|
|
https://github.com/onestacked/livekit-rust-sdks.git
|
|
WORKDIR /build/livekit-rust-sdks/livekit-ffi
|
|
RUN cargo build --release
|
|
|
|
# Stage 2: Generate Python protobuf bindings from patched .proto files
|
|
FROM python:3.11-slim-bookworm AS proto-gen
|
|
RUN pip install --no-cache-dir protobuf grpcio-tools mypy-protobuf
|
|
COPY --from=rust-build /build/livekit-rust-sdks/livekit-ffi/protocol/ /proto/
|
|
RUN mkdir -p /gen && \
|
|
python -m grpc_tools.protoc \
|
|
-I/proto \
|
|
--python_out=/gen \
|
|
--mypy_out=/gen \
|
|
/proto/audio_frame.proto \
|
|
/proto/ffi.proto \
|
|
/proto/handle.proto \
|
|
/proto/participant.proto \
|
|
/proto/room.proto \
|
|
/proto/track.proto \
|
|
/proto/video_frame.proto \
|
|
/proto/e2ee.proto \
|
|
/proto/stats.proto \
|
|
/proto/track_publication.proto \
|
|
/proto/rpc.proto \
|
|
/proto/data_stream.proto && \
|
|
touch /gen/__init__.py && \
|
|
# Fix imports to be relative (same as upstream generate_proto.sh)
|
|
for f in /gen/*.py /gen/*.pyi; do \
|
|
perl -i -pe 's|^(import (audio_frame_pb2\|ffi_pb2\|handle_pb2\|participant_pb2\|room_pb2\|track_pb2\|video_frame_pb2\|e2ee_pb2\|stats_pb2\|rpc_pb2\|track_publication_pb2\|data_stream_pb2))|from . \1|g' "$f"; \
|
|
done
|
|
|
|
# Stage 3: Final image
|
|
FROM python:3.11-slim-bookworm
|
|
WORKDIR /app
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
ffmpeg libolm-dev \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
COPY requirements.txt .
|
|
RUN pip install --no-cache-dir -r requirements.txt
|
|
|
|
# Overwrite installed FFI binary with patched version (HKDF + key_ring_size support)
|
|
COPY --from=rust-build /build/livekit-rust-sdks/target/release/liblivekit_ffi.so /patched/
|
|
ENV LIVEKIT_LIB_PATH=/patched/liblivekit_ffi.so
|
|
|
|
# Overwrite installed proto bindings with patched versions (new fields: key_ring_size, key_derivation_function)
|
|
COPY --from=proto-gen /gen/ /patched_proto/
|
|
RUN PROTO_DIR=$(python -c "import livekit.rtc._proto; import os; print(os.path.dirname(livekit.rtc._proto.__file__))") && \
|
|
cp /patched_proto/*.py "$PROTO_DIR/" && \
|
|
cp /patched_proto/*.pyi "$PROTO_DIR/" 2>/dev/null || true
|
|
|
|
# Patch SDK Python code to pass new fields through to proto (e2ee.py + room.py)
|
|
COPY patch_sdk.py /tmp/patch_sdk.py
|
|
RUN python /tmp/patch_sdk.py && rm /tmp/patch_sdk.py
|
|
|
|
COPY . .
|