From 0b3ceaa7b8b2c3d435bd25e571f8299370a5d44c Mon Sep 17 00:00:00 2001 From: Denozordec Date: Mon, 6 Apr 2026 12:53:46 +0700 Subject: [PATCH] refactor: switch BIRD installation from source to Ubuntu package. Update CI workflow and Dockerfiles for evobgp-agent and bird2 to install bird2 from the Ubuntu repository, improving compatibility and simplifying the build process. --- .gitea/README.md | 2 +- .gitea/workflows/ci.yaml | 6 ++---- deploy/docker/bird2/Dockerfile | 17 ++++++----------- deploy/docker/evobgp-agent/Dockerfile | 16 +++++----------- 4 files changed, 14 insertions(+), 27 deletions(-) diff --git a/.gitea/README.md b/.gitea/README.md index d769588..259bd42 100644 --- a/.gitea/README.md +++ b/.gitea/README.md @@ -16,7 +16,7 @@ Job **changes** вычисляет два флага: Требования к runner: - Метка `ubuntu-latest` (или измените `runs-on` под свои labels). -- Job `bird2` собирает **BIRD 2.14** из исходников (тот же скрипт, что в `deploy/docker/bird/bird-from-source.sh`, что и в образах) и вызывает `bird -c … -p` по файлам в checkout (без вложенного Docker: иначе bind-mount `/workspace/...` часто не виден демону Docker на хосте). +- Job `bird2` ставит пакет **bird2** из репозитория **Ubuntu** на runner (как образ `evobgp-bird2` на `ubuntu:noble`) и вызывает `bird -c … -p` по файлам в checkout (без вложенного Docker: иначе bind-mount `/workspace/...` часто не виден демону Docker на хосте). - Job **docker-images** требует **Docker** и (для push) доступ к Container Registry Gitea с runner’а. ## Сборка и публикация образов (`docker-images`) diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index b8bd07e..0433e76 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -158,14 +158,12 @@ jobs: needs.changes.outputs.docker_go == 'true') steps: - uses: actions/checkout@v4 - - name: Install BIRD from source (2.14, как в контейнерах) + - name: Install bird2 (репозиторий Ubuntu runner, как в образе evobgp-bird2) run: | set -euxo pipefail if command -v sudo >/dev/null 2>&1; then SUDO=sudo; else SUDO=""; fi $SUDO apt-get update -qq - $SUDO cp deploy/docker/bird/bird-from-source.sh /tmp/bird-from-source.sh - $SUDO chmod +x /tmp/bird-from-source.sh - $SUDO env BIRD_VERSION=2.14 bash /tmp/bird-from-source.sh + DEBIAN_FRONTEND=noninteractive $SUDO apt-get install -y -qq bird2 bird --version - name: bird -p on all scenario bird.conf files env: diff --git a/deploy/docker/bird2/Dockerfile b/deploy/docker/bird2/Dockerfile index 9478644..9770ccc 100644 --- a/deploy/docker/bird2/Dockerfile +++ b/deploy/docker/bird2/Dockerfile @@ -1,15 +1,10 @@ -# 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 libreadline8 libtinfo6 \ +# BIRD из репозитория Ubuntu (Noble 24.04 LTS) — актуальнее пакета Debian bookworm. +# Сборка из корня репозитория: docker build -f deploy/docker/bird2/Dockerfile . +# Зеркало ECR Public вместо прямого pull с Docker Hub. +FROM public.ecr.aws/docker/library/ubuntu:noble +RUN apt-get update \ + && apt-get install -y --no-install-recommends bird2 \ && 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 diff --git a/deploy/docker/evobgp-agent/Dockerfile b/deploy/docker/evobgp-agent/Dockerfile index 036fc25..cc44dfc 100644 --- a/deploy/docker/evobgp-agent/Dockerfile +++ b/deploy/docker/evobgp-agent/Dockerfile @@ -1,21 +1,15 @@ -# evobgp-agent + BIRD 2.14+ (bird/birdc) из исходников — совпадает с образом evobgp-bird2. -# См. gobinary/Dockerfile — ECR Public вместо прямого pull с Docker Hub (устойчивость CI). +# evobgp-agent + bird2 из репозитория Ubuntu Noble (тот же стек, что evobgp-bird2). +# См. gobinary/Dockerfile — ECR Public вместо прямого pull с Docker Hub. FROM public.ecr.aws/docker/library/golang:1.22-bookworm AS build WORKDIR /src 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 libreadline8 libtinfo6 ca-certificates \ +FROM public.ecr.aws/docker/library/ubuntu:noble +RUN apt-get update \ + && apt-get install -y --no-install-recommends bird2 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"]