82 lines
2.2 KiB
Docker
82 lines
2.2 KiB
Docker
# Unified Agave/Jito Solana image
|
|
# Supports three modes via AGAVE_MODE env: test, rpc, validator
|
|
#
|
|
# Build args:
|
|
# AGAVE_REPO - git repo URL (anza-xyz/agave or jito-foundation/jito-solana)
|
|
# AGAVE_VERSION - git tag to build (e.g. v3.1.9, v3.1.8-jito)
|
|
|
|
ARG AGAVE_REPO=https://github.com/anza-xyz/agave.git
|
|
ARG AGAVE_VERSION=v3.1.9
|
|
|
|
# ---------- Stage 1: Build ----------
|
|
FROM rust:1.85-bookworm AS builder
|
|
|
|
ARG AGAVE_REPO
|
|
ARG AGAVE_VERSION
|
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
build-essential \
|
|
pkg-config \
|
|
libssl-dev \
|
|
libudev-dev \
|
|
libclang-dev \
|
|
protobuf-compiler \
|
|
ca-certificates \
|
|
git \
|
|
cmake \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
WORKDIR /build
|
|
RUN git clone "$AGAVE_REPO" --depth 1 --branch "$AGAVE_VERSION" --recurse-submodules agave
|
|
WORKDIR /build/agave
|
|
|
|
# Cherry-pick --public-tvu-address support (anza-xyz/agave PR #6778, commit 9f4b3ae)
|
|
# This flag only exists on master, not in v3.1.9 — fetch the PR ref and cherry-pick
|
|
ARG TVU_ADDRESS_PR=6778
|
|
RUN if [ -n "$TVU_ADDRESS_PR" ]; then \
|
|
git fetch --depth 50 origin "pull/${TVU_ADDRESS_PR}/head:tvu-pr" && \
|
|
git cherry-pick --no-commit tvu-pr; \
|
|
fi
|
|
|
|
# Build all binaries using the upstream install script
|
|
RUN CI_COMMIT=$(git rev-parse HEAD) scripts/cargo-install-all.sh /solana-release
|
|
|
|
# ---------- Stage 2: Runtime ----------
|
|
FROM debian:bookworm-slim
|
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
ca-certificates \
|
|
libssl3 \
|
|
libudev1 \
|
|
curl \
|
|
sudo \
|
|
aria2 \
|
|
python3 \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Create non-root user with sudo
|
|
RUN useradd -m -s /bin/bash agave \
|
|
&& echo "agave ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
|
|
|
|
# Copy all compiled binaries
|
|
COPY --from=builder /solana-release/bin/ /usr/local/bin/
|
|
|
|
# Copy entrypoint and support scripts
|
|
COPY entrypoint.py snapshot_download.py /usr/local/bin/
|
|
COPY start-test.sh /usr/local/bin/
|
|
RUN chmod +x /usr/local/bin/entrypoint.py /usr/local/bin/start-test.sh
|
|
|
|
# Create data directories
|
|
RUN mkdir -p /data/config /data/ledger /data/accounts /data/snapshots \
|
|
&& chown -R agave:agave /data
|
|
|
|
USER agave
|
|
WORKDIR /data
|
|
|
|
ENV RUST_LOG=info
|
|
ENV RUST_BACKTRACE=1
|
|
|
|
EXPOSE 8899 8900 8001 8001/udp
|
|
|
|
ENTRYPOINT ["entrypoint.py"]
|