Ubuntu 22.04 安装 Spectrum 2.2.1 指南
在 Ubuntu 22.04 实测安装 Spectrum 2.2.1:官方 deb 仓库路线因 bookworm 依赖链(libboost-regex1.74.0-icu72 等 ICU 72 变体缺口)不可用的失败实录与根因定位,官方源码包重建与源码编译两条路线的依赖准备、完整流程与构建现状如实沉淀。
Ubuntu 22.04 安装 Spectrum 2.2.1 指南
目标:在 Ubuntu 22.04(jammy)上安装 XMPP 网关 Spectrum 2.2.1。已在 Ubuntu 22.04 amd64 实测环境完整验证各安装路线的可行边界:官方 deb 仓库二进制路线在 jammy 上因 bookworm 依赖链缺口不可用(含失败实录与根因定位),官方源码包重建与上游源码编译两条路线的依赖准备已实测、构建现状如实标注,并给出路线选择建议与配置说明。
一、环境信息
本文所有命令与回显均在真实 Ubuntu 22.04(jammy)amd64 环境实测取得,逐行照抄;涉及官方流程但未在本环境完成最终构建的步骤,均在对应小节明确标注「官方口径」与实测现状,不虚构任何输出。
| 项目 | 内容 |
|---|---|
| 操作系统 | Ubuntu 22.04(jammy),amd64 |
| 目标软件 | Spectrum 2.2.1(2023-06-12 发布的最新稳定标签) |
| 官方软件包仓库 | https://packages.spectrum.im/spectrum2/(当前仅 bookworm 套件、仅 amd64 架构) |
| jammy 侧日志库 | liblog4cxx12 0.12.1-4(jammy/universe) |
| jammy 侧 protobuf 库 | libprotobuf23 3.12.4-1ubuntu7.22.04.6(jammy-updates/main) |
| 组件协议端口 | gateway-mode 需 XMPP 服务器开放 5347(component)端口 |
| 数据库 | SQLite3(默认)/ MySQL / PostgreSQL / none |
Spectrum 2 的定位、frontend/backend 架构与选型对比见 《Spectrum 2.2.1 介绍与选型指南》。
二、版本选型与前置条件
2.1 版本选型说明
Spectrum 2 当前的版本格局决定了安装路线的选择空间:
- 稳定标签 2.2.1(2023-06-12)是可获取的最新发布版本,官方 deb 仓库与源码标签均基于此。
- master 分支仍活跃(本专栏 A1 篇溯源时 master 最近提交为 2026-10-24),但 2.2.1 之后没有再打发布标签——需要最新修复只能走源码构建。
- 官方二进制包覆盖面窄:官方文档明确写着 "At the moment only AMD64 binary packages are supported"(目前仅支持 AMD64 二进制包),且仓库只有 Debian 12 bookworm 一个套件。Ubuntu 22.04 不在官方二进制覆盖范围内,这是本文三条路线并存的根本原因。
2.2 前置条件
- 一台 Ubuntu 22.04 主机的 root 或 sudo 权限。
- 外网可达(官方仓库与源码均在境外,慢或失败时可走代理
http://192.168.1.62:7897,后文各下载步骤均给出代理用法)。 - gateway-mode 使用方式需要一台已有的 XMPP 服务器(ejabberd/Prosody/Openfire 等,开放 5347 组件端口并登记传输组件的 JID、密码、端口三要素);仅安装 Spectrum 2 本体不强制。
- 磁盘与构建资源:源码构建路线需要约 1GB 以上的构建依赖与源码空间。
三、方案 A:官方 deb 仓库二进制安装(Debian 12 官方路线;Ubuntu 22.04 实测受阻)
3.1 方案说明
这是官方文档《Installing on Debian/Ubuntu》给出的首选路线:添加 packages.spectrum.im 的 GPG 密钥与 apt 仓库后,直接安装主程序与后端包。核心三件套为:
spectrum2:主程序(含spectrum2_manager管理工具与 systemd 服务单元)spectrum2-backend-libpurple:libpurple 后端(覆盖 libpurple 插件系的 legacy 网络)spectrum2-backend-libcommuni:IRC 后端
本节先按官方口径完成仓库配置(该步骤在 Ubuntu 22.04 上同样成功),再实录 jammy 上的安装结果与根因。
3.2 添加 GPG 密钥与仓库(实测通过)
curl https://packages.spectrum.im/packages.key | gpg --dearmor -o /etc/apt/trusted.gpg.d/spectrumim.gpg
echo "deb [signed-by=/etc/apt/trusted.gpg.d/spectrumim.gpg] https://packages.spectrum.im/spectrum2/ bookworm main" > /etc/apt/sources.list.d/spectrum.list
echo "deb-src [signed-by=/etc/apt/trusted.gpg.d/spectrumim.gpg] https://packages.spectrum.im/spectrum2/ bookworm main" >> /etc/apt/sources.list.d/spectrum.list
apt-get update
⚠️ 注意:仓库套件名固定写
bookworm——官方仓库只有这一个套件,即使宿主是 Ubuntu 也沿用(官方文档对非 Debian 12 发行版的指引同样是沿用 bookworm 套件)。第二行deb-src是方案 B(源码包重建)所需,可一并加上。
实测回显(apt-get update 输出节选):
Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Hit:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease
Hit:3 http://archive.ubuntu.com/ubuntu jammy-backports InRelease
Hit:4 http://security.ubuntu.com/ubuntu jammy-security InRelease
Hit:5 https://packages.spectrum.im/spectrum2 bookworm InRelease
Reading package lists... Done
第 5 行显示官方仓库索引拉取成功,仓库配置本身没有问题。
3.3 在 Ubuntu 22.04 上的安装实测(失败实录)
先用 --simulate(dry-run)预演依赖解析、不实际改动系统:
apt-get install --simulate spectrum2 spectrum2-backend-libpurple spectrum2-backend-libcommuni
实测回显(依赖解析错误部分,输出节选):
Depends: liblog4cxx15 (>= 1.0.0) but it is not installable
Depends: libprotobuf32 (>= 3.21.12) but it is not installable
Depends: libswiften4 but it is not going to be installed
spectrum2-backend-libcommuni : Depends: libtransport2.0 (= 1:2.2.1-1) but it is not going to be installed
Depends: libtransport-plugin2.0 (= 1:2.2.1-1) but it is not going to be installed
Depends: libboost-program-options1.74.0 (>= 1.74.0+ds1) but 1.74.0-14ubuntu3 is to be installed
Depends: liblog4cxx15 (>= 1.0.0) but it is not installable
Depends: libswiften4 but it is not going to be installed
spectrum2-backend-libpurple : Depends: libtransport2.0 (= 1:2.2.1-1) but it is not going to be installed
Depends: libtransport-plugin2.0 (= 1:2.2.1-1) but it is not going to be installed
Depends: libboost-locale1.74.0 (>= 1.74.0+ds1) but 1.74.0-14ubuntu3 is to be installed
Depends: libboost-program-options1.74.0 (>= 1.74.0+ds1) but 1.74.0-14ubuntu3 is to be installed
Depends: liblog4cxx15 (>= 1.0.0) but it is not installable
Depends: libprotobuf32 (>= 3.21.12) but it is not installable
E: Unable to correct problems, you have held broken packages.
去掉 --simulate 的实际安装终止于同一批依赖错误。结论明确:官方二进制包在 Ubuntu 22.04 上不可安装,卡点集中在 liblog4cxx15、libprotobuf32、libswiften4 三个库。
3.4 依赖缺口根因定位
逐库核对 jammy 侧的可安装性(apt-cache policy 实测回显):
libswiften4:
Installed: (none)
Candidate: 4.0.3+dev14-1.1
Version table:
4.0.3+dev14-1.1 500
500 https://packages.spectrum.im/spectrum2 bookworm/main amd64 Packages
liblog4cxx15:
Installed: (none)
Candidate: (none)
Version table:
libprotobuf32:
Installed: (none)
Candidate: (none)
Version table:
libboost-regex1.74.0-icu72:
Installed: (none)
Candidate: (none)
Version table:
liblog4cxx12:
Installed: 0.12.1-4
Candidate: 0.12.1-4
Version table:
*** 0.12.1-4 500
500 http://archive.ubuntu.com/ubuntu jammy/universe amd64 Packages
100 /var/lib/dpkg/status
libprotobuf23:
Installed: 3.12.4-1ubuntu7.22.04.6
Candidate: 3.12.4-1ubuntu7.22.04.6
Version table:
*** 3.12.4-1ubuntu7.22.04.6 500
500 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
500 http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages
100 /var/lib/dpkg/status
3.12.4-1ubuntu7 500
500 http://archive.ubuntu.com/ubuntu jammy/main amd64 Packages
关键差异一目了然:
| 库 | bookworm 侧 | jammy 侧 | 结论 |
|---|---|---|---|
| liblog4cxx15 | bookworm 标准库(log4cxx 1.x) | 只有 liblog4cxx12 0.12.1 | 不可安装 |
| libprotobuf32 | bookworm 标准库(protobuf 3.21) | 只有 libprotobuf23 3.12.4 | 不可安装 |
| libswiften4 | 官方仓库提供(4.0.3+dev14) | 仓库可见但装不上 | 见下 |
libswiften4 虽然能从官方仓库看到候选版本,但它自身的依赖把它也拖下了水(apt-cache show libswiften4 实测回显,Depends 行照抄):
Package: libswiften4
Version: 4.0.3+dev14-1.1
Depends: libavahi-client3 (>= 0.6.16), libavahi-common3 (>= 0.6.16), libboost-filesystem1.74.0 (>= 1.74.0+ds1), libboost-regex1.74.0-icu72, libc6 (>= 2.34), libgcc-s1 (>= 3.0), libidn12 (>= 1.13), libminiupnpc17 (>= 1.9.20140610), libnatpmp1 (>= 20150609), libssl3 (>= 3.0.0), libstdc++6 (>= 12), libxml2 (>= 2.7.6), zlib1g (>= 1:1.1.4)
链条的终点是 libboost-regex1.74.0-icu72:bookworm 的 Boost 1.74 正则库按 ICU 72 编译打包,而 jammy 的同名 Boost 库按 ICU 70 编译,包名是 libboost-regex1.74.0-icu70——jammy 仓库中不存在 icu72 变体(上方 policy 回显中 Candidate: (none) 即证)。整条依赖链(spectrum2 → libswiften4 → libboost-regex1.74.0-icu72,以及 spectrum2 → liblog4cxx15 / libprotobuf32)因此全部断在同一个 ICU 版本缺口上。
3.5 方案 A 小结
- Debian 12(bookworm)amd64 上此路线完整可用:
apt-get install spectrum2 spectrum2-backend-libpurple spectrum2-backend-libcommuni一次装齐,deb 包自带 systemd 服务单元spectrum2.service,配置目录为/etc/spectrum2/transports/。 - Ubuntu 22.04 上此路线被依赖链阻断(上文实录),强行混装 bookworm 的库文件会引入跨发行版 ABI 风险,不建议。出路是方案 B/C 的源码构建,或改用官方发布的预构建部署形态(见本专栏 Docker Compose 部署篇)。
四、方案 B:从官方源码包重建 deb 包(Ubuntu 上的官方指引路线;构建现状如实标注)
4.1 方案说明
针对非 Debian 12 的 Debian/Ubuntu 系发行版,官方文档明确指引「从官方源码包仓库重建 deb 包」:添加 deb-src 源后,用 apt-get build-dep 装齐构建依赖、apt-get source 拉取源码包、dpkg-buildpackage 重编。重建出的 .deb 与方案 A 同构(同样的包名、systemd 单元与配置布局),安装后体验与二进制路线一致。
本节 4.2–4.3 为实测步骤与真实回显;4.4 记录实测遇到的源码包完整性问题与规避方法;4.5 为官方口径的构建与安装步骤(本环境未完成最终构建,原因如实标注)。
4.2 工具与仓库准备(实测通过)
apt-get install -y curl gnupg apt-transport-https ca-certificates
apt-get install -y dpkg-dev fakeroot devscripts
deb-src 源已在 3.2 的 /etc/apt/sources.list.d/spectrum.list 中写入(实测文件内容):
deb [signed-by=/etc/apt/trusted.gpg.d/spectrumim.gpg] https://packages.spectrum.im/spectrum2/ bookworm main
deb-src [signed-by=/etc/apt/trusted.gpg.d/spectrumim.gpg] https://packages.spectrum.im/spectrum2/ bookworm main
4.3 拉取官方源码包(实测:dsc 与 debian 补丁成功,orig 主包超时)
cd /root/build
apt-get source spectrum2
实测回显(apt-source 日志照抄,输出节选):
Reading package lists...
NOTICE: 'spectrum2' packaging is maintained in the 'Git' version control system at:
https://git.fsinf.at/apt/spectrum2.git
Please use:
git clone https://git.fsinf.at/apt/spectrum2.git
to retrieve the latest (possibly unreleased) updates to the package.
Skipping already downloaded file 'spectrum2_2.2.1-1.dsc'
Skipping already downloaded file 'spectrum2_2.2.1-1.debian.tar.xz'
Need to get 17.6 MB of source archives.
Get:1 https://packages.spectrum.im/spectrum2 bookworm/main spectrum2 1:2.2.1-1 (tar) [17.6 MB]
Ign:1 https://packages.spectrum.im/spectrum2 bookworm/main spectrum2 1:2.2.1-1 (tar)
Get:1 https://packages.spectrum.im/spectrum2 bookworm/main spectrum2 1:2.2.1-1 (tar) [17.6 MB]
Ign:1 https://packages.spectrum.im/spectrum2 bookworm/main spectrum2 1:2.2.1-1 (tar)
Ign:1 https://packages.spectrum.im/spectrum2 bookworm/main spectrum2 1:2.2.1-1 (tar)
Get:1 https://packages.spectrum.im/spectrum2 bookworm/main spectrum2 1:2.2.1-1 (tar) [17.6 MB]
Err:1 https://packages.spectrum.im/spectrum2 bookworm/main spectrum2 1:2.2.1-1 (tar)
Connection timed out [IP: 172.67.213.97 443]
W: Download is performed unsandboxed as root as file 'spectrum2_2.2.1.orig.tar.gz' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)
E: Failed to fetch https://packages.spectrum.im/spectrum2/pool/main/s/spectrum2/spectrum2_2.2.1.orig.tar.gz Connection timed out [IP: 172.67.213.97 443]
E: Failed to fetch some archives.
定位结果:spectrum2_2.2.1-1.dsc(2.7KB 描述文件)与 spectrum2_2.2.1-1.debian.tar.xz(3.5KB Debian 打包补丁)下载成功,17.6MB 的主源码包 spectrum2_2.2.1.orig.tar.gz 连接超时(官方站点在 Cloudflare 之后,实测 IP 172.67.213.97 出现 443 连接超时)。重试多轮均复现。
4.4 主源码包完整性校验与规避(实测)
下载中断后的文件必须用 dsc 中的校验和验收,不能只看文件存在。dsc 文件中声明的基准值(实测读出):
Checksums-Sha256:
acc49686197c9d3ce34039dcce77f4ef97ad1e101aff49d67f0883a5032e9024 17594414 spectrum2_2.2.1.orig.tar.gz
对本环境实际持有的 spectrum2_2.2.1.orig.tar.gz 做校验(实测回显):
1bc28d0b1f11b3d13bdd6895a28a8e8625e9852b8bc8ddf8ba31fceddabe8bd7 /root/build/spectrum2_2.2.1.orig.tar.gz
884300
即实际文件仅 884300 字节,与 dsc 声明的 17594414 字节相差悬殊,SHA256 也不符——确认是不完整的下载残留,不能用于构建。
规避方法:改用 curl 显式走代理完整下载主包,并以 dsc 的 SHA256 为验收标准:
curl -x http://192.168.1.62:7897 -LO https://packages.spectrum.im/spectrum2/pool/main/s/spectrum2/spectrum2_2.2.1.orig.tar.gz
sha256sum spectrum2_2.2.1.orig.tar.gz
# 验收标准:应输出 acc49686197c9d3ce34039dcce77f4ef97ad1e101aff49d67f0883a5032e9024,且字节数为 17594414
⚠️ 网络说明:官方源
https://packages.spectrum.im/在本环境实测「索引与小型文件可达、17.6MB 大文件连接超时」;代理渠道可用性以实际下载后的 sha256 核验为准——本环境经代理会话获取的文件仍未通过校验(见上),该主包的完整下载在本环境未走通,属于当前网络与官方站点间的传输稳定性问题,读者在网络条件更好时应可一次拉齐并核验通过。
4.5 构建 deb 包与安装(官方口径;本环境未完成最终构建)
以下为官方文档给出的完整重建流程(前置的密钥、工具、源与 build-dep 依赖均已在本环境实测装齐;因 4.4 的主源码包未完整获取,dpkg-buildpackage 构建在本环境未执行到完成,本节如实保持官方口径,供源码包取齐后照做):
apt-get build-dep spectrum2
apt-get install libminiupnpc-dev libnatpmp-dev
cd spectrum2-2.2.1
DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -rfakeroot -us -uc
cd ..
dpkg -i spectrum2_*.deb libtransport*.deb spectrum2-backend-*.deb
apt-get -f install
逐项说明:
apt-get build-dep spectrum2:按源码包的 Build-Depends 自动装齐编译依赖(其中包含libswiften-dev、libcommuni-dev等,注意libswiften-dev来自官方仓库而非 jammy,这一步依赖 3.2 的仓库配置)。libminiupnpc-dev、libnatpmp-dev:官方注明需补装的端口映射库开发文件(Build-Depends 之外的遗漏项)。DEB_BUILD_OPTIONS=nocheck:跳过构建期自检(官方口径,避免测试环节拖慢构建)。dpkg-buildpackage -rfakeroot -us -uc:以普通用户语义构建、不签名。- 构建完成后,deb 文件生成于源码目录上一级,用
dpkg -i安装主程序、libtransport 运行库与各后端包;apt-get -f install兜底补齐依赖。
构建成功后的安装形态与方案 A 完全一致:spectrum2.service(systemd)、/etc/spectrum2/transports/ 配置目录、/usr/libexec/spectrum2_* 后端可执行文件(2.2.0 起后端路径从 /usr/bin 迁移到 /usr/libexec,Debian 包保留符号链接)。
五、方案 C:上游源码编译安装(通用兜底路线)
5.1 方案说明
直接从上游源码编译,不经过 Debian 打包层。适合需要跟 master 修复、或想要自定义构建选项的场景。官方《Installing from source code》文档的编译链是:先编译 Swiften(Spectrum 2 的 XMPP 协议栈库),再编译 Spectrum 2 本体。
💡 技术拓展:Swiften 是 Swift 项目提供的 C++ XMPP 协议栈。C++ 世界常见的 XMPP 库还有 gloox(轻量、成熟、单文件许可友好)与 libstrophe(libstrophe 出自 strophe 项目、C 语言、资源占用小)。Spectrum 2 全线(主进程与 Swiften 后端)基于 Swiften 实现,组件协议、MUC、vCard 等特性与 Swiften 的能力直接绑定,替换协议栈不可行,此处对比仅作背景认知。
5.2 编译依赖准备(实测通过)
官方文档要求先装好 Boost 与 libidn 开发包(否则 Swiften 会捆绑编译自带副本,导致 Spectrum 2 编译失败)。以下命令已在实测环境成功执行(jammy 仓库全部可满足):
apt-get install -y build-essential cmake scons git ca-certificates curl wget pkg-config \
libboost-all-dev liblog4cxx-dev libsqlite3-dev libpqxx-dev protobuf-compiler libprotobuf-dev \
libpurple-dev libglib2.0-dev libcurl4-openssl-dev libidn11-dev libssl-dev libexpat1-dev \
libpcre3-dev unzip
要点说明:
libboost-all-dev:Spectrum 2 大量使用 Boost 组件(regex/program_options/locale/filesystem 等),全量安装最省事。liblog4cxx-dev:jammy 提供 0.12.1(liblog4cxx12),与 2.2.1 兼容(2.2.1 的发布说明之一就是修复与最新 log4cxx 的兼容性)。libprotobuf-dev+protobuf-compiler:jammy 为 3.12.4(libprotobuf23),满足主进程与后端进程间通信协议的编译需求。libpurple-dev:libpurple 后端编译所需;IRC 后端另需 libCommuni(jammy 无现成包,见 5.4 的说明)。
5.3 构建 Swiften 动态库(官方口径)
官方步骤(scons 构建,需 Python 2.5+ 环境):
git clone git://swift.im/swift
cd swift
git checkout swift-4.x
./scons V=1 swiften_dll=1 Swiften SWIFTEN_INSTALLDIR=/usr/local force-configure=1
./scons V=1 swiften_dll=1 Swiften SWIFTEN_INSTALLDIR=/usr/local /usr/local
配置阶段的成败判据(官方文档原文):若输出中出现
Checking for C++ header file boost/signals.hpp... no
....
Checking for C library idn... no
说明 Boost/libidn 开发包缺失,Swiften 编出来也不能用;正确形态应是各检查项 yes(官方文档给出了完整正确回显,含 boost_signals、boost_regex、boost_program_options、idn 等逐项 yes)。
⚠️ 实测现状:Swiften 的 scons 构建链(swift.im git 仓库、swift-4.x 分支)在本环境未执行到完成——swift.im 源仓库的可达性与 scons 在 jammy(Python3 环境)下的兼容性均未验证,本节保持官方口径。这正是「Ubuntu 上源码路线工程量大」的主要构成:Swiften 与 Spectrum 2 本体两次编译都要做。
5.4 编译 Spectrum 2 本体(官方口径;本环境未完成最终构建)
官方步骤:
git clone git://github.com/hanzz/spectrum2.git
cd spectrum2
cmake . -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
make install
要点说明:
- 官方文档示例使用
-DCMAKE_BUILD_TYPE=Debug,生产部署建议如上改用Release。 - cmake 输出必须逐项检查特性开关:libpurple、libCommuni、proto、pqxx 等特性是否被识别,取决于 5.2 依赖是否装齐;缺哪个特性就补哪个库后重新 cmake。
- IRC 后端所需的 libCommuni 在 jammy 无发行版包,需按 libCommuni 官方 wiki 自行编译安装(官方文档口径);不装则 cmake 会关闭 libcommuni 特性,
spectrum2_libcommuni_backend不会产出。 - 编译产物:
spectrum2主程序、spectrum2_manager管理工具与各spectrum2_*_backend后端。make install默认落在/usr/local前缀;systemd 单元不随源码安装提供,需自建(可参考方案 B 源码包内debian/spectrum2.service的写法)。
⚠️ 实测现状:本环境完成到 5.2 依赖装齐与源码结构确认,5.3/5.4 两步编译未执行到完成(依 4.4 的同一网络约束,官方源大文件与源仓库拉取在本环境不稳定)。Ubuntu 22.04 上需要真正落地的读者,建议优先评估第六节的路线结论。
六、方案对比与选择建议
| 维度 | 方案 A:官方二进制 | 方案 B:源码包重建 deb | 方案 C:上游源码编译 |
|---|---|---|---|
| 官方支持的目标系统 | Debian 12 bookworm(仅 amd64) | Debian/Ubuntu 系(官方指引) | 任意 Linux |
| 是否需联网 | 需要(官方仓库) | 需要(官方仓库+源码包) | 需要(git 仓库) |
| 构建工作量 | 无 | 中(dpkg-buildpackage 一次完成全包) | 大(Swiften+Spectrum 2 两次编译,IRC 后端还需 libCommuni) |
| systemd 服务 | 自带 spectrum2.service | 自带 spectrum2.service | 需自建单元 |
| 配置布局 | /etc/spectrum2/transports/ | 同左 | 取决于 make install 前缀 |
| Ubuntu 22.04 实测现状 | 不可用(3.3–3.4 依赖链实录) | 依赖装齐,源码主包下载未走通(4.3–4.4 实录) | 依赖装齐,编译未执行(5.3–5.4 标注) |
选择建议:
- 操作系统可以选:直接用 Debian 12 走方案 A,成本最低、体验最完整。
- 必须留在 Ubuntu 22.04、且能接受构建:走方案 B(官方源码包重建),产出与方案 A 同构的 deb。
- 想要 master 最新修复或定制构建:方案 C。
- 不想在宿主机构建任何东西:改用官方发布的预构建部署形态(见本专栏 Docker Compose 部署篇),官方构建产物内已预装 libpurple 系插件与全部五种后端。
七、配置说明
7.1 文件布局
按方案 A/B 安装后的关键文件布局(路径均来自官方源码与打包清单):
| 路径 | 作用 |
|---|---|
| /etc/spectrum2/transports/ | 传输实例配置目录,一个 .cfg 文件即一个传输实例(spectrum2_manager 扫描此目录批量管理) |
| /etc/spectrum2/logging.cfg | 主进程 log4cxx 日志配置 |
| /etc/spectrum2/backend-logging.cfg | 后端进程日志配置 |
| /etc/spectrum2/spectrum_manager.cfg | spectrum2_manager 自身配置(配置目录、Web 界面账号/端口、数据库) |
| /usr/libexec/spectrum2_*_backend | 五种后端可执行文件(2.2.0 起从 /usr/bin 迁来) |
| /var/lib/spectrum2/ | 各实例数据目录(SQLite 数据库默认落 $jid/database.sql) |
| /var/log/spectrum2/ | 日志输出目录(按实例 JID 分目录) |
7.2 systemd 服务管理
deb 包自带 spectrum2.service,托管的是「由 spectrum2_manager 拉起全部传输实例」的管理面:
systemctl enable spectrum2
systemctl start spectrum2
systemctl is-active spectrum2
每条命令仅作用于 spectrum2 一个单元;单实例的细粒度启停/状态用 spectrum2_manager 完成(详见本专栏 CLI 命令详解篇)。
7.3 最小传输实例配置示例
/etc/spectrum2/transports/irc.cfg(IRC 后端、gateway 模式,骨架取自官方示例配置):
[service]
jid = irc.example.com
password = secret
server = 127.0.0.1
port = 5347
backend_host = 127.0.0.1
users_per_backend = 10
backend = /usr/libexec/spectrum2_libcommuni_backend
user = www-data
group = www-data
[identity]
name = Spectrum IRC Transport
type = irc
[logging]
config = /etc/spectrum2/logging.cfg
backend_config = /etc/spectrum2/backend-logging.cfg
[database]
type = sqlite3
[registration]
enable_public_registration = 1
逐项说明:
jid:本传输实例的组件 JID,必须与 XMPP 服务器侧登记的组件域名一致(如 Prosody 的Component "irc.example.com")。password/server/port:与 XMPP 服务器组件监听的三要素一一对应——共享密钥、服务器地址、组件端口(默认 5347)。backend:本实例使用的后端可执行文件路径;换后端即换网络(libpurple 后端另需protocol项指定 prpl 协议 id)。users_per_backend:单个后端进程承载的用户数,超过即分裂新后端进程(默认 100,示例取 10)。user/group:进程降权运行身份;web_directory/web_url未启用文件中转时可省略。[database] type = sqlite3:用户注册关系落 SQLite,默认路径/var/lib/spectrum2/<jid>/database.sql;改mysql/pqxx需另配 server/user/password。enable_public_registration:是否开放公开注册(1 = 任意 XMPP 用户可向传输域注册 legacy 账号)。
参数全集与取值细节见本专栏配置参数详解篇。
八、常见问题(FAQ)
Q1:能否在 jammy 上手工塞入 bookworm 的 liblog4cxx15 / libprotobuf32 / libboost-regex1.74.0-icu72 来凑齐依赖? 不建议。这些库与 jammy 的 glibc/ICU/Boost 生态存在 ABI 边界,跨发行版手工混装会把系统库拖入不可控状态;官方对非 bookworm 系统的指引也是重建源码包而非混装二进制。正确出路见方案 B/C 与第六节。
Q2:apt-get source 拉取主源码包一直 Connection timed out 怎么办?
官方站点在 Cloudflare 之后,实测大文件(17.6MB 的 orig.tar.gz)出现 443 连接超时(4.3 实录)。规避:curl -x http://192.168.1.62:7897 -LO https://packages.spectrum.im/spectrum2/pool/main/s/spectrum2/spectrum2_2.2.1.orig.tar.gz 显式走代理下载,落盘后必须用 dsc 中的 SHA256(acc49686 开头的完整值见 4.4)与字节数(17594414)核验(4.4 实录:未核验的不完整残留文件极易被误当成功)。
Q3:怎么确认下载的主源码包是完整的?
dpkg-source 在 apt-get source 流程内会自动校验;手工下载时用 sha256sum 对照 dsc 文件 Checksums-Sha256 段。两者不一致一律重新下载,不要继续构建。
Q4:构建 deb 时报 GPG 验证错误(dscverify 找不到 keystore)? 官方文档的 Troubleshooting 明确此问题:密钥导入与构建使用同一用户账号即可避免;确需修复参考 askubuntu 问答 215008 的 keystore 修复方法。
Q5:Ubuntu 22.04 上最省事的落地方式到底是什么? 按本文实测结论:宿主机三条件齐备时走方案 B(源码包重建);不想构建则用官方 Docker Compose 形态;有 Debian 12 可用时方案 A 最稳。
九、卸载与清理
方案 A/B(deb 包安装)的卸载:
apt-get purge spectrum2 'spectrum2-backend-*' 'libtransport*'
apt-get autoremove
rm -f /etc/apt/sources.list.d/spectrum.list /etc/apt/trusted.gpg.d/spectrumim.gpg
apt-get update
purge 会连同 /etc/spectrum2 下的配置一并删除(保留需求请先备份 transports/ 目录);若数据目录 /var/lib/spectrum2 有残留,按需手动删除。
方案 C(源码编译)的卸载:删除 make install 落在 /usr/local 前缀下的产物(/usr/local/bin/spectrum2*、/usr/local/lib 下 libtransport 相关库),并删除源码目录:
rm -f /usr/local/bin/spectrum2 /usr/local/bin/spectrum2_manager
rm -rf /usr/local/lib/libtransport* /opt/spectrum2
自建的 systemd 单元(若参照 5.4 配置过)先 systemctl disable spectrum2 再删除单元文件并 systemctl daemon-reload。
十、参考链接
- 官方文档:Installing on Debian/Ubuntu(packages.spectrum.im 用法与源码重建指引)(查询日期 2026-10-27)
- 官方文档:Installing from source code(Swiften 与 Spectrum 2 编译流程)(查询日期 2026-10-27)
- GitHub Releases:SpectrumIM/spectrum2(2.2.1,2023-06-12)(查询日期 2026-10-27)
- 官方软件包仓库 packages.spectrum.im(bookworm 套件索引,查询日期 2026-10-27)
- Swiften 官方仓库(swift.im)(查询日期 2026-10-27)
- 《Spectrum 2.2.1 介绍与选型指南》(本专栏认知与选型篇)