Repositories and Priority
This is slacker's defining idea, and the thing that sets it apart from a plain mirror tool: every repository lives in one priority-ordered model, and priority is never silently violated.
The priority rule
When the same package name is offered by several repositories, the one from the highest-priority repository wins. More importantly:
An installed package is never silently migrated to a different repository, and never downgraded. A candidate is proposed only from a repository of higher or equal priority. The single exception is an explicit
repo:namepin.
So giving a repository a distinct, high priority locks its packages: nothing from a lower repo can replace them, even with a newer version number.
%%{init: {'theme':'base','themeVariables':{'primaryColor':'#161b22','primaryBorderColor':'#1f6feb','primaryTextColor':'#e6edf3','lineColor':'#6e7781','fontFamily':'monospace'}}}%%
flowchart TB
I["installed package<br/>(its build tag = its source)"] --> D{"candidate repo's priority<br/>vs the installed source"}
D -->|higher or equal| U["may upgrade / replace"]
D -->|lower| K["kept — never downgraded<br/>never migrated"]
PIN["repo:name pin"] -. "forces a repo,<br/>overriding priority" .-> 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
How does slacker know an installed package's "source" without a database? From
its build tag — the build field minus the leading digits (1_SBo → _SBo,
7cf → cf, 1 → official). A user tag-priority line, or the highest-priority
binary repo that ships that tag (cf → conraid, alien → alienbob,
auto-detected), decides its owning priority.
The repos file
# priority name url|mirror|mirror/<subpath> [flags]
100 slackware mirror official
91 testing mirror/testing subtree immutable
90 extras mirror/extra subtree immutable
80 conraid https://slackers.it/repository/slackware64-current immutable
60 alienbob https://slackware.nl/people/alien/sbrepos/current/x86_64
# tag-priority lines (may share a priority):
100 SBo _SBo
100 local _rtz
The URL field
| Form | Meaning |
|---|---|
| a literal URL | https://, http://, or file:// (the last for a local clone / NFS / mounted media — three slashes for an absolute path) |
mirror |
the active line from mirrors, as-is — use it for the official repo |
mirror/<subpath> |
the active mirror with a subpath appended (mirror/extra, mirror/testing, mirror/patches) — a subtree that follows whichever mirror you picked |
A URL points at the repo root containing PACKAGES.TXT; for official mirrors,
MANIFEST.bz2 lives in a per-arch subdir slacker finds automatically.
The flags
| Flag | What it does |
|---|---|
official |
Marks the tracked repo: it powers show-changelog and is the default for install-new. Placement is still by priority only — the official repo can sit anywhere. |
immutable |
Every package attributed to this repo is kept out of clean-system. Use it for extra/testing/patches you keep installed, instead of blacklisting each one. |
subtree |
This URL is a Slackware distribution subtree (extra, patches, testing, pasture). Their PACKAGES.TXT lists package locations relative to the distribution root, so packages and GPG-KEY are fetched from the parent (root) URL while metadata comes from the URL itself. Without it, those packages 404 with a doubled path segment. The four subtrees must always carry this flag. |
verify=... |
Per-repo verification override (see Security). |
mirror/extra+subtreeare a pair.mirror/extraresolves the URL;subtreefixes how packages and the key are fetched from it.
Pinning and selectors
A PATTERN on the command line may be:
| Form | Matches |
|---|---|
firefox |
exact package name |
python |
a name substring — all python-* |
kde |
a Slackware series (a, ap, d, k, kde, l, n, t, x, xap, xfce, y, …) — that series only, never substrings |
repo:name |
a pin — force one repository regardless of priority (e.g. alienbob:vlc) |
@repo |
a set selector — every package in that repo (install @gnome, remove @gnome) |
@_tag |
every package with that build tag (remove @_SBo) |
The
@is required, so a bare word is never mistaken for a repo. An unknown@repo/@_taggives a "did you mean" suggestion and lists the available repos and tags.
When a pattern matches more than one package, install/upgrade/reinstall/
remove show a numbered list — Enter for all, numbers/ranges like 1 3 5 or
2-4, n to cancel.
Managing repos from the 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 add-tag 100 SBo _SBo
slacker del-tag _SBo
slacker list-repos # priority, verify, flags, installed counts
add-repo validates the line and, on confirmation, fetches and vets the repo
(see Security).
slacker
Getting started
Using slacker
- Commands
- Common Workflows
- Repositories and Priority
- Package History
- Dependencies
- Templates
- Blacklist
Trust & safety
Reference
For contributors
slacker — slackpkg + slackpkg+ in one · Apache-2.0 · by Ioannis Anagnostakis (rizitis) · beta / WIP, for Slackware64-current