-
Notifications
You must be signed in to change notification settings - Fork 1
Blacklist
EN · EL · FR · ES · IT · RU · ZH · AR · HI · PT · DE
The blacklist freezes packages you do not want touched, and hides ones you do not
want offered. Rules live in /etc/slacker/blacklist (one per line, # for
comments), or are added and removed for you by the frozen and unfrozen
commands.
The blacklist is different from command-line PATTERN matching. PATTERNs are substring + series + exact; blacklist rules are globs or unanchored regular expressions (plus
series/and@reposcoping) matched against the full package idname-version-arch-build, likeslackpkg.
[@repo] PATTERN
-
PATTERNis a Slackware series when it ends in/(e.g.kde/). Otherwise it is a glob or an unanchored regex matched against the full id — slacker decides by what you wrote:-
No regex syntax → glob.
*matches any run of characters,?matches one, and every other character (including a literal., as inwebkit2gtk6.0orpython3.11) is taken verbatim. Sovlc-*,webkit2gtk6.0*,*-l10n-*all work the way you'd expect. -
Regex syntax → regex. A pattern containing a
[ ] ( ) { } | ^ $ \character, or the.*/.+"any characters" idiom, is taken as a regex verbatim. Soxf86-.*-202.*catches a 202x build,^vlc-[0-9]anchors to thevlcpackage, and a barevlcmatches any id containingvlc. Anchor with^...$for an exact match.
-
No regex syntax → glob.
- The optional
@repoprefix scopes the rule to one repository — matched by repo name or build tag: for an available package, its candidate repo; for an installed one, its source. So@testing xf86-.*scopes to thetestingrepo, while@_SBo fooscopes to packages carrying the_SBobuild tag.
| The match is… | Effect |
|---|---|
| installed | that candidate is frozen — treated as if its repo did not offer the package; the package itself is never listed by clean-system
|
| not installed |
hidden from install-new, upgrades, and check-updates, but still shown by search/info marked [blacklisted]
|
The blacklist is honoured by every mutating command (including reinstall).
A freeze does not simply pin the installed version. A frozen candidate is treated as if its repository did not offer the package at all, and resolution then proceeds normally by priority over the remaining (non-frozen) candidates. An installed package is held unchanged only when every candidate it would otherwise consider is frozen.
- An unscoped
frozen xf86-.*freezes that name in every repo → it is held everywhere. - A scoped
@testing xf86-.*freezes only the testing candidate → resolution falls through to the next repo by priority (e.g.slackware), and that repo's updates keep flowing.
The fallback never drops below the priority of the source the package is currently
installed from, so a freeze can never become a downgrade; if the only non-frozen
candidate would rank lower than that, the package is held instead. A pin
restricts the candidate set first and the freeze applies within it, so a package
that is both pinned and frozen is held.
frozen validates rules and appends them to the blacklist for you.
slacker frozen "@alienbob vlc-[0-9]" # freeze only alienbob's vlc (regex)
slacker frozen "vlc-*" # a glob: anything starting "vlc-"
slacker frozen "webkit2gtk6.0*" # a glob; the dot is literal
slacker frozen kde/ # freeze the whole kde series
slacker frozen "xf86-.*-202.*" # a regex rule
slacker frozen "@conraid ^ffmpeg-" # exact-ish, scoped to conraid- Each argument is one rule; quote any rule that contains spaces (an
@reporule, for instance). - slacker flags a likely mistake - an
@repothat names no active repo, or a regex containing whitespace (no package id has spaces, so that is usually a forgotten@or a quoting slip) - and asks whether to declare it anyway. - It prints what each rule will freeze and asks for confirmation.
--yesskips the prompts. Rules already present are skipped.
unfrozen is the counterpart to frozen: it removes rules from the blacklist.
slacker unfrozen # list the current rules (no root needed to read)
slacker unfrozen emacs # remove the rule "emacs"
slacker unfrozen "@alienbob vlc-[0-9]" # remove a scoped rule (quote it)
slacker unfrozen "xf86-.*-202.*" # special characters matched literallyThe match is exact and literal - never a pattern. Each argument must equal an
existing rule character-for-character; the regex metacharacters in a rule
(.*, *, -, [, ], /) are compared verbatim, not interpreted. So
unfrozen "fcitx5*" removes only the rule fcitx5* and never touches
fcitx5-qt, and unfrozen fcitx5 (a shorter string) matches nothing rather than
removing fcitx5* by accident. This is deliberate: a blacklist is full of
special characters, and an exact match is the only safe way to remove the right
line.
- Run it with no argument to print the current rules, so you can copy the exact text to remove.
- Comment lines, blank lines, and any rule you did not name are preserved verbatim; a rule that is not found is reported, and nothing is written unless at least one rule actually matched.
- Quote any rule that contains spaces or shell-special characters (an
@reporule, a trailing*), exactly as you would forfrozen.
Removing a rule from the file by hand works too -
unfrozenjust does it safely, with the exact-match guarantee and the current-rules listing.
Say you keep vlc from alienbob and never want it replaced or removed:
slacker frozen "@alienbob vlc-[0-9]"Why vlc-[0-9] and not just vlc? The rule is matched unanchored over the
full id. vlc alone would also match vlc-plugin-foo or anything containing the
letters; vlc-[0-9] anchors to the version boundary so it matches the vlc
package itself. For a strict match you could write ^vlc-[0-9]. (The glob
vlc-* is also accepted — it compiles to vlc-.* and freezes the whole vlc-
family, plugins included; use the ^vlc-[0-9] regex when you want only the
vlc package.)
The same blacklist file also stores pins — the positive opposite of a
freeze. A freeze says never take this package (or not from this repo); a pin
says take this package only from this repo, ignoring priority.
Manage pins with two commands:
slacker pin alienbob:vlc # vlc now comes only from alienbob, even if a
# higher-priority repo offers a different build
slacker unpin vlc # back to normal priority-based resolution
slacker unpin # (no argument) list the current pins
A pin is written into the blacklist file with a 100% marker, so you can also
add or read it by hand:
@alienbob 100% vlc
How it behaves:
-
Every command honours it —
install,upgrade, andupgrade-allall source the package only from the pinned repo, regardless of priority. A plan that includes a pinned package lists it under "pinned (taken only from their repo, ignoring priority)", the way frozen packages are surfaced. - Pins use an exact package name, never a pattern (
vlc, notvlc*). A literal dot is fine —python3.11andwebkit2gtk6.0are valid pin names. To freeze a pattern, usefrozeninstead (it accepts globs and regexes). - A package has at most one pin. Pinning it to a different repo replaces the old pin.
- If the pinned repo does not currently offer the package, the package simply
stays as it is (it is never pulled from anywhere else) until that repo provides
it.
slacker statusflags a pin whose repo is not active, anddel-repowarns you if packages are pinned to the repo you are removing. - In
clean-system, a pin alone does not protect a package. But a foreign package that is pinned and was actually installed from the repo it is pinned to is offered in a separate step — [R]emove all / [K]eep all / [P]rompt each, defaulting to Keep (a pin is an explicit choice). A pinned name whose installed copy came from another source is ignored by that step and follows the normal clean-system logic. - A freeze always wins over a pin on the same package: if
vlcis both frozen and pinned, the freeze takes effect and the pin does nothing until youunfrozenit.
Pin vs the scoped freeze from the worked example above: @alienbob vlc freezes
alienbob's vlc (and lets other repos update it by priority); @alienbob 100% vlc
pins vlc to alienbob (and lets no other repo provide it). They are opposites.
These solve different problems:
Blacklist (frozen) |
Quarantine (distrust-repo) |
|
|---|---|---|
| Scope | specific packages (by regex/series) | a whole repository |
| Effect | freeze / hide those packages | the repo provides no packages at all |
| Use it for | "never touch this package" | "do not trust this source right now" |
See Security for the quarantine model.
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