From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on sa.local.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,RP_MATCHES_RCVD autolearn=ham autolearn_force=no version=3.4.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=basealt.ru; s=dkim; t=1780057839; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=hqsEP4c5cYcr0RyTHfruYfmjKeiUiyC6rG+EGt3WWv8=; b=cyFiOeUknh6xTVUtR0xs5G0JNiYbXUH1NZ8KiG6GpXEcd8XPQpUvr2c/bLY2CVJQIhWbMB ML6ZSSKQOO1BwKrOSA56LpTawRzh1VxImQv63/VHStW07cuCcbhD/zcbDMSOGbXNK+WwI7 vu2+SZFl0dhq3ijBerCrcGx9o5qXe6E68AKlMHyYWg0L0UUwZBEZAlqhUWsJ/dRQllT/Z+ owqb0NK+Gw8t0/hn3AQXXxTtfkXEOgapiAvYHQYsoWAoHSLo+NTB8cWDqi716jO0HueTO7 Qocf4AlplvT4TXJzTMggXF1i0tb5SH3jylPWkqzorylH3EBusDSJoLyLNbOKKw== Message-ID: <05844478-160d-4411-9b89-765646dcd95b@basealt.ru> Date: Fri, 29 May 2026 15:30:38 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: ru To: ALT Linux Team development discussions From: Anton Farygin Organization: BaseALT Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Subject: [devel] =?utf-8?b?cmVwb3Rla2Eg4oCUINCx0YvRgdGC0YDRi9C5IEhUVFAv?= =?utf-8?b?SlNPTiBBUEkg0LzQtdGC0LDQtNCw0L3QvdGL0YUgYXB0LXJwbSDRgNC10L8=?= =?utf-8?b?0L7Qt9C40YLQvtGA0LjQtdCyIEFMVA==?= X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 29 May 2026 12:30:45 -0000 Archived-At: List-Archive: List-Post: Привет, коллеги. Развернут сервис для программного доступа к метаданным apt-rpm репозиториев ALT. Что это. Сервер на OCaml 5, загружает pkglist, srclist, release из веток ALT в память и отдаёт JSON. Поддерживает Sisyphus, p11, p10, c10f2 (и любые другие, если положить в config). Все поля RPM — NEVRA, deps (provides/requires/conflicts/obsoletes), files, changelog, summary, group, packager, disttag и т.д. Для чего полезен. - TAB-дополнение имён пакетов в shell-обёртках (zoryn и аналогах) — миллисекундная задержка, поддержка smartcase (prefix=Ope → только OpenUSD, OpenComposite, не утопит lowercase). - Поиск по подстроке, по префиксу, по архитектуре, по компоненту. - Обзор зависимостей и обратных зависимостей пакетов в разных ветках. - Получение changelog по source_rpm (с дедупликацией для бинарных подпакетов). - Питание дашбордов, ботов, CI-скриптов — всё через application/json, без парсинга нативных форматов. - Сравнение состояния пакетов между ветками. Где API живёт. https://rdb.altlinux.org/repoteka/ 
Полная OpenAPI 3.0.3 спека — GET /openapi.json. Примеры запросов: # здоровье + статус всех веток curl https://rdb.altlinux.org/repoteka/health curl https://rdb.altlinux.org/repoteka/status 
# список веток curl https://rdb.altlinux.org/repoteka/branches 
# карточка пакета (все варианты по веткам и архитектурам) curl https://rdb.altlinux.org/repoteka/packages/curl 
# карточка пакета с changelog curl 'https://rdb.altlinux.org/repoteka/packages/curl?changelog=true' 
# то же, но только в одной ветке curl https://rdb.altlinux.org/repoteka/branches/sisyphus/packages/curl 
# поиск по префиксу (TAB completion) — smartcase curl 'https://rdb.altlinux.org/repoteka/names?prefix=Ope&kind=source&limit=20' # → ["OpenBoard","OpenComposite","OpenSP","OpenSceneGraph","OpenStego","OpenUSD"] 
curl 'https://rdb.altlinux.org/repoteka/names?prefix=ope&kind=source&limit=5' # → ["open-forms","open-fprintd","open-iscsi","open-isns","open-vm-tools"] 
# поиск пакетов по подстроке c фильтрами curl 'https://rdb.altlinux.org/repoteka/packages?q=ssl&kind=binary&arch=x86_64&limit=10' 
Архитектура коротко. Параллельная XZ-декомпрессия через OCaml 5 Domains, zero-copy парсинг RPM-заголовков, интернирование всех повторяющихся строк (placements, dep names, file paths, changelog authors), отсортированные per-branch массивы имён для O(log N) prefix-поиска. Полная перезагрузка ~60 сек на Sisyphus+p10+p11+c10f2; атомарная замена snapshot, нулевой downtime запросов во время reload. Локальная установка / свой репозиторий. Сервис лёгкий, ставится одним RPM: apt-get install repoteka systemctl enable --now repoteka 
По умолчанию слушает 0.0.0.0:1337. Конфиг — /etc/repoteka.toml. Можно прописать любые apt-rpm репозитории, не только официальные ALT — подойдёт локальное зеркало, внутренний корпоративный репозиторий, форк/деривативная сборка, тестовая ветка: listen_addr = "127.0.0.1" listen_port = 1337 reload_interval_sec = 600 
[[branches]] path = "/srv/mirror/sisyphus" 
[[branches]] name = "internal"path = "/srv/repos/our-internal-repo" 
[[branches]] name = "derivative" path = "/var/ftp/pub/distros/example-altlike" 
 Структура веток ожидается стандартная apt-rpm: //base/pkglist..xz + release. Память — ~1.5 ГБ на 4 крупные ветки уровня Sisyphus; для одной локальной ветки в разы меньше. Перезагрузка — фоном по mtime, без рестарта. Это удобно, если хочется иметь свой быстрый JSON API над своим репозиторием — для CI, dev-инструментов, дашбордов внутри организации, проверки derivative-сборок, локальной разработки против Sisyphus без сетевых походов. Исходники, баги, патчи. https://altlinux.space/rider/repoteka 
Лицензия GPL-2.0-or-later. Пакет в Sisyphus: repoteka. Если у кого-то есть кейсы, которые сейчас неудобно решать apt-кешем — пишите в issues, добавлю endpoint. Regards, Anton