Skip to content

Repositories and Priority.zh

Anagnostakis Ioannis edited this page Sep 11, 2026 · 4 revisions

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
Loading

slacker 在没有数据库的情况下,如何得知一个已安装软件包的「来源」?靠它的 build tag —— 即 build 字段去掉开头的数字(1_SBo_SBo7cfcf1 → 官方)。用户的一行 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/extramirror/testingmirror/patches)—— 一棵跟随你所选镜像的子树

URL 指向包含 PACKAGES.TXT 的仓库;对官方镜像而言,MANIFEST.bz2 位于一个 按架构划分的子目录中,slacker 会自动找到它。

flag

Flag 作用
official 标记被追踪的仓库:它驱动 show-changelog,并是 install-new 的默认来源。其位置仍仅由优先级决定 —— 官方仓库可以放在任何位置。
immutable 归属此仓库的每个软件包都不被 clean-system 触及。对你保持安装的 extra/testing/patches,用它,而不必逐个加入黑名单。
subtree 此 URL 是一棵 Slackware 发行版子树(extrapatchestestingpasture)。它们的 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 系列aapdkkdelntxxapxfcey、…)—— 仅该系列,绝不匹配子串
repo:name 一个 pin —— 无视优先级强制指定一个仓库(例如 alienbob:vlc
@repo 一个集合选择器 —— 该仓库中的每个软件包(install @gnomeremove @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 并列,因为它已经 指明了自己的仓库,不会展开。

只要有一个参数没有匹配,整条命令都会取消。 installupgradereinstallremovedownload 要么作用于全部参数,要么一个都不动:若其中之一什么都没匹配到, 则什么也不做,并指出该参数。-y 不能绕过这一点。

当一个模式匹配到多个软件包时,install/upgrade/reinstall/remove 会显示一个 编号列表 —— 回车表示全部,像 1 3 52-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-newclean-cachevet-repotrust-repodistrust-repodel-repopri-repo 除仓库之外不接受别的,因此没有什么需要区分。install-new @ponce 会被拒绝,并建议使用裸名。

add-repo 会校验该行,并在确认后获取并**审查(vets)**该仓库(参见 Security)。

pri-repo PRIORITY NAME 改变你已有仓库的优先级。它会检查 NAME 是否为活动仓库 (拼写出错时建议最接近的匹配),并拒绝另一个仓库已占用的 PRIORITY,指明冲突以便你 另选一个值 —— 优先级必须保持互不相同。只有该行的优先级会被重写;URL 与 flag 原封 不动。

Clone this wiki locally