feat: update BIRD installation process to build from source. Modify CI workflow to ensure BIRD 2.14 is compiled from source instead of using the Debian package. Update Dockerfiles for evobgp-agent and gobinary to include BIRD 2.14 build steps, enhancing compatibility and performance.
CI / changes (push) Successful in 5s
CI / openapi (push) Has been skipped
CI / go (push) Successful in 21s
CI / docker-web (deploy/docker/evobgp-web/Dockerfile, , evobgp-web) (push) Successful in 59s
CI / docker-web (deploy/docker/evobgp-web/Dockerfile, evobgp-all, evobgp-web-all) (push) Successful in 1m2s
CI / docker-bird (push) Successful in 1m56s
CI / bird2 (push) Successful in 59s
CI / docker-go (deploy/docker/evobgp-agent/Dockerfile, , evobgp-agent) (push) Successful in 2m19s
CI / docker-go (evobgp-all, 1, deploy/docker/gobinary/Dockerfile, , evobgp-all) (push) Has been cancelled
CI / docker-go (evobgp-api, 1, deploy/docker/gobinary/Dockerfile, , evobgp-api) (push) Has been cancelled
CI / docker-go (evobgp-deploy, 0, deploy/docker/gobinary/Dockerfile, , evobgp-deploy) (push) Has been cancelled
CI / docker-go (evobgp-ingest, 0, deploy/docker/gobinary/Dockerfile, , evobgp-ingest) (push) Has been cancelled
CI / docker-go (evobgp-node, 0, deploy/docker/gobinary/Dockerfile, , evobgp-node) (push) Has been cancelled
CI / docker-go (evobgp-render, 0, deploy/docker/gobinary/Dockerfile, , evobgp-render) (push) Has been cancelled
CI / docker-go (evobgp-scheduler, 0, deploy/docker/gobinary/Dockerfile, , evobgp-scheduler) (push) Has been cancelled

This commit is contained in:
Denozordec
2026-04-06 12:44:31 +07:00
parent 133ea93e83
commit e2002ba33d
6 changed files with 77 additions and 13 deletions
+31
View File
@@ -0,0 +1,31 @@
#!/bin/sh
# Сборка BIRD из официального tarball (версия задаётся BIRD_VERSION, по умолчанию 2.14).
# Запуск от root (Docker) или через sudo на хосте. Префикс установки: /usr/local.
set -eu
BIRD_VERSION="${BIRD_VERSION:-2.14}"
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y --no-install-recommends \
build-essential \
ca-certificates \
curl \
flex \
bison \
libncurses-dev \
libreadline-dev
cd /tmp
rm -rf "bird-${BIRD_VERSION}"
curl -fsSL "https://bird.network.cz/download/bird-${BIRD_VERSION}.tar.gz" | tar xz
cd "bird-${BIRD_VERSION}"
./configure --prefix=/usr/local --enable-client
make -j"$(nproc)"
make install
cd /
rm -rf "/tmp/bird-${BIRD_VERSION}"
apt-get purge -y build-essential flex bison libncurses-dev libreadline-dev
apt-get autoremove -y
apt-get install -y --no-install-recommends libreadline8 libtinfo6
rm -rf /var/lib/apt/lists/*
+11 -4
View File
@@ -1,9 +1,16 @@
# BIRD 2 alongside evobgp-agent; share /etc/bird with the agent container (plan §4.1).
# BIRD 2.14+ из исходников (пакет Debian bookworm слишком старый).
# Сборка: из корня репозитория: docker build -f deploy/docker/bird2/Dockerfile .
FROM public.ecr.aws/docker/library/debian:bookworm-slim AS bird-build
ARG BIRD_VERSION=2.14
COPY deploy/docker/bird/bird-from-source.sh /tmp/bird-from-source.sh
RUN chmod +x /tmp/bird-from-source.sh && BIRD_VERSION="${BIRD_VERSION}" /tmp/bird-from-source.sh
FROM public.ecr.aws/docker/library/debian:bookworm-slim
RUN apt-get update && apt-get install -y --no-install-recommends bird2 \
&& rm -rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -y --no-install-recommends libreadline8 libtinfo6 \
&& rm -rf /var/lib/apt/lists/*
COPY --from=bird-build /usr/local/sbin/bird /usr/local/sbin/bird
COPY --from=bird-build /usr/local/sbin/birdc /usr/local/sbin/birdc
COPY deploy/bird/bird.conf /etc/bird/bird.conf
RUN mkdir -p /etc/bird/bird.d
EXPOSE 179
# Foreground for Docker; configs on shared volume override this file at runtime.
CMD ["bird", "-f", "-c", "/etc/bird/bird.conf"]
+10 -3
View File
@@ -1,4 +1,4 @@
# evobgp-agent CLI (parse-check, birdc configure); install bird2 so `bird -p` matches bird2 image (plan §13).
# evobgp-agent + BIRD 2.14+ (bird/birdc) из исходников — совпадает с образом evobgp-bird2.
# См. gobinary/Dockerfile — ECR Public вместо прямого pull с Docker Hub (устойчивость CI).
FROM public.ecr.aws/docker/library/golang:1.22-bookworm AS build
WORKDIR /src
@@ -6,9 +6,16 @@ COPY go.mod go.sum ./
COPY . .
RUN go build -trimpath -ldflags="-s -w" -o /out/evobgp-agent ./cmd/evobgp-agent
FROM public.ecr.aws/docker/library/debian:bookworm-slim AS bird-build
ARG BIRD_VERSION=2.14
COPY deploy/docker/bird/bird-from-source.sh /tmp/bird-from-source.sh
RUN chmod +x /tmp/bird-from-source.sh && BIRD_VERSION="${BIRD_VERSION}" /tmp/bird-from-source.sh
FROM public.ecr.aws/docker/library/debian:bookworm-slim
RUN apt-get update && apt-get install -y --no-install-recommends bird2 ca-certificates \
&& rm -rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -y --no-install-recommends libreadline8 libtinfo6 ca-certificates \
&& rm -rf /var/lib/apt/lists/*
COPY --from=bird-build /usr/local/sbin/bird /usr/local/sbin/bird
COPY --from=bird-build /usr/local/sbin/birdc /usr/local/sbin/birdc
COPY --from=build /out/evobgp-agent /usr/local/bin/evobgp-agent
WORKDIR /etc/bird
ENTRYPOINT ["/usr/local/bin/evobgp-agent"]
+10 -2
View File
@@ -1,5 +1,5 @@
# Универсальная сборка бинаря из cmd/* (ARG BIN=evobgp-api | evobgp-all).
# INSTALL_BIRDC=1 ставит bird2 в рантайм-образ для EVOBGP_BIRDC_SOCKET (poll метрик birdc).
# INSTALL_BIRDC=1 собирает BIRD 2.14 из исходников (birdc) для EVOBGP_BIRDC_SOCKET; иначе пакет Debian не используется.
# Базовые образы из ECR Public (официальное зеркало library/*), чтобы CI не зависел от auth.docker.io.
FROM public.ecr.aws/docker/library/golang:1.22-bookworm AS build
WORKDIR /src
@@ -11,8 +11,16 @@ RUN CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o /out/evobgp ./cmd/${BIN
FROM public.ecr.aws/docker/library/debian:bookworm-slim
ARG INSTALL_BIRDC=0
ARG BIRD_VERSION=2.14
COPY deploy/docker/bird/bird-from-source.sh /tmp/bird-from-source.sh
RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates \
&& if [ "$INSTALL_BIRDC" = "1" ]; then apt-get install -y --no-install-recommends bird2; fi \
&& if [ "$INSTALL_BIRDC" = "1" ]; then \
chmod +x /tmp/bird-from-source.sh \
&& BIRD_VERSION="${BIRD_VERSION}" /tmp/bird-from-source.sh \
&& rm -f /tmp/bird-from-source.sh; \
else \
rm -f /tmp/bird-from-source.sh; \
fi \
&& rm -rf /var/lib/apt/lists/*
COPY --from=build /out/evobgp /usr/local/bin/evobgp
EXPOSE 8080