4 Blacklist.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

Чёрный список (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 ограничивает правило одним репозиторием: для доступного пакета — его репозиторий-кандидат; для установленного — его источник.

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

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

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


Команда 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 предупреждает, если пакеты закреплены за удаляемым вами репозиторием.
  • Заморозка всегда побеждает pin для одного пакета: если vlc и заморожен, и закреплён, действует заморозка, а pin ничего не делает, пока вы не сделаете unfrozen.

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


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

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

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

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