Skip to content
Draft
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
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ Filter a single relay: `make interop-remote RELAY=moxygen`. See [Getting Started
| moqtransport | TUM | 13 | relay | (no persistent relay) |
| moqtail | OzU | 14 | relay | `https://relay.moqtail.dev` |
| libquicr | Cisco | 14 | relay | `https://us-west-2.relay.quicr.org:33437/relay` |
| imquic | Meetecho | 11-16 | relay | `https://lminiero.it:9000` |
| imquic | Meetecho | 16-17 | relay | `https://lminiero.it:9000` |

This table is a snapshot — run `make interop-list` or see [`implementations.json`](./implementations.json) for the current state. See [IMPLEMENTATIONS.md](./IMPLEMENTATIONS.md) for how to add your implementation.

Expand Down
67 changes: 67 additions & 0 deletions builds/imquic/Dockerfile.client
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# syntax=docker/dockerfile:1
# Dockerfile for imquic-moq-interop-test
#
# This Dockerfile is used by the moq-interop-runner builds framework.
# It expects to be run with the imquic repository root as the build context.
#
# Usage (via build.sh):
# ./builds/imquic/build.sh --target client
# ./builds/imquic/build.sh --local ~/git/imquic --target client

FROM debian:bookworm-slim AS builder

RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
build-essential git cmake make autoconf automake libtool \
libglib2.0-dev libssl-dev libjansson-dev ca-certificates pkg-config && \
rm -rf /var/lib/apt/lists/*

WORKDIR /build

# Copy source from build context (provided by build.sh)
COPY . /build/imquic

# Build picoquic dependency, then imquic
RUN cd /build/imquic && \
git clone https://github.com/private-octopus/picoquic /build/imquic/picoquic && \
cd /build/imquic/picoquic && \
cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DPICOQUIC_FETCH_PTLS=Y . && \
make -j$(nproc) && \
cd /build/imquic && \
./autogen.sh && \
./configure --prefix=/build/imquic --enable-moq-examples --enable-qlog && \
make -j$(nproc) install

# Runtime image
FROM debian:bookworm-slim AS runtime

RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
ca-certificates libglib2.0-0 libssl3 libjansson4 && \
rm -rf /var/lib/apt/lists/*

WORKDIR /app

# Copy binary and library
COPY --from=builder /build/imquic/bin/imquic-moq-interop-test /app/imquic-moq-interop-test
COPY --from=builder /build/imquic/lib/libimquic.so* /app/

RUN ldconfig

# Copy entrypoint script (maintained separately for linting and testing)
# Note: This file is part of the moq-interop-runner builds, not the imquic source
COPY entrypoint-client.sh /app/entrypoint.sh
RUN chmod +x /app/entrypoint.sh

# Create mlog directory
RUN mkdir -p /mlog

# Environment variables with defaults
ENV RELAY_URL=https://relay:4443
ENV TLS_DISABLE_VERIFY=0
ENV LD_LIBRARY_PATH=/app:/usr/lib

RUN useradd -r -u 1000 -g nogroup moq
USER moq

ENTRYPOINT ["/app/entrypoint.sh"]
74 changes: 74 additions & 0 deletions builds/imquic/Dockerfile.relay
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# syntax=docker/dockerfile:1
# Dockerfile for imquic-moq-relay
#
# This Dockerfile is used by the moq-interop-runner builds framework.
# It expects to be run with the imquic repository root as the build context.
#
# Usage (via build.sh):
# ./builds/imquic/build.sh --target relay
# ./builds/imquic/build.sh --local ~/git/imquic --target relay

FROM debian:bookworm-slim AS builder

RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
build-essential git cmake make autoconf automake libtool \
libglib2.0-dev libssl-dev libjansson-dev ca-certificates pkg-config && \
rm -rf /var/lib/apt/lists/*

WORKDIR /build

# Copy source from build context (provided by build.sh)
COPY . /build/imquic

# Build picoquic dependency, then imquic
RUN cd /build/imquic && \
git clone https://github.com/private-octopus/picoquic /build/imquic/picoquic && \
cd /build/imquic/picoquic && \
cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DPICOQUIC_FETCH_PTLS=Y . && \
make -j$(nproc) && \
cd /build/imquic && \
./autogen.sh && \
./configure --prefix=/build/imquic --enable-moq-examples --enable-qlog && \
make -j$(nproc) install

# Runtime image
FROM debian:bookworm-slim AS runtime

RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
ca-certificates iproute2 libglib2.0-0 libssl3 libjansson4 && \
rm -rf /var/lib/apt/lists/*

WORKDIR /app

# Copy binary and library
COPY --from=builder /build/imquic/bin/imquic-moq-relay /app/imquic-moq-relay
COPY --from=builder /build/imquic/lib/libimquic.so* /app/

RUN ldconfig

# Copy entrypoint script (maintained separately for linting and testing)
# Note: This file is part of the moq-interop-runner builds, not the imquic source
COPY entrypoint-relay.sh /app/run_endpoint.sh
RUN chmod +x /app/run_endpoint.sh

# Create directories for mounts
RUN mkdir -p /mlog /certs

# Environment variables (following QUIC interop runner conventions)
ENV MOQT_ROLE=relay
ENV MOQT_PORT=4443
ENV LD_LIBRARY_PATH=/app:/usr/lib

EXPOSE 4443/udp

# Healthcheck verifies the relay is listening on the configured port
# Uses shell form to enable environment variable expansion at runtime
HEALTHCHECK --interval=5s --timeout=3s --start-period=5s \
CMD sh -c 'ss -uln | grep -q ":${MOQT_PORT:-4443}" || exit 1'

RUN useradd -r -u 1000 -g nogroup moq
USER moq

ENTRYPOINT ["/app/run_endpoint.sh"]
Loading