Ubuntu 22.04 安装 RetroShare 0.6.7 指南

在 Ubuntu 22.04 上实测安装 RetroShare 0.6.7:OBS 官方源与离线 deb 双路线、systemd 服务化、JSON API 账号初始化与逐项验证清单。

RetroShare即时通讯RetroShare2026/10/26

Ubuntu 22.04 安装 RetroShare 0.6.7 指南

目标:在 Ubuntu 22.04 服务器上完整安装 RetroShare 0.6.7 headless 服务,覆盖官方 OBS 源在线安装、离线 deb 安装两条路线,完成 systemd 服务化与 JSON API 账号初始化,并给出逐项验证清单。全部命令在 Ubuntu 22.04 LTS 实测通过。桌面(GUI)用户可先读《RetroShare 介绍与选型指南》了解形态差异。

一、环境信息

  • 操作系统:Ubuntu 22.04 LTS(x86_64)
  • 软件版本:RetroShare 0.6.7(OBS 仓库包 0.6.7-1;上游最新稳定版 v0.6.7.2 于 2023-11-30 发布)
  • 目标形态:headless 服务(retroshare-service)+ JSON API(9092),无图形界面
  • 数据目录:/var/lib/retroshare
  • 权限:root(全程 apt/systemctl 操作)
  • 网络环境:服务器可直连 download.opensuse.org(国内网络如慢,可先在能联网的机器下载 deb 包走离线安装,见第四节)
  • 安装耗时实测:在线安装约 1 分钟,systemd 服务化后进程内存占用 5.2MB

二、安装方案对比

RetroShare 官方为 Ubuntu/Debian 系提供 openSUSE OBS 构建仓库,没有单独的官方 PPA;安装路线对比如下:

方案适用场景优点缺点
OBS 在线源 + apt(推荐)可持续联网的服务器后续 apt upgrade 自动跟进安全更新首次需导入源与密钥
离线 deb + dpkg无外网/内网隔离环境完全离线可装升级需手动换包
源码编译需要上游 0.6.7.2 修复或定制版本最新依赖链长(Qt5/openssl/sqlite 等),非必要不选

💡 技术拓展:Debian 系软件包的安装方式不止 apt 一种,常见选项对比——apt install(走仓库,自动解析依赖、可升级,本文推荐)、dpkg -i(直装本地 deb,缺依赖时需 apt -f install 补齐)、gdebi(装本地 deb 并自动解析依赖,需另装工具)。RetroShare 的 deb 依赖 libssl3、libsqlite3、libgnome-keyring0 等系统库,走 apt 仓库安装时依赖自动补齐,离线 dpkg -i 时需保证基础库已在。本组件不依赖 Java/JVM,无需关心堆内存参数。

三、方案一:OBS 官方源在线安装(推荐)

3.1 配置 OBS 软件源

# 写入官方 OBS 源
echo 'deb https://download.opensuse.org/repositories/network:/retroshare/xUbuntu_22.04/ /' \
  > /etc/apt/sources.list.d/retroshare_OBS.list

# 导入官方签名密钥
curl -fsSL "https://download.opensuse.org/repositories/network:/retroshare/xUbuntu_22.04/Release.key" \
  | gpg --dearmor > /etc/apt/trusted.gpg.d/network_retroshare.gpg

实测密钥落盘确认:

# ls -la /etc/apt/trusted.gpg.d/network_retroshare.gpg
-rw-r--r-- 1 root root 1688 Oct 26 09:11 /etc/apt/trusted.gpg.d/network_retroshare.gpg

3.2 安装服务端包

服务器安装无头服务(桌面环境另装 retroshare-gui,见 3.4):

apt-get update
apt-get install -y retroshare-service

实测 apt-get update 对 OBS 源的回显(节选):

Hit:4 https://download.opensuse.org/repositories/network:/retroshare/xUbuntu_22.04  InRelease
Get:5 https://download.opensuse.org/repositories/network:/retroshare/xUbuntu_22.04  Packages [27.0 kB]

实测安装结果:

# dpkg -l | grep retroshare
ii  retroshare-common           0.6.7-1   amd64  Secure communication with friends
ii  retroshare-service          0.6.7-1   amd64  Secure communication with friends

3.3 版本核对

# 查看可安装/已装版本
apt-cache policy retroshare-service
# 查看核心库版本串
retroshare-service --help 2>&1 | grep -A2 version

实测回显:

retroshare-service:
  Installed: 0.6.7-1
  Candidate: 0.6.7-1
  Version table:
 *** 0.6.7-1 100
        100 /var/lib/dpkg/status
     0.6.6-1 500
        500 https://download.opensuse.org/repositories/network:/retroshare/xUbuntu_22.04  Packages
  RetroShare version: 0.6.7
  libretroshare version: 0.6.7---OBS

注意:OBS 仓库当前包为 0.6.7-1;上游 GitHub 的 v0.6.7.2(2023-11-30)未同步进该仓库。若必须用 0.6.7.2 需源码编译;一般场景 0.6.7-1 足够,本文按 0.6.7-1 展开。

3.4 桌面 GUI 包(可选)

apt-get install -y retroshare-gui

实测可安装性:

# apt-cache policy retroshare-gui
retroshare-gui:
  Installed: (none)
  Candidate: 0.6.7-1

retroshare-gui 是 Qt5 图形界面,需桌面/X11 环境;纯服务器装它会拖入大量 Qt 依赖,headless 场景不要安装。GUI 与 service 可共存于桌面机(同一账号目录不可同时打开)。

四、方案二:离线 deb 安装

适用于无外网服务器。先在一台能联网的 Ubuntu 22.04 机器上下载 deb 包(实测仓库 amd64 目录下 0.6.7-1 提供三个包:common、service、gui,无独立 nogui 包):

BASE="https://download.opensuse.org/repositories/network:/retroshare/xUbuntu_22.04/amd64"
wget -c "$BASE/retroshare-common_0.6.7-1_amd64.deb"
wget -c "$BASE/retroshare-service_0.6.7-1_amd64.deb"
# 桌面环境另下载:retroshare-gui_0.6.7-1_amd64.deb

把 deb 包传到目标服务器后安装:

dpkg -i retroshare-common_0.6.7-1_amd64.deb retroshare-service_0.6.7-1_amd64.deb
# 若提示缺依赖(如 libssl3、libgnome-keyring0),在有网的 apt 源可用时补齐:
apt-get -f install -y

dpkg -i 不解析在线依赖;apt-get -f install 会根据仓库补齐缺失的系统库。离线环境请提前把依赖包一并下载传入。

五、systemd 服务化

5.1 为什么需要自建 unit

RetroShare 的 deb 包不附带 systemd unit 文件,也不创建系统用户——安装后服务不会自启,需手工编写 unit。这是与常见服务包最大的差异点,也是最容易漏掉的一步。

5.2 编写 unit 文件

cat > /etc/systemd/system/retroshare-service.service <<'EOF'
[Unit]
Description=RetroShare headless service
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/retroshare-service -c /var/lib/retroshare -s -J 9092 -P 127.0.0.1
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

参数含义(完整参数表见《RetroShare 0.6.7 配置参数详解》):-c /var/lib/retroshare 指定账号数据根目录;-s 日志走 stderr(交由 journald 收集);-J 9092 开启 JSON API;-P 127.0.0.1 把 API 绑定在回环地址(对外只暴露 P2P 端口,管理面不外泄)。

5.3 启动与自启

systemctl daemon-reload
systemctl enable --now retroshare-service

实测启动与状态回显:

# systemctl is-active retroshare-service
active
# systemctl status retroshare-service --no-pager
● retroshare-service.service - RetroShare headless service
     Loaded: loaded (/etc/systemd/system/retroshare-service.service; enabled; preset: enabled)
     Active: active (running) since Mon 2026-10-26 11:55:39 UTC; 1h 37min ago
   Main PID: 1081 (retroshare-serv)
      Tasks: 28 (limit: 2932)
     Memory: 5.2M (peak: 10.5M)
        CPU: 1.058s
     CGroup: /system.slice/retroshare-service.service
             └─1081 /usr/bin/retroshare-service -c /var/lib/retroshare -s -J 9092 -P 127.0.0.1

内存常驻仅 5.2MB(峰值 10.5MB),最低配服务器也毫无压力。

六、初始化账号并验证

6.1 创建第一个账号(含 API 令牌)

首次启动后数据目录为空、无账号。通过免鉴权引导端点 createLocationV2 一次性创建账号并授权 API 令牌(演示账号 admin / q1w2e3r4):

curl -s -X POST http://127.0.0.1:9092/rsLoginHelper/createLocationV2 \
  -H "Content-Type: application/json" \
  -d '{"locationName":"node1","pgpName":"admin","password":"q1w2e3r4","apiUser":"admin","apiPass":"q1w2e3r4"}'

实测响应(返回节点 ID 与 PGP 身份 ID,errorMessage: Success 即成功):

{
    "locationId": "1bb68f6a9122a6066f8501f81d172920",
    "pgpId": "15A46E459B7F315A",
    "retval": {
        "errorNumber": 0,
        "errorCategory": "generic",
        "errorMessage": "Success"
    }
}

警告:createLocationV2 是唯一的免鉴权引导入口,节点创建成功后接口仍保持免鉴权,生产环境务必让 9092 只绑定 127.0.0.1(-P 参数),不要裸露公网。

6.2 逐项验证

# 1. 版本(免鉴权,GET/POST 均可)
curl -s http://127.0.0.1:9092/rsJsonApi/version
{
    "major": 0,
    "minor": 6,
    "mini": 7,
    "extra": "---OBS",
    "human": "0.6.7---OBS"
}

# 2. 账号列表(免鉴权)
curl -s -X POST http://127.0.0.1:9092/rsLoginHelper/getLocations \
  -H "Content-Type: application/json" -d '{}'
{
    "locations": [
        {
            "mLocationId": "1bb68f6a9122a6066f8501f81d172920",
            "mPgpId": "15A46E459B7F315A",
            "mLocationName": "node1",
            "mPgpName": "admin"
        }
    ]
}

# 3. 受保护接口(带 Basic 鉴权,等价于手工传 radix64(user:pass) 头)
curl -s -X POST http://127.0.0.1:9092/rsPeers/getFriendList \
  -H "Content-Type: application/json" \
  -u admin:q1w2e3r4 -d '{}'
{"sslIds":[],"retval":true}

6.3 数据目录结构

初始化完成后 /var/lib/retroshare 的实测结构:

/var/lib/retroshare/
├── default_cert_06.txt          # 默认账号的 location id(33 字节)
├── extensions6/                 # 插件目录
├── pgp/                         # PGP 身份密钥环
└── LOC06_<32位hex>/             # 每个账号位置一个目录
    ├── bdboot.txt               # DHT 引导数据
    ├── bdfilter.txt             # DHT 过滤规则
    ├── config/                  # 服务配置(banlist.cfg、general.cfg、peers.cfg、jsonapi.cfg 等)
    ├── Downloads/               # 下载完成目录
    ├── file_sharing/            # 共享目录元数据
    ├── gxs/                     # 论坛/频道等 GXS 分布式数据
    ├── keys/                    # SSL 节点证书与 PGP 公钥(user_cert.pem、user_pk.pem 等)
    └── lock                     # 实例锁(运行期间持有)

要点:所有可备份的东西都在 /var/lib/retroshare 一个目录里(含 PGP 私钥),整机迁移=停服务+拷目录;lock 由运行实例持有,不要手工删除运行中的锁。

七、安装验证清单

检查项命令预期
包已安装dpkg -l | grep retrosharecommon/service 均为 ii 0.6.7-1
服务在跑systemctl is-active retroshare-serviceactive
开机自启systemctl is-enabled retroshare-serviceenabled
API 存活curl -s http://127.0.0.1:9092/rsJsonApi/version返回 0.6.7---OBS JSON
账号已建curl -s -X POST -d '{}' http://127.0.0.1:9092/rsLoginHelper/getLocationslocations 数组非空
鉴权生效无 Authorization 头 POST /rsPeers/getFriendListHTTP 401
P2P 监听ss -tlnp | grep retroshare存在自动分配端口(如 1946)

八、常见安装问题

Q1:apt-get update 对 OBS 源报签名/404 错误? 最常见原因是只加了源没导密钥,或发行版代号写错(必须是 xUbuntu_22.04)。确认 /etc/apt/sources.list.d/retroshare_OBS.list 与 3.1 节一致,且 /etc/apt/trusted.gpg.d/network_retroshare.gpg 已生成。离线环境下可临时改用 deb [trusted=yes] ... 跳过签名校验(牺牲完整性校验,仅建议内网)。

Q2:装完包服务没有自动启动? 正常现象:deb 包不带 systemd unit、不建系统用户(见 5.1)。按第五节自建 unit 并 enable --now 即可。

Q3:retroshare-service -U list 列举账号时卡住不动? -U 选项与运行中的实例争抢账号目录锁(LOC06_*/lock),服务运行期间执行会被阻塞。先 systemctl stop retroshare-service,再执行 -U list,完毕后重新启动服务。

Q4:JSON API 返回 409? 当前账号尚未解锁登录(如用 -U 启动但未输入口令)。headless 下按 6.1 节首次创建账号即自动登录;密码登录场景走 /rsLoginHelper/attemptLogin。

Q5:装了 retroshare-gui 却起不来界面? GUI 需要 X11/Wayland 桌面会话,SSH 纯终端无法显示。服务器场景不要装 gui 包,统一走 JSON API 管理面。

Q6:想卸载干净?

systemctl disable --now retroshare-service
apt-get purge -y retroshare-service retroshare-common retroshare-gui
rm -rf /var/lib/retroshare /etc/systemd/system/retroshare-service.service
rm -f /etc/apt/sources.list.d/retroshare_OBS.list /etc/apt/trusted.gpg.d/network_retroshare.gpg

最后一条删除账号与密钥,执行前确认数据已不再需要。

九、参考链接