8.9 KiB
Linux 分发现状
本文记录 TauriTavern 当前的 Linux 分发方式、信任身份和维护边界。Linux 系统软件源默认使用 stable;Canary 有独立路径,不会混入 Stable 索引。
支持范围
| 系统 | 入口 | 版本与架构 |
|---|---|---|
| Debian | APT | 12+,amd64 / arm64 |
| Ubuntu | APT | 22.04 LTS+,amd64 / arm64 |
| Fedora | DNF | Fedora 当前支持版本,x86_64 / aarch64 |
| openSUSE Leap | Zypper | 16.0,x86_64 / aarch64 |
| Nix / NixOS | flake | x86_64-linux / aarch64-linux |
| Flatpak | 独立软件源 | x86_64;aarch64 待验证 |
DEB/RPM 构建要求 GLIBC_2.34,并依赖 WebKitGTK 4.1、GTK 3、GStreamer 与 D-Bus 1 runtime;构建环境同时需要 D-Bus development metadata。openSUSE Leap 15.x 不能可靠验证当前的 Ed25519 RPM 签名,因此不在支持范围内。
分发与信任
APT/DNF/Zypper 软件源:
https://packages.tauritavern.com
OpenPGP 身份:
TauriTavern Linux Repository <packages@tauritavern.com>
主密钥
C752 84E7 8972 F19A 0DDD 88C4 87F5 B853 0682 A857
签名子密钥
D609 D0B1 74E0 073B B398 0A1B EDC6 CEF9 24B6 C529
- 主密钥有效至 2036-07-22
- 签名子密钥有效至 2029-07-24
- 公钥:https://packages.tauritavern.com/keys/tauritavern-archive-keyring.asc
- 发布清单:https://packages.tauritavern.com/repository-manifest.json
Flatpak 软件源复用同一 OpenPGP 身份:
https://flatpak.tauritavern.com/tauritavern.flatpakrepo
Nix binary cache:
https://nix-cache.tauritavern.com
nix-cache.tauritavern.com-1:mOl/sCsfndubNIhnLODjA7GPqk1qw5iknbayZLRn92U=
OpenPGP 和 Nix cache key 是两套独立的信任机制,不复用私钥。
一键安装
短地址由 Cloudflare Redirect Rules 以 302 指向本仓库 main 分支的 scripts/install-linux.sh,脚本仍以仓库为唯一来源。
所有受支持的 Linux 用户均可运行:
curl -fsSL https://get.tauritavern.com/linux.sh | sh
脚本使用 POSIX sh 语法,支持 sh、Dash、Bash 与 Zsh。Debian、Ubuntu、Fedora 和 openSUSE 会使用原生软件源;NixOS 自动使用 flake。其他已经安装 Nix 的 Linux 可通过 sh -s -- --method nix 显式选择 Nix。可先下载脚本并以 --dry-run 查看执行计划。
Canary 使用同一入口:
curl -fsSL https://get.tauritavern.com/linux.sh \
| sh -s -- --channel canary
公钥验证
如需手动配置,先下载公钥并核对完整主密钥指纹:
key_file="$(mktemp)"
curl -fsSL \
https://packages.tauritavern.com/keys/tauritavern-archive-keyring.asc \
-o "$key_file"
gpg --show-keys --with-fingerprint "$key_file"
以下操作仅应在指纹一致后继续。
Debian / Ubuntu
sudo install -d -m 0755 /etc/apt/keyrings
sudo install -m 0644 "$key_file" \
/etc/apt/keyrings/tauritavern-archive-keyring.asc
architecture="$(dpkg --print-architecture)"
sudo tee /etc/apt/sources.list.d/tauritavern.sources >/dev/null <<EOF
Types: deb
URIs: https://packages.tauritavern.com/apt
Suites: stable
Components: main
Architectures: $architecture
Signed-By: /etc/apt/keyrings/tauritavern-archive-keyring.asc
EOF
sudo apt-get update
sudo apt-get install tauri-tavern
Fedora / openSUSE
导入已经核对的公钥:
sudo install -d -m 0755 /etc/pki/rpm-gpg
sudo install -m 0644 "$key_file" \
/etc/pki/rpm-gpg/RPM-GPG-KEY-tauritavern
sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-tauritavern
Fedora 仓库配置:
# /etc/yum.repos.d/tauritavern.repo
[tauritavern]
name=TauriTavern
baseurl=https://packages.tauritavern.com/rpm/fedora/stable/$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-tauritavern
sslverify=1
sudo dnf makecache --refresh
sudo dnf install tauri-tavern
openSUSE Leap 16.0 仓库配置:
# /etc/zypp/repos.d/tauritavern.repo
[tauritavern]
name=TauriTavern
type=rpm-md
baseurl=https://packages.tauritavern.com/rpm/opensuse/16.0/$basearch
enabled=1
autorefresh=1
gpgcheck=1
repo_gpgcheck=1
pkg_gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-tauritavern
sudo zypper --gpg-auto-import-keys refresh tauritavern
sudo zypper install tauri-tavern
Nix / NixOS
项目根目录的 flake.nix 提供 packages、apps 与 checks,并由 flake.lock 固定 Nixpkgs。直接运行或构建:
nix run github:Darkatse/TauriTavern
nix build github:Darkatse/TauriTavern
Rust 依赖直接由 src-tauri/Cargo.lock 中的版本和 checksum 固定,不额外维护容易与 lockfile 漂移的整体 cargoHash。如果以后加入 Git 来源的 crate,需要在 cargoLock.outputHashes 中显式固定相应源码。
pnpmDeps 仍是一个整体的离线依赖仓库;pnpm-lock.yaml 变化后,需要按 Nix 构建报告的实际值手动更新其固定哈希。
通过安装脚本加入当前用户 profile:
curl -fsSL https://get.tauritavern.com/linux.sh \
| sh -s -- --method nix
脚本不使用 sudo,也不修改声明式 NixOS 配置或 /etc/nix/nix.conf。
当前固定输入应使用包含 flake 的提交 SHA;后续 release tag 包含 flake 后,也可固定到 tag:
nix run github:Darkatse/TauriTavern/<commit-sha>
nix run github:Darkatse/TauriTavern/<release-tag>
multi-user Nix 需要由管理员配置信任:
extra-substituters = https://nix-cache.tauritavern.com
extra-trusted-public-keys = nix-cache.tauritavern.com-1:mOl/sCsfndubNIhnLODjA7GPqk1qw5iknbayZLRn92U=
若 Nix 报告 ignoring untrusted substituter,缓存没有生效,仍会回退到本地构建。
当前验证状态:
x86_64-linux已完成离线依赖恢复、release 构建、动态库检查和隔离启动。aarch64-linuxflake output 已通过求值,仍需原生 ARM64 runner 完成构建与启动验证。- 非 NixOS 宿主可能需要 NixGL 或
nix-system-graphics连接宿主 GPU 驱动。
Flatpak
packaging/flatpak/ 提供基于 GNOME 50 SDK 的源码构建 manifest。pnpm 与 Cargo
依赖由 lockfile 生成固定清单,构建阶段不访问网络;Tauri 的 DEB staging tree
只用于复用资源安装布局,不复用 Ubuntu 构建的二进制。
安装 Stable:
flatpak remote-add --user --if-not-exists \
tauritavern \
https://flatpak.tauritavern.com/tauritavern.flatpakrepo
flatpak install --user tauritavern com.tauritavern.client
本地构建:
pnpm run flatpak:build
当前 x86_64 已完成离线构建、AppStream/desktop 校验、动态库检查、Flatpak
bundle 导出、临时安装与隔离启动。manifest 使用 portal-first 权限,不开放整个
Home 目录;在桌面导出统一接入保存门户前,暂时直接开放 XDG Downloads 目录读写。
目录选择持久授权、导入导出、拖放、通知、媒体和 LAN Sync 仍需在真实桌面会话中
逐项验收;aarch64 尚未作为正式发布架构。
发布与缓存
正式版由 .github/workflows/stable-release.yml 在 Release 发布后构建。CI
保留人工编写的 Release notes,只追加各平台产物;APT/RPM、Flatpak 与 Nix
cache 在 Release 资产上传成功后更新,其中仓库上传均为非阻塞后置任务。
Canary 也在 GitHub Release 成功更新后发布 Linux 产物:
- APT suite:
canary - Fedora:
rpm/fedora/canary/$basearch - openSUSE:
rpm/opensuse/16.0/canary/$basearch - Nix:
nix run github:Darkatse/TauriTavern/Canary#canary
Canary CI 自动读取 GitHub 最新正式 Release 作为版本基线。以 2.1.1 为例,APT 使用 2.1.1+canary.<run>.g<sha>,RPM 使用 2.1.1-2.canary.<run>.g<sha>;它们高于当前正式包,同时低于任何后续正式版本。Canary 与 Stable 共用 Nix binary cache;Nix store path 按内容寻址,因此不会发生渠道覆盖。
维护边界
- APT 通过
InRelease/Release.gpg建立信任;RPM 同时签署软件包和repomd.xml。 - 私钥不进入 Git、R2、构建产物或日志。日常 OpenPGP 发布环境只持有签名子密钥。
- 版本化负载和普通索引先上传,各仓库的签名指针最后更新;公钥独立维护,清单在发布完成后更新。
- 可变入口使用
Cache-Control: no-cache;版本化软件包和哈希对象使用public, max-age=31536000, immutable。 - Nix cache 只接收从确定 Git revision 构建并由专用 Nix key 签名的 runtime closure、Cargo lockfile 依赖闭包和 pnpm dependency paths。
- Stable tag 发布后不移动。Canary Nix 使用显式
canary输出和提交身份,不替代默认 Stable 包。 - 每次发布后从公开域名验证签名、索引和实际软件下载,不只验证 R2 私有端点。
- OpenPGP 签名子密钥应在 2029-07-24 前完成轮换。
- pnpm 或 Cargo lockfile 变化时同步更新并校验 Flatpak 离线依赖清单。
- Flatpak 的哈希对象和静态增量长期缓存;summary、refs、描述文件和发布清单
使用
no-cache,并在对象上传完成后更新。