Работа с RPM
CodeScoring.Save реализует RPM-репозиторий (формат createrepo) с префиксом /rpm/<project>/<repository>/. Совместим со стандартными клиентами dnf и yum на RHEL, Rocky Linux, AlmaLinux, Fedora, CentOS и производных дистрибутивах.
Proxy-репозиторий
В remote_url указывается тот же URL, который был бы baseurl в .repo-файле, — каталог, внутри которого лежит repodata/repomd.xml.
Proxy-репозиторий не генерирует собственные индексы — repomd.xml, hash-именованные файлы repodata и repomd.xml.asc проксируются с upstream побайтно, чтобы подписи и контрольные суммы оставались валидными. Пакеты кэшируются как неизменяемые артефакты; метаданные ревалидируются по истечении cache_ttl. Если upstream недоступен, Save отдаёт последнюю закэшированную копию метаданных. Загрузка пакетов в proxy-репозиторий запрещена — он read-only.
Hosted-репозиторий
При создании hosted-репозитория Save сразу публикует пустой repodata/repomd.xml, поэтому dnf makecache работает ещё до загрузки первого пакета. Индексы (primary, filelists, other) перегенерируются автоматически после каждой загрузки или удаления пакета.
URL-схема
Настройка клиента
dnf / yum
Создайте /etc/yum.repos.d/codescoring.repo:
dnf / yum с проверкой подписи метаданных
Если на сервере включена подпись метаданных (METADATA_SIGNING_ENABLED), Save публикует детачированную подпись repodata/repomd.xml.asc, а публичный ключ — по адресу <repo>/repository.key. Включите repo_gpgcheck=1:
repo_gpgcheck=1 включает проверку подписи метаданных репозитория (repomd.xml.asc) — это аналог apt'шного signed-by, и именно эту подпись создаёт Save. gpgcheck=1 проверяет подписи самих пакетов: Save их не создаёт и не изменяет — включайте gpgcheck=1 только если загружаемые пакеты подписаны на этапе сборки.
Для CI/CD используйте robot-аккаунт: username = sa$<robot-name>, password = <api-key> в .repo-файле. Структура файла не меняется — отличаются только значения. Подробнее — в общем разделе Аутентификация.
Публикация пакетов (hosted)
Загрузка выполняется PUT-запросом в канонический путь Packages/<первая-буква-имени>/:
Имя файла должно соответствовать схеме <name>-<version>-<release>.<arch>.rpm. Save валидирует заголовки пакета и приводит путь к каноническому виду — фактический путь возвращается в ответе.
Альтернатива — multipart POST на корень репозитория:
Принудительная перегенерация repodata
Rebuild также удаляет устаревшие hash-именованные файлы repodata, оставшиеся от предыдущих публикаций.
Миграция URL репозитория
Сценарий использования: миграция RPM-репозитория с Nexus / Artifactory на CodeScoring.Save.
Параметры аутентификации (username / password) в .repo-файле сохраняются без изменений. Для proxy-репозитория Save отдаёт repomd.xml.asc upstream как есть, поэтому существующие gpgkey-ключи дистрибутива продолжают работать с repo_gpgcheck=1.
Устранение неполадок
Проверка repomd.xml
В ответе — XML с секциями data type="primary", filelists, other и hash-именованными href-ссылками.
Проверка наличия пакета в primary-индексе
Если пакет загружен, но отсутствует в индексе — подождите несколько секунд (индексация асинхронная) либо выполните rebuild-index.
