-
Notifications
You must be signed in to change notification settings - Fork 0
Dependencies
«slacker - one path through the dependency labyrinth. No dead ends.»
Dependency resolution in Slackware is the repository's responsibility, not the
package manager's - and the official trees deliberately carry none. slacker
follows that: it never guesses, and for official packages it auto-resolves
nothing. When a third-party repository chooses to declare dependencies,
slacker honours that declaration - from a package's own .dep file, or, when a
repo publishes them in PACKAGES.TXT instead (the PACKAGE REQUIRED: field,
as slapt-get / SlackBuilds-style repos do), from there. Vanilla Slackware trees
carry neither, so they get no auto-dependencies, which is correct. The whole
mechanism is yours to switch off (RESOLVE_DEPS=off, or --no-deps per run).
If a package has a .dep file next to it in the repository (one dependency
package name per line), slacker reads it and pulls in the missing dependencies
from the same repository, recursively, before installing. When the .dep is
absent, the comma-separated names from PACKAGE REQUIRED: are used instead (a
trailing version constraint is dropped and the first of an a|b alternative is
taken).
%%{init: {'theme':'base','themeVariables':{'primaryColor':'#161b22','primaryBorderColor':'#1f6feb','primaryTextColor':'#e6edf3','lineColor':'#6e7781','fontFamily':'monospace'}}}%%
flowchart TB
S["install a package"]:::blue --> D{".dep file<br/>in the repo?"}
D -->|"no .dep, but<br/>PACKAGE REQUIRED:"| R["use the names from<br/>PACKAGES.TXT"]:::green
D -->|"neither"| GO["install it"]:::green
D -->|yes| L["for each listed dep"]:::grey
R --> L
L --> C{"already installed?"}
C -->|"no"| ADD["add to the plan<br/>(from the same repo)"]:::green
C -->|"yes, same as repo build"| LEAVE["leave it alone"]:::grey
C -->|"yes, but differs"| PRI{"installed source priority"}
PRI -->|lower| ASK["prompt: skip / replace /<br/>skip-all / abort"]:::blue
PRI -->|higher or equal| KEEP["kept by priority,<br/>surfaced with keep / replace"]:::blue
ADD --> GO
classDef grey fill:#0d1117,stroke:#6e7781,color:#8b949e;
classDef blue fill:#0d1117,stroke:#1f6feb,color:#e6edf3;
classDef green fill:#0d1117,stroke:#2ea043,color:#e6edf3;
A dependency already satisfied by that repo's own build is left alone. A dependency that is installed but differs from what the repo offers (for example installed from another source) is handled by source priority:
- if the installed copy comes from a lower-priority source → you are prompted: skip / replace / skip-all / abort;
- if it comes from a higher-or-equal priority source → it is kept by the priority rule, but slacker still lists it and lets you keep (the default) or replace it with the version the repo being installed offers.
With --yes, the installed version is kept in both cases.
New dependencies are shown up front, before the confirmation, in the same
coloured plan table as everything else - each tagged as a new dep for its
parent.
On by default. Disable globally with RESOLVE_DEPS=no in slacker.conf, or
per-run with --no-deps.
Dependency resolution applies to every command that installs packages:
install, upgrade, reinstall, upgrade-all, install-new, and
install-template.
A repository may declare two more optional fields for a package, alongside its dependencies. slacker surfaces both — and never acts on either silently.
Conflicts. If a package you are installing declares a conflict with a package
that is currently installed, slacker stops before the install, shows X conflicts with the installed Y, and offers a three-way choice: continue
anyway, remove the conflicting installed package(s) first (a plain
removepkg) and then continue, or abort — the default, so pressing Enter
cancels. With --yes it prints the conflict as a warning and proceeds. The check
is one-directional: only the installing package's declared conflicts are weighed,
against what is installed; a package never conflicts with its own new version.
Suggests. A SUGGESTS line is advisory free text from the repo maintainer.
slacker prints it verbatim — "the repo maintainers suggest (acting on it is up to
you)" — and does nothing else: it is never parsed, resolved, or installed. A
hint for you, not an action for slacker.
Both come from the repo's own metadata (the same place as PACKAGE REQUIRED:), so
vanilla Slackware trees — which declare neither — show nothing here.
- One small
.deprequest is made per package at install time. A404simply means "no deps" and slacker proceeds normally. - Dependencies are only ever pulled from the same repository as the package that declares them, never guessed or cross-resolved.
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