-
Notifications
You must be signed in to change notification settings - Fork 1
Repositories and Priority.zh
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,自动识别),决定了它归属的优先级。
# 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 |
https://、http:// 或 file://(后者用于本地克隆 / NFS / 已挂载介质 —— 绝对路径用三条斜杠) |
mirror |
来自 mirrors 的活动行,原样使用 —— 用于官方仓库 |
mirror/<子路径> |
在活动镜像后附加一个子路径(mirror/extra、mirror/testing、mirror/patches)—— 一棵跟随你所选镜像的子树 |
URL 指向包含 PACKAGES.TXT 的仓库根;对官方镜像而言,MANIFEST.bz2 位于一个
按架构划分的子目录中,slacker 会自动找到它。
| 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修正软件包与密钥从它获取的方式。
命令行上的 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」建议,并列出可用的仓库与标签。反过来,若一个裸词命名的是仓库 而非软件包(download fontforge ponce—— 漏掉了:),slacker 不会拿最相近的软件包 名来回答:它会说明那是一个仓库,并同时给出两种写法,ponce:<package>与@ponce。
不要在同一条命令里把裸的软件包名与
@repo混用。install vlc @alienbob读作「vlc 以及 alienbob 中的每一个软件包」,这几乎从来不是本意 —— slacker 会拒绝它并指向alienbob:vlc。各种写法单独使用均不受影响:@repo仍取整个仓库, 多个@repo可以合用,而repo:name形式的 pin 可以与@repo并列,因为它已经 指明了自己的仓库,不会展开。
只要有一个参数没有匹配,整条命令都会取消。
install、upgrade、reinstall、remove与download要么作用于全部参数,要么一个都不动:若其中之一什么都没匹配到, 则什么也不做,并指出该参数。-y不能绕过这一点。
当一个模式匹配到多个软件包时,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、已安装数量这些命令只接受裸的仓库名,不带
@。@只存在于裸词原本会是软件包名的地方;install-new、clean-cache、vet-repo、trust-repo、distrust-repo、del-repo与pri-repo除仓库之外不接受别的,因此没有什么需要区分。install-new @ponce会被拒绝,并建议使用裸名。
add-repo 会校验该行,并在确认后获取并**审查(vets)**该仓库(参见 Security)。
pri-repo PRIORITY NAME 改变你已有仓库的优先级。它会检查 NAME 是否为活动仓库
(拼写出错时建议最接近的匹配),并拒绝另一个仓库已占用的 PRIORITY,指明冲突以便你
另选一个值 —— 优先级必须保持互不相同。只有该行的优先级会被重写;URL 与 flag 原封
不动。
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