CouchDB, Debian, AstraLinux, Docker и все-все-все

Возникла необходимость запустить Couchdb в контейнере, где базовая ось (и базовые же пакеты) должны быть очень-очень свежими, в противной случай контейнер не проходит встроенную проверку на безопасность.
Стандартный официальный образ собран на базе Debian 12.

FROM debian:bookworm-slim

Простая замена базового образа на

FROM debian:trixie-slim

приводит к тому, что контейнер не собирается по зависимостям.
Смотрим официальную репу в части зависимостей и видим прекрасное — libmozjs-78-0 (>= 78.15.0). Пробуем ставить свежую версию, которая есть в репах — не помогает, пакет couchdb принципиально требует libmozjs-78-0.

Ок, скрещиваем ежа и ужа.

У debian есть механизм apt-pinning. Это механизм, позволяющий задать приоритеты для версий пакетов из разных источников (репозиториев, release-веток, PPA), чтобы фиксировать версию, запрещать обновление или предпочитать конкретный источник.

Коротко приоритеты делятся на:

  • < 0 — никогда не устанавливать.
  • 1..99 — ставить только при явном указании версии.
  • 100 — приоритет уже установленной версии.
  • 500 — дефолт для неприоритетных источников.
  • 990 — приоритет для целевого релиза (-t), либо если явно указан release.
  • >1000 — разрешает понижение версии (downgrade) к закреплённой.

Добавляет в наш Dockerfile:

RUN echo "deb http://deb.debian.org/debian bookworm main" > /etc/apt/sources.list.d/bookworm.list && \
    echo "Package: *\nPin: release n=bookworm\nPin-Priority: 500" > /etc/apt/preferences.d/bookworm && \
    echo "Package: *\nPin: release n=trixie\nPin-Priority: 600" > /etc/apt/preferences.d/trixie && \
    echo "deb [signed-by=/usr/share/keyrings/couchdb-archive-keyring.gpg] https://apache.jfrog.io/artifactory/couchdb-deb/ bookworm main" \
            > /etc/apt/sources.list.d/couchdb.list && \
    apt-get update

Основная часть пакетов ставится из свежей репы, часть, которых в ней нет — из старых.

Поделиться
Отправить