Ubuntu 22.04 安装 Spectrum 2.2.1 指南

在 Ubuntu 22.04 实测安装 Spectrum 2.2.1:官方 deb 仓库路线因 bookworm 依赖链(libboost-regex1.74.0-icu72 等 ICU 72 变体缺口)不可用的失败实录与根因定位,官方源码包重建与源码编译两条路线的依赖准备、完整流程与构建现状如实沉淀。

Spectrum 2XMPPJabber/XMPP即时通讯Spectrum 22026/10/27

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 前置条件

  1. 一台 Ubuntu 22.04 主机的 root 或 sudo 权限。
  2. 外网可达(官方仓库与源码均在境外,慢或失败时可走代理 http://192.168.1.62:7897,后文各下载步骤均给出代理用法)。
  3. gateway-mode 使用方式需要一台已有的 XMPP 服务器(ejabberd/Prosody/Openfire 等,开放 5347 组件端口并登记传输组件的 JID、密码、端口三要素);仅安装 Spectrum 2 本体不强制。
  4. 磁盘与构建资源:源码构建路线需要约 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 侧结论
liblog4cxx15bookworm 标准库(log4cxx 1.x)只有 liblog4cxx12 0.12.1不可安装
libprotobuf32bookworm 标准库(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 标注)

选择建议:

  1. 操作系统可以选:直接用 Debian 12 走方案 A,成本最低、体验最完整。
  2. 必须留在 Ubuntu 22.04、且能接受构建:走方案 B(官方源码包重建),产出与方案 A 同构的 deb。
  3. 想要 master 最新修复或定制构建:方案 C。
  4. 不想在宿主机构建任何东西:改用官方发布的预构建部署形态(见本专栏 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.cfgspectrum2_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。

十、参考链接

  1. 官方文档:Installing on Debian/Ubuntu(packages.spectrum.im 用法与源码重建指引)(查询日期 2026-10-27)
  2. 官方文档:Installing from source code(Swiften 与 Spectrum 2 编译流程)(查询日期 2026-10-27)
  3. GitHub Releases:SpectrumIM/spectrum2(2.2.1,2023-06-12)(查询日期 2026-10-27)
  4. 官方软件包仓库 packages.spectrum.im(bookworm 套件索引,查询日期 2026-10-27)
  5. Swiften 官方仓库(swift.im)(查询日期 2026-10-27)
  6. 《Spectrum 2.2.1 介绍与选型指南》(本专栏认知与选型篇)