Table of Contents
- FAQ
- slacker 能在 Slackware 15.0 上工作吗?
- slacker 能把我的系统升级到新的 Slackware 发行版吗?
- install/upgrade 拒绝一个软件包,说该仓库面向另一个发行版。
- 安装后我需要复制配置文件吗?
- 我如何挑选一个快速、最新的镜像?
- update 说某个仓库的软件包无法下载(出现像 .../extra/extra/... 这样重复的路径)。
- error: repos: ... duplicate priority
- error: repos: ... two active mirrors / 「no mirror」
- 为什么 upgrade-all 没有升级我的 SBo / alienbob 软件包,尽管有更新的版本?
- 一次 -current 升级弄坏了一个软件包 —— 我能回滚吗?
- 我如何从黑名单移除一条规则?
- install-new 一直推荐我移除过的东西 / 从不推荐我移除过的某个软件包。
- history emacs 什么也不显示,但软件包确实已安装。
- history 把我确定移除过的东西显示成 old → new 的升级。
- 一个仓库处于隔离状态,不提供任何软件包。
- 「key-substitution attack」 / 一把密钥无法导入。
- 我如何防止 clean-system 移除 extra/testing/patches 的软件包?
- install * / remove * / history * 没有做我期望的事。
- 我能以普通用户身份运行查询吗?
- 某条命令说有另一个实例正在运行。
- 颜色把我的日志 / 终端弄乱了。
- 我如何报告一个缺陷或请求一项功能?
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
FAQ
常见问题与故障排查。另见 Configuration、Security 与 Repositories and Priority。
slacker 能在 Slackware 15.0 上工作吗?
不能 —— 而且永远不会。slacker 面向 Slackware -current:64 位(x86_64),以及 自 0.9.0 起的 32 位(i586/i686)。参见 Status and Roadmap。
slacker 能把我的系统升级到新的 Slackware 发行版吗?
可以 —— 那就是 slacker upgrade-dist {current|VERSION}。它会把你的镜像与仓库重新
指向目标发行版,并用目标的构建替换每个软件包(这是唯一一条有意绕过优先级模型的
命令),随后运行 install-new + clean-system,并在你重启前提醒你关于内核的事项。请
务必先做 --dry-run 并保留备份。注意:要升级一台 15.0 系统,你需要一个能在
15.0 较旧 glibc 上运行的 slacker 二进制(分发的软件包是为 -current 构建的);而
本地源选项(DISTRO_UPGRADE_MIRROR)尚未经过测试。完整细节见
Distribution Upgrade。
install/upgrade 拒绝一个软件包,说该仓库面向另一个发行版。
那是发行版匹配守卫。一个为另一 Slackware 发行版构建的仓库(例如一个仍在 15.0 上激活
的 alienbob -current 仓库)可能通过 GPG/md5,却安装会破坏你系统的软件包,因此
slacker 拒绝它。把该仓库指向你系统的发行版,或在你确定时传 --yes 以覆盖。
slacker status 会在它的 Repo release 行显示同样的不匹配。参见 Security。
安装后我需要复制配置文件吗?
不需要。二进制软件包会把配置文件放到 /etc/slacker/ 下的位置。你只编辑其中两个 ——
mirrors(选一个)和 repos(设优先级)。参见 Installation。
我如何挑选一个快速、最新的镜像?
运行 slacker find-mirror。它探测官方 Slackware 镜像列表,为每个计时,剔除已落后于
上游主站的,按速度对其余排名,并打印最快的那个作为要放进 mirrors 的行 —— 它绝不
替你改动配置。它在配置任何镜像之前就能工作,因此是全新安装上自然的第一条命令。
此后,slacker status 会标出已变陈旧的镜像(落后上游超过 48 小时)。参见
Quick Start。
update 说某个仓库的软件包无法下载(出现像 .../extra/extra/... 这样重复的路径)。
那个仓库是一棵发行版子树(extra、patches、testing、pasture),需要在
repos 中加 subtree flag。它的 PACKAGES.TXT 列出的是相对发行版根的位置;该
flag 告诉 slacker 从父 URL 获取软件包与密钥。参见 Repositories and Priority。
error: repos: ... duplicate priority
二进制仓库的优先级必须互不相同。给每个二进制仓库一个唯一的编号。(tag-priority 行可以共用一个优先级 —— 那没问题。)
error: repos: ... two active mirrors / 「no mirror」
在 mirrors 中,必须恰好有一行未被注释。零行会让官方 URL 为空;两行或更多则是
错误。
为什么 upgrade-all 没有升级我的 SBo / alienbob 软件包,尽管有更新的版本?
优先级。slacker 绝不把已安装的软件包迁移到不同优先级的来源,也不降级它。候选只会从
优先级更高或相等的仓库提出。如果你想要某个特定仓库的构建,就 pin 它:
slacker upgrade alienbob:vlc。要让某个来源始终胜出,给它一个标签优先级。参见
Repositories and Priority。
一次 -current 升级弄坏了一个软件包 —— 我能回滚吗?
可以,对 -current 上的官方软件包而言。slacker revert-pkg NAME 会列出该软件
包先前的构建(来自 removed_packages),从累积归档中获取你选中的那个(针对被固定的
Slackware 密钥做 GPG 校验),并用 upgradepkg --reinstall 将其降级。先试
--dry-run 以查看确切的构建。随后它会提议冻结该软件包,使 upgrade-all 不会再次
把它推向前 —— 之后用 slacker unfrozen NAME 解除。第三方软件包不在覆盖范围(累积
归档只携带官方的),且仅在 -current 上有效:代码读取 VERSION_CODENAME,并在
稳定发行版上拒绝执行(一道严格的 fail-closed 守卫)。参见 Common Workflows。
我如何从黑名单移除一条规则?
slacker unfrozen RULE —— frozen 的对应命令。以无参数运行 slacker unfrozen 来
列出当前规则,然后完全照样传入一条(匹配是按字面的,所以 .* / * / /
永远不会被当作模式)。手动编辑 /etc/slacker/blacklist 也行。参见 Blacklist。
install-new 一直推荐我移除过的东西 / 从不推荐我移除过的某个软件包。
install-new 针对的是名称新加入发行版的软件包 —— 而非你移除过的软件包(那些
已经存在于树中)。要重新放回一个被移除的软件包,请用 slacker install NAME
(或 install @repo)。参见 Commands。
history emacs 什么也不显示,但软件包确实已安装。
名称精确匹配。如果软件包是 aircrack-ng,那么 history aircrack 什么也找不到
—— 请用精确的名称。参见 Package History。
history 把我确定移除过的东西显示成 old → new 的升级。
pkgtools 的 removed_packages/ 目录每个软件包标识符只保留一个文件,因此较晚的
移除会覆盖较早的记录 —— 一部分历史被工具自身丢失了。slacker 会尽量重建,并从下一条
已知记录推断出丢失的升级目标。参见 Package History。
一个仓库处于隔离状态,不提供任何软件包。
slacker 会隔离一个未通过审查的仓库(无法连通,或元数据畸形/恶意)。用
slacker vet-repo NAME 重新检查;若你判断这是误报,slacker trust-repo NAME
会解除它(由你负责)。参见 Security。
「key-substitution attack」 / 一把密钥无法导入。
slacker 在首次导入时固定每个仓库的 GPG 指纹(trust on first use)。此后指纹不同的
密钥会被拒绝。若密钥是合法地更换了,你需要清除该仓库在 STATE_DIR 下的固定
(/var/lib/slacker/gpg/<repo>.fpr)并重新导入。参见 Security。
我如何防止 clean-system 移除 extra/testing/patches 的软件包?
在 repos 中把这些仓库标为 immutable。它们已安装的软件包于是被保留,而无需逐个
加入黑名单。参见 Common Workflows。
install * / remove * / history * 没有做我期望的事。
slacker 没有 * 通配符来选择软件包。整个仓库是 @repo(例如 install @gnome);单个软件包是它的精确名称;子串匹配一个家族。一个未加引号的 * 会在
slacker 运行之前被你的 shell 展开成当前目录的文件名 —— slacker 永远看不到 *,
也永远不读你的目录。当这产生一堆并非软件包的参数时,slacker 会识别出来并拒绝该
命令,不做任何改动(remove * 不会删除那些碰巧与某个文件名共享子串的真实软件
包)。请给字面模式加引号,或用 @repo。注意黑名单不同:frozen 确实接受 glob
与正则 —— 参见 Blacklist。
我能以普通用户身份运行查询吗?
可以。search、info、file-search、check-updates、show-changelog、
history 和 find-mirror 在任何用户下都能运行。一切会改动系统的操作都需要 root。
某条命令说有另一个实例正在运行。
会改动系统的命令会取得一个独占锁(/run/slacker.lock);同一时间只运行一个。若
slacker 退出或被杀,锁会自动释放。查询不取锁。
颜色把我的日志 / 终端弄乱了。
设置 NO_COLOR=1(当输出并非终端时,颜色也会自动关闭)。长输出的分页器是 $PAGER
或 less -FRX。
我如何报告一个缺陷或请求一项功能?
在以下地址开一个 issue: https://forge.slackware.nl/rizitis/slacker/issues。
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)