4 Repositories and Priority.ru
Anagnostakis Ioannis edited this page 2026-06-30 21:10:06 +03:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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

Как 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 и флаги остаются точно такими, как были.