Ubuntu 22.04 安装 RetroShare 0.6.7 指南
在 Ubuntu 22.04 上实测安装 RetroShare 0.6.7:OBS 官方源与离线 deb 双路线、systemd 服务化、JSON API 账号初始化与逐项验证清单。
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 retroshare | common/service 均为 ii 0.6.7-1 |
| 服务在跑 | systemctl is-active retroshare-service | active |
| 开机自启 | systemctl is-enabled retroshare-service | enabled |
| 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/getLocations | locations 数组非空 |
| 鉴权生效 | 无 Authorization 头 POST /rsPeers/getFriendList | HTTP 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
最后一条删除账号与密钥,执行前确认数据已不再需要。
九、参考链接
- 组件总览与选型背景:《RetroShare 介绍与选型指南》
- 官方下载页(OBS 源索引):https://retroshare.cc/downloads.html
- openSUSE OBS 仓库:https://download.opensuse.org/repositories/network:/retroshare/
- GitHub 仓库:https://github.com/RetroShare/RetroShare