Sleepstars 的记录室

Sleepstars 的记录室

Debian 13 DEB822 格式简介(及迁移流程)

2025-09-18

图源 https://www.debian.org

一、背景:Debian 13 与 APT 源的“新常态”

Debian 13(代号 trixie)已于 2025-08-09 发布,APT 在本代全面推动以 DEB822 为默认与推荐的源配置格式;如果你的系统里还保留旧的 .list 一行式配置,apt update 时常会提示“Some sources can be modernized”。APT 现已内置 apt modernize-sources 来自动转换旧格式。

更重要的是,传统的一行式 sources.list 已被标记为弃用,官方手册明确写道:该格式“计划移除,但不会早于 2029 年”。因此,尽早迁移到 DEB822 是面向未来的稳妥选择。


二、什么是 DEB822?

DEB822 是一种 Key: Value 的分段(stanza)文本格式,APT 以 .sources 扩展名识别。它与 Debian 生态中其他基于 RFC822 的元数据(如 debian/control)语法一致:

  • 一个文件可包含多个条目,条目之间空行分隔

  • # 开头的是注释;

  • 可以用 Enabled: no 快速禁用某个源;

  • 多值字段以空白字符分隔(不是逗号)。

最小必备字段

一般而言,一个可用的条目至少需要:
TypesURIsSuites(多数仓库还需要 Components)。如果仓库签名受信(几乎总是如此),还应配合 Signed-By 指定密钥环。


三、常用字段速查

  • Typesdeb / deb-src

  • URIs:仓库根地址。

  • Suites:如 trixietrixie-updatestrixie-security。可在同一条目写多个套件。

  • Componentsmain contrib non-free non-free-firmware

  • Enabledyes|no,更优雅的开关方式。

  • Architectures(及 Architectures-Add/Remove):限制拉取架构。

  • Signed-By:将仓库的信任范围限定到指定密钥环文件(推荐路径 /usr/share/keyrings/etc/apt/keyrings)。

  • Trusted:极少用;yes 会绕过认证检查,请避免

  • By-Hash/PDiffs/Targets:高级下载/索引开关。
    以上含义与语法均见 APT 官方手册。(Debian Manpages)

注:Signed-By 支持文件路径指纹;官方建议优先使用密钥环文件并存放在上述推荐位置。


四、示例:Debian 13 官方源(推荐 HTTPS)

文件/etc/apt/sources.list.d/debian.sources

# 官方主仓与更新
Types: deb
URIs: https://deb.debian.org/debian
Suites: trixie trixie-updates
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

# 安全更新
Types: deb
URIs: https://deb.debian.org/debian-security
Suites: trixie-security
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

此写法将 多个套件trixietrixie-updates)合并到了同一个条目;Signed-By 指向官方密钥环。语法与示例可在 APT 手册中找到对应说明。


五、第三方仓库:安全添加的通用范式

以假想的 ExampleCorp 为例(注意:路径与 Key 仅示例):

# 1) 准备 keyrings 目录(Debian 12+ 默认存在,若无则创建)
sudo install -d -m 0755 /etc/apt/keyrings

# 2) 下载并去 armor(或保持 .asc 直接用也可)
curl -fsSL https://example.com/keys/example.gpg | sudo tee /etc/apt/keyrings/example.gpg >/dev/null
sudo chmod 0644 /etc/apt/keyrings/example.gpg

文件/etc/apt/sources.list.d/example.sources

Types: deb
URIs: https://repo.example.com/debian
Suites: trixie
Components: main
Signed-By: /etc/apt/keyrings/example.gpg
Enabled: yes

这样做的好处是:即使系统里还有其他仓库,也会用 example.gpg 验证 ExampleCorp 这一个仓库,避免把第三方 key 暴露为“全局信任”。这是 Debian 文档与社区长期推荐的做法,并且配合了 apt-key 弃用的方向。

这里给出一个我的上一篇切换 Xanmod 内核的文章,可以参考这篇文章获得一个从头开始部署的流程。


六、从 sources.list 迁移到 .sources

APT 已提供一键迁移

sudo apt modernize-sources

该命令会:

  • .list 转写为 .sources

  • 能识别时自动补上 Signed-By

  • 为旧文件生成备份(如 .list.bak)。
    若个别第三方源的签名信息不明,迁移后可能需要你手工补上 Signed-By。社区与邮件列表已有大量实测与讨论。(Unix & Linux Stack Exchange)


七、常见坑与排雷

  1. 逗号 vs 空格
    DEB822 多值字段以空白分隔,不要写逗号
    Components: main contrib ✅;Components: main, contrib ❌。

  2. 禁用源的正确姿势
    优先使用 Enabled: no,而不是整段注释,更清晰也更易于脚本处理。

  3. apt-key 已弃用
    不要再用 apt-key add 往全局信任里塞第三方 key;用 Signed-By + /etc/apt/keyrings/(或 /usr/share/keyrings/)即可。

  4. 文件命名与位置
    .sources.list 两类后缀会被读取;字符集有限制(字母、数字、下划线、连字符、点),不符合的会被忽略。新系统建议放到 vendor.sources 这类文件名中。

  5. 慎用 Trusted: yes
    这会绕过 apt-secure 的重要检查,仅在完全受信的本地场景下才可考虑。


八、最小模板

# /etc/apt/sources.list.d/<name>.sources
Types: deb
URIs: https://<mirror-or-repo>
Suites: trixie
Components: main
Architectures: amd64
Signed-By: /etc/apt/keyrings/<repo>.gpg
Enabled: yes

进一步阅读