Хранение репозиториев
В этом разделе описана схема хранения конфигурации репозиториев Stapler. Она будет полезна тем, кто создаёт пакеты ОС с преднастроенными репозиториями Stapler, или хочет разобраться в устройстве конфигурации на низком уровне.
Зачем это нужно
Пакеты операционной системы могут поставлять предварительно настроенные репозитории Stapler. При этом пользователь должен иметь возможность изменять параметры таких репозиториев (отключать их, менять URL и т.д.) без риска потерять настройки при обновлении пакета.
Для этого конфигурация репозиториев разделена на несколько слоёв: системный (из пакета ОС) и пользовательский (изменения пользователя). Переопределения хранятся отдельно и применяются поверх базовой конфигурации.
Схема
Stapler читает конфигурацию репозиториев из нескольких источников в следующем порядке (каждый следующий слой перекрывает предыдущий):
- Системные репозитории -
/usr/lib/stplr/repos.d/ - Пользовательские репозитории -
/etc/stplr/repos.d/ - Переопределения -
/etc/stplr/repo-overrides.d/
Если репозиторий с одним именем присутствует в нескольких слоях, приоритет имеет более поздний слой. Переопределения применяются поверх любого базового слоя.
Системные репозитории (/usr/lib/stplr/repos.d/)
Эта директория предназначена для репозиториев, поставляемых пакетами ОС. Stapler никогда не пишет в эту директорию.
Каждый файл — это конфигурация одного репозитория в формате TOML. Имя файла (без расширения .toml) используется как имя репозитория, если поле name не задано явно.
Пример файла /usr/lib/stplr/repos.d/my-distro-repo.toml:
Системный репозиторий нельзя удалить командой stplr repo rm. Также нельзя добавить (stplr repo add) репозиторий с тем же именем или URL, что у системного. При выполнении stplr refresh (pull) системные репозитории не перезаписываются.
Пользовательские репозитории (/etc/stplr/repos.d/)
Пользовательские репозитории создаются командой stplr repo add и удаляются командой stplr repo rm. Каждый репозиторий хранится в отдельном файле <имя>.toml.
Пример файла /etc/stplr/repos.d/my-repo.toml:
name = 'my-repo'
url = 'https://example.com/my-repo.git'
При выполнении stplr refresh содержимое этих файлов может обновляться - например, если репозиторий поставляет свои метаданные через stapler-repo.toml.
Файлы переопределений (/etc/stplr/repo-overrides.d/)
Команды set-disabled, set-url, set-ref не изменяют базовые файлы репозитория. Вместо этого они записывают только изменённые поля в файл переопределений. Это позволяет обновлениям базового репозитория не затирать пользовательские настройки.
Пример файла /etc/stplr/repo-overrides.d/my-repo.toml после выполнения stplr repo set-disabled my-repo true:
disabled = true
Команда stplr repo clear-overrides <имя> удаляет файл переопределений, возвращая репозиторий к параметрам базовой конфигурации.
Миграция со старого формата
Если в /etc/stplr/stplr.toml есть записи [[repo]], команда stplr migrate перенесёт их в отдельные файлы в /etc/stplr/repos.d/ и очистит массив из stplr.toml. Миграция выполняется автоматически при запуске stplr migrate и не влияет на работу репозиториев.