Skip to content

Repositories and Priority.ru

Anagnostakis Ioannis edited this page Jun 30, 2026 · 4 revisions

EN · EL · FR · ES · IT · RU · ZH · AR · HI · PT · DE

Репозитории и приоритет

Это определяющая идея slacker и то, что отличает его от простого инструмента для зеркал: каждый репозиторий живёт в единой модели, упорядоченной по приоритету, и приоритет никогда не нарушается молча.


Правило приоритета

Когда одно и то же имя пакета предлагают несколько репозиториев, побеждает тот из репозитория с наивысшим приоритетом. Что важнее:

Установленный пакет никогда не мигрирует молча в другой репозиторий и никогда не понижается. Кандидат предлагается только из репозитория с бóльшим или равным приоритетом. Единственное исключение — явный repo:name.

Так, присвоив репозиторию отдельный высокий приоритет, вы блокируете его пакеты: ничто из репозитория с более низким приоритетом не может их заменить, даже с более новым номером версии.

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#161b22','primaryBorderColor':'#1f6feb','primaryTextColor':'#e6edf3','lineColor':'#6e7781','fontFamily':'monospace'}}}%%
flowchart TB
  I["установленный пакет<br/>(его build tag = его источник)"] --> D{"приоритет репо-кандидата<br/>против установленного источника"}
  D -->|выше или равен| U["можно обновить / заменить"]
  D -->|ниже| K["сохраняется - никогда не понижается<br/>никогда не мигрирует"]
  PIN["repo:name"] -. "форсирует репо,<br/>переопределяя приоритет" .-> U
  classDef grey fill:#0d1117,stroke:#6e7781,color:#8b949e;
  classDef blue fill:#0d1117,stroke:#1f6feb,color:#e6edf3;
  classDef green fill:#0d1117,stroke:#2ea043,color:#e6edf3;
  class I,PIN grey
  class D blue
  class U green
  class K grey
Loading

Как slacker узнаёт «источник» установленного пакета без базы данных? По его build tag — поле build за вычетом ведущих цифр (1_SBo_SBo, 7cfcf, 1 → официальный). Пользовательская строка tag-priority или бинарный репозиторий с наивысшим приоритетом, который поставляет эту метку (cf → conraid, alien → alienbob, определяется автоматически), решает, какому приоритету он принадлежит.


Файл repos

# priority  name        url|mirror|mirror/<subpath>                          [flags]
100         slackware   mirror                                                official
200         patches     mirror/patches                                        subtree immutable
90          extras      mirror/extra                                          subtree immutable
85          testing     mirror/testing                                        subtree immutable
80          conraid     https://slackers.it/repository/slackware64-current    immutable
60          alienbob    https://slackware.nl/people/alien/sbrepos/current/x86_64
# строки tag-priority (могут разделять один приоритет):
100         SBo         _SBo
100         local       _rtz

Поле URL

Форма Значение
буквальный URL https://, http:// или file:// (последнее — для локального клона / NFS / смонтированного носителя; три слеша для абсолютного пути)
mirror активная строка из mirrors, как есть — используйте для официального репозитория
mirror/<подпуть> активное зеркало с добавленным подпутём (mirror/extra, mirror/testing, mirror/patches) — поддерево, следующее за выбранным вами зеркалом

URL указывает на корень репозитория, содержащий PACKAGES.TXT; для официальных зеркал MANIFEST.bz2 находится в подкаталоге по архитектуре, который slacker находит автоматически.

Флаги

Флаг Что делает
official Помечает отслеживаемый репозиторий: он питает show-changelog и является источником по умолчанию для install-new. Размещение по-прежнему только по приоритету — официальный репозиторий может стоять где угодно.
immutable Любой пакет, отнесённый к этому репозиторию, не трогается командой clean-system. Используйте для extra/testing/patches, которые держите установленными, вместо занесения каждого в чёрный список.
subtree Этот URL — поддерево дистрибутива Slackware (extra, patches, testing, pasture). Их PACKAGES.TXT указывает расположения относительно корня дистрибутива, поэтому пакеты и GPG-KEY берутся из родительского (корневого) URL, а метаданные — из самого URL. Без него такие пакеты дают 404 с удвоенным сегментом пути. Четыре поддерева всегда должны нести этот флаг.
verify=... Переопределение проверки для репозитория (см. Security).

mirror/extra + subtree идут в паре. mirror/extra разрешает URL; subtree исправляет, как из него берутся пакеты и ключ.


Закрепление (pinning) и селекторы

PATTERN в командной строке может быть:

Форма Соответствует
firefox точному имени пакета
python подстроке имени — всем python-*
kde серии Slackware (a, ap, d, k, kde, l, n, t, x, xap, xfce, y, …) — только этой серии, никогда подстрокам
repo:name pin — форсирует один репозиторий независимо от приоритета (напр. alienbob:vlc)
@repo селектор множества — каждый пакет в этом репозитории (install @gnome, remove @gnome)
@_tag каждый пакет с этой меткой build (remove @_SBo)

@ обязателен, чтобы голое слово никогда не приняли за репозиторий. Неизвестный @repo/@_tag даёт подсказку «did you mean» и перечисляет доступные репозитории и метки.

Когда шаблон соответствует более чем одному пакету, install/upgrade/reinstall/remove показывают нумерованный список — Enter для всех, номера/диапазоны вроде 1 3 5 или 2-4, n для отмены.

Подстановочного знака * для выбора в командной строке нет. Незакавыченный * раскрывается вашей оболочкой в имена файлов текущего каталога ещё до запуска slacker (slacker никогда не видит * и не читает ваш каталог); если это даёт поток аргументов, не являющихся пакетами, slacker распознаёт это и отказывает в команде, ничего не меняя. Заключите буквальный шаблон в кавычки или используйте @repo для целого репозитория. (Blacklist — единственное место, где шаблоны являются glob/regex.)


Управление репозиториями из CLI

slacker add-repo  85 ktown https://slackware.nl/people/alien/ktown/current/x86_64
slacker add-repo  90 extras mirror/extra subtree immutable
slacker del-repo  ktown
slacker pri-repo  95 extras          # перенастроить приоритет существующего репо
slacker add-tag   100 SBo _SBo
slacker del-tag   _SBo
slacker list-repos          # приоритет, verify, флаги, число установленных

add-repo проверяет строку и, после подтверждения, загружает и проверяет (vets) репозиторий (см. Security).

pri-repo PRIORITY NAME меняет приоритет репозитория, который у вас уже есть. Он проверяет, что NAME — активный репозиторий (предлагая ближайшее совпадение при опечатке), и отказывает в PRIORITY, уже занятом другим репозиторием, называя конфликт, чтобы вы выбрали другое значение — приоритеты должны оставаться различными. Переписывается только приоритет этой строки; URL и флаги остаются точно такими, как были.

Clone this wiki locally