-
Notifications
You must be signed in to change notification settings - Fork 1
Blacklist.ru
EN · EL · FR · ES · IT · RU · ZH · AR · HI · PT · DE
Чёрный список замораживает пакеты, которые вы не хотите трогать, и скрывает те,
которые не хотите видеть в предложениях. Правила лежат в /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. Якорите^...$для точного совпадения.
-
Нет синтаксиса regex → glob.
- Необязательный префикс
@repoограничивает правило одним репозиторием — по совпадению с именем репозитория или с тегом сборки: для доступного пакета — его репозиторий-кандидат; для установленного — его источник. Так@testing xf86-.*ограничивается репозиториемtesting, а@_SBo foo— пакетами, несущими тег сборки_SBo.
| Совпадение… | Эффект |
|---|---|
| установлено | этот кандидат заморожен — обрабатывается так, будто его репозиторий не предлагает пакет; сам пакет никогда не перечисляется clean-system
|
| не установлено |
скрыт из install-new, обновлений и check-updates, но всё ещё показывается в search/info с пометкой [blacklisted]
|
Чёрный список соблюдает каждая изменяющая систему команда (включая reinstall).
Заморозка не просто фиксирует установленную версию. Замороженный кандидат обрабатывается так, будто его репозиторий вовсе не предлагает пакет, и разрешение тогда продолжается обычным образом по приоритету среди остальных (незамороженных) кандидатов. Установленный пакет удерживается неизменным только тогда, когда каждый кандидат, которого он рассмотрел бы, заморожен.
-
frozen xf86-.*без@repoзамораживает это имя в каждом репозитории → оно удерживается везде. - Ограниченное
@testing xf86-.*замораживает только кандидата из testing → разрешение переходит к следующему репозиторию по приоритету (напр.slackware), и обновления из того репозитория продолжают поступать.
Откат никогда не опускается ниже приоритета источника, из которого пакет установлен
сейчас, поэтому заморозка никогда не превращается в понижение версии; если
единственный незамороженный кандидат оказался бы ниже, пакет вместо этого
удерживается. pin сначала ограничивает набор кандидатов, а заморозка применяется
внутри него, поэтому пакет, одновременно закреплённый и замороженный, удерживается.
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 — пара к 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 из 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.)
Тот же файл 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 (и не даёт ни одному другому
репозиторию его предоставлять). Это противоположности.
Они решают разные задачи:
Чёрный список (frozen) |
Карантин (distrust-repo) |
|
|---|---|---|
| Область | конкретные пакеты (по regex/серии) | целый репозиторий |
| Эффект | заморозить / скрыть эти пакеты | репозиторий не предоставляет ни одного пакета |
| Когда | «никогда не трогать этот пакет» | «не доверять этому источнику прямо сейчас» |
См. Security о модели карантина.
slacker - slackpkg + slackpkg+ in one - Apache-2.0 - by Ioannis Anagnostakis (rizitis) - beta / WIP, for Slackware -current (64-bit & 32-bit)
Getting started
Using slacker
- Commands
- Common Workflows
- Distribution Upgrade
- Repositories and Priority
- Package History
- Dependencies
- Docker
- Templates
- Blacklist
Trust & safety
Reference
For contributors