Skip to content

Blacklist.ru

Anagnostakis Ioannis edited this page Aug 12, 2026 · 5 revisions

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

Чёрный список (blacklist)

Чёрный список замораживает пакеты, которые вы не хотите трогать, и скрывает те, которые не хотите видеть в предложениях. Правила лежат в /etc/slacker/blacklist (по одному на строку, # для комментариев) либо добавляются и удаляются за вас командами frozen и unfrozen.

Чёрный список отличается от сопоставления PATTERN в командной строке. PATTERN — это подстрока + серия + точное имя; правила чёрного списка — это glob или незаякоренные регулярные выражения (плюс область series/ и @repo), сопоставляемые с полным идентификатором name-version-arch-build, как в slackpkg.


Синтаксис правил

[@repo] PATTERN
  • PATTERN — это серия Slackware, когда оканчивается на / (напр. kde/). Иначе это glob или незаякоренная regex, сопоставляемая с полным идентификатором — slacker решает по тому, что вы написали:
    • Нет синтаксиса regex → glob. * соответствует любой последовательности символов, ? — одному, а любой другой символ (включая буквальную ., как в webkit2gtk6.0 или python3.11) берётся как есть. Так vlc-*, webkit2gtk6.0*, *-l10n-* работают как и ожидается.
    • Есть синтаксис regex → regex. Шаблон, содержащий символ [ ] ( ) { } | ^ $ \ или идиому .* / .+ («любые символы»), берётся как regex как есть. Так xf86-.*-202.* ловит сборку 202x, ^vlc-[0-9] якорится на пакете vlc, а простое vlc соответствует любому идентификатору, содержащему vlc. Якорите ^...$ для точного совпадения.
  • Необязательный префикс @repo ограничивает правило одним репозиторием — по совпадению с именем репозитория или с тегом сборки: для доступного пакета — его репозиторий-кандидат; для установленного — его источник. Так @testing xf86-.* ограничивается репозиторием testing, а @_SBo foo — пакетами, несущими тег сборки _SBo.

Заморожен vs скрыт

Совпадение… Эффект
установлено этот кандидат заморожен — обрабатывается так, будто его репозиторий не предлагает пакет; сам пакет никогда не перечисляется clean-system
не установлено скрыт из install-new, обновлений и check-updates, но всё ещё показывается в search/info с пометкой [blacklisted]

Чёрный список соблюдает каждая изменяющая систему команда (включая reinstall).

Заморозка — это откат, а не закрепление

Заморозка не просто фиксирует установленную версию. Замороженный кандидат обрабатывается так, будто его репозиторий вовсе не предлагает пакет, и разрешение тогда продолжается обычным образом по приоритету среди остальных (незамороженных) кандидатов. Установленный пакет удерживается неизменным только тогда, когда каждый кандидат, которого он рассмотрел бы, заморожен.

  • frozen xf86-.* без @repo замораживает это имя в каждом репозитории → оно удерживается везде.
  • Ограниченное @testing xf86-.* замораживает только кандидата из testing → разрешение переходит к следующему репозиторию по приоритету (напр. slackware), и обновления из того репозитория продолжают поступать.

Откат никогда не опускается ниже приоритета источника, из которого пакет установлен сейчас, поэтому заморозка никогда не превращается в понижение версии; если единственный незамороженный кандидат оказался бы ниже, пакет вместо этого удерживается. pin сначала ограничивает набор кандидатов, а заморозка применяется внутри него, поэтому пакет, одновременно закреплённый и замороженный, удерживается.


Команда frozen

frozen проверяет правила и добавляет их в чёрный список за вас.

slacker frozen "@alienbob vlc-[0-9]"     # заморозить только vlc из alienbob (regex)
slacker frozen "vlc-*"                     # glob: всё, что начинается на "vlc-"
slacker frozen "webkit2gtk6.0*"           # glob; точка буквальна
slacker frozen kde/                       # заморозить всю серию kde
slacker frozen "xf86-.*-202.*"            # правило-regex
slacker frozen "@conraid ^ffmpeg-"        # почти точное, ограничено conraid
  • Каждый аргумент — одно правило; заключайте в кавычки любое правило с пробелами (например, правило @repo).
  • slacker отмечает вероятную ошибку — @repo, не называющий ни одного активного репозитория, или regex с пробелом (ни в одном идентификаторе пакета нет пробелов, так что обычно это забытый @ или огрех с кавычками) — и спрашивает, объявлять ли его всё равно.
  • Он печатает, что заморозит каждое правило, и просит подтверждения. --yes пропускает запросы. Уже присутствующие правила пропускаются.

Команда unfrozen

unfrozen — пара к frozen: она удаляет правила из чёрного списка.

slacker unfrozen                          # перечислить текущие правила (root для чтения не нужен)
slacker unfrozen emacs                     # удалить правило "emacs"
slacker unfrozen "@alienbob vlc-[0-9]"     # удалить ограниченное правило (в кавычках)
slacker unfrozen "xf86-.*-202.*"           # спецсимволы сопоставляются буквально

Сопоставление точное и буквальное — никогда не шаблон. Каждый аргумент должен совпадать с существующим правилом посимвольно; метасимволы regex в правиле (.*, *, -, [, ], /) сравниваются как есть, а не интерпретируются. Так unfrozen "fcitx5*" удаляет только правило fcitx5* и никогда не трогает fcitx5-qt, а unfrozen fcitx5 (более короткая строка) не совпадает ни с чем, вместо того чтобы случайно удалить fcitx5*. Это сделано намеренно: чёрный список полон спецсимволов, и точное совпадение — единственный безопасный способ удалить нужную строку.

  • Запустите её без аргумента, чтобы напечатать текущие правила и скопировать точный текст для удаления.
  • Строки-комментарии, пустые строки и любое правило, которое вы не назвали, сохраняются как есть; ненайденное правило сообщается, и ничего не пишется, если не совпало хотя бы одно правило.
  • Заключайте в кавычки любое правило с пробелами или спецсимволами оболочки (правило @repo, завершающий *) точно так же, как для frozen.

Удалить правило из файла вручную тоже можно — unfrozen просто делает это безопасно, с гарантией точного совпадения и выводом текущих правил.


Разобранный пример: заморозить vlc только из одного репозитория

Допустим, вы держите vlc из alienbob и не хотите, чтобы его когда-либо заменяли или удаляли:

slacker frozen "@alienbob vlc-[0-9]"

Почему vlc-[0-9], а не просто vlc? Правило сопоставляется без якоря по полному идентификатору. Одно лишь vlc совпало бы и с vlc-plugin-foo, и со всем, что содержит эти буквы; vlc-[0-9] якорится на границе версии, чтобы совпасть с самим пакетом vlc. Для строгого совпадения можно написать ^vlc-[0-9]. (Glob vlc-* тоже принимается — он компилируется в vlc-.* и замораживает всё семейство vlc-, включая плагины; используйте regex ^vlc-[0-9], когда хотите только пакет vlc.)


Pin: брать пакет только из одного репозитория

Тот же файл blacklist хранит и pin — положительную противоположность заморозки. Заморозка говорит никогда не брать этот пакет (или не из этого репозитория); pin говорит брать этот пакет только из этого репозитория, игнорируя приоритет.

Управляйте pin двумя командами:

slacker pin alienbob:vlc     # vlc теперь только из alienbob, даже если репозиторий
                             # с более высоким приоритетом предлагает другую сборку
slacker unpin vlc            # назад к обычному разрешению по приоритету
slacker unpin                # (без аргумента) перечислить текущие pin

Pin записывается в файл blacklist с маркером 100%, так что его можно добавлять и читать и вручную:

@alienbob 100% vlc

Как он ведёт себя:

  • Каждая команда его соблюдает — install, upgrade и upgrade-all берут пакет только из закреплённого репозитория, независимо от приоритета. План, включающий закреплённый пакет, перечисляет его под «pinned (taken only from their repo, ignoring priority)», как выделяются замороженные пакеты.
  • Pin использует точное имя пакета, никогда не шаблон (vlc, не vlc*). Буквальная точка допустима — python3.11 и webkit2gtk6.0 — допустимые имена pin. Чтобы заморозить шаблон, используйте frozen (он принимает glob и regex).
  • У пакета не более одного pin. Закрепление за другим репозиторием заменяет прежний.
  • Если закреплённый репозиторий сейчас не предлагает пакет, тот просто остаётся как есть (никогда не берётся откуда-либо ещё), пока этот репозиторий не предоставит его. slacker status отмечает pin, чей репозиторий не активен, а del-repo предупреждает, если пакеты закреплены за удаляемым вами репозиторием.
  • В clean-system один лишь pin не защищает пакет. Но чужой пакет, который закреплён и действительно установлен из того репозитория, за которым закреплён, предлагается отдельным шагом — [R]emove all / [K]eep all / [P]rompt each, по умолчанию Keep (закрепление — это осознанный выбор). Закреплённое имя, чья установленная копия пришла из другого источника, этим шагом игнорируется и следует обычной логике clean-system.
  • Заморозка всегда побеждает pin для одного пакета: если vlc и заморожен, и закреплён, действует заморозка, а pin ничего не делает, пока вы не сделаете unfrozen.

Pin vs ограниченная заморозка из примера выше: @alienbob vlc замораживает vlc из alienbob (и позволяет другим репозиториям обновлять его по приоритету); @alienbob 100% vlc закрепляет vlc за alienbob (и не даёт ни одному другому репозиторию его предоставлять). Это противоположности.


Чёрный список vs карантин репозитория

Они решают разные задачи:

Чёрный список (frozen) Карантин (distrust-repo)
Область конкретные пакеты (по regex/серии) целый репозиторий
Эффект заморозить / скрыть эти пакеты репозиторий не предоставляет ни одного пакета
Когда «никогда не трогать этот пакет» «не доверять этому источнику прямо сейчас»

См. Security о модели карантина.

Clone this wiki locally