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
仓库与优先级
这是 slacker 的核心理念,也是它有别于一个单纯镜像工具之处:每个仓库都生活在一个 按优先级排序的统一模型里,而优先级绝不会被悄悄违反。
优先级规则
当同一个软件包名由多个仓库提供时,来自优先级最高仓库的那个胜出。更重要的是:
已安装的软件包绝不会被悄悄迁移到另一个仓库,也绝不会被降级。候选只会从 优先级更高或相等的仓库提出。唯一的例外是显式的
repo:name。
因此,给某个仓库一个独立的高优先级,就锁定了它的软件包:来自更低仓库的任何东西 都无法替换它们,哪怕版本号更新也不行。
%%{init: {'theme':'base','themeVariables':{'primaryColor':'#161b22','primaryBorderColor':'#1f6feb','primaryTextColor':'#e6edf3','lineColor':'#6e7781','fontFamily':'monospace'}}}%%
flowchart TB
I["已安装软件包<br/>(其 build tag = 其来源)"] --> D{"候选仓库的优先级<br/>对比已安装来源"}
D -->|更高或相等| U["可升级 / 替换"]
D -->|更低| K["保留 - 绝不降级<br/>绝不迁移"]
PIN["repo:name"] -. "强制指定仓库,<br/>覆盖优先级" .-> 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
slacker 在没有数据库的情况下,如何得知一个已安装软件包的「来源」?靠它的 build
tag —— 即 build 字段去掉开头的数字(1_SBo → _SBo,7cf → cf,1 →
官方)。用户的一行 tag-priority,或提供该标签的优先级最高的二进制仓库(cf →
conraid,alien → alienbob,自动识别),决定了它归属的优先级。
repos 文件
# priority name url|mirror|mirror/<subpath> [flags]
100 slackware mirror official
200 patches mirror/patches subtree immutable
90 extras mirror/extra subtree immutable
85 testing mirror/testing subtree immutable
80 conraid https://slackers.it/repository/slackware64-current immutable
60 alienbob https://slackware.nl/people/alien/sbrepos/current/x86_64
# tag-priority 行(可共用一个优先级):
100 SBo _SBo
100 local _rtz
URL 字段
| 形式 | 含义 |
|---|---|
| 一个字面 URL | https://、http:// 或 file://(后者用于本地克隆 / NFS / 已挂载介质 —— 绝对路径用三条斜杠) |
mirror |
来自 mirrors 的活动行,原样使用 —— 用于官方仓库 |
mirror/<子路径> |
在活动镜像后附加一个子路径(mirror/extra、mirror/testing、mirror/patches)—— 一棵跟随你所选镜像的子树 |
URL 指向包含 PACKAGES.TXT 的仓库根;对官方镜像而言,MANIFEST.bz2 位于一个
按架构划分的子目录中,slacker 会自动找到它。
flag
| Flag | 作用 |
|---|---|
official |
标记被追踪的仓库:它驱动 show-changelog,并是 install-new 的默认来源。其位置仍仅由优先级决定 —— 官方仓库可以放在任何位置。 |
immutable |
归属此仓库的每个软件包都不被 clean-system 触及。对你保持安装的 extra/testing/patches,用它,而不必逐个加入黑名单。 |
subtree |
此 URL 是一棵 Slackware 发行版子树(extra、patches、testing、pasture)。它们的 PACKAGES.TXT 列出的是相对发行版根的位置,因此软件包与 GPG-KEY 从父(根)URL 获取,而元数据来自该 URL 本身。若不加此 flag,这些软件包会因路径段重复而返回 404。 四棵子树必须始终带上此 flag。 |
verify=... |
针对该仓库的校验覆盖(参见 Security)。 |
mirror/extra+subtree是一对。mirror/extra解析出 URL;subtree修正软件包与密钥从它获取的方式。
固定(pinning)与选择器
命令行上的 PATTERN 可以是:
| 形式 | 匹配 |
|---|---|
firefox |
精确的软件包名 |
python |
名称的子串 —— 所有 python-* |
kde |
一个 Slackware 系列(a、ap、d、k、kde、l、n、t、x、xap、xfce、y、…)—— 仅该系列,绝不匹配子串 |
repo:name |
一个 pin —— 无视优先级强制指定一个仓库(例如 alienbob:vlc) |
@repo |
一个集合选择器 —— 该仓库中的每个软件包(install @gnome、remove @gnome) |
@_tag |
带有该 build 标签的每个软件包(remove @_SBo) |
@是必需的,以免一个裸词被误当作仓库。未知的@repo/@_tag会给出 「did you mean」建议,并列出可用的仓库与标签。
当一个模式匹配到多个软件包时,install/upgrade/reinstall/remove 会显示一个
编号列表 —— 回车表示全部,像 1 3 5 或 2-4 这样的数字/范围,n 取消。
命令行选择没有
*通配符。一个未加引号的*会在 slacker 运行之前被你的 shell 展开成当前目录的文件名(slacker 永远看不到*,也永远不读你的目录); 若这产生了一堆并非软件包的参数,slacker 会识别出来并拒绝该命令,不做任何 改动。请给字面模式加上引号,或用@repo表示整个仓库。(Blacklist 是唯一 一处模式确实是 glob/regex 的地方。)
从命令行管理仓库
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 pri-repo 95 extras # 重新调整一个已有仓库的优先级
slacker add-tag 100 SBo _SBo
slacker del-tag _SBo
slacker list-repos # 优先级、verify、flag、已安装数量
add-repo 会校验该行,并在确认后获取并**审查(vets)**该仓库(参见 Security)。
pri-repo PRIORITY NAME 改变你已有仓库的优先级。它会检查 NAME 是否为活动仓库
(拼写出错时建议最接近的匹配),并拒绝另一个仓库已占用的 PRIORITY,指明冲突以便你
另选一个值 —— 优先级必须保持互不相同。只有该行的优先级会被重写;URL 与 flag 原封
不动。
slacker
Getting started
Using slacker
- Commands
- Common Workflows
- Distribution Upgrade
- Repositories and Priority
- Package History
- Dependencies
- Docker
- Templates
- Blacklist
Trust & safety
Reference
For contributors
slacker - slackpkg + slackpkg+ in one - Apache-2.0 - by Ioannis Anagnostakis (rizitis) - beta / WIP, for Slackware -current (64-bit & 32-bit)