在服务器上运行 Briar Mailbox

Briar Mailbox 是 Briar messenger的配套应用,它能让你在 Briar 离线时接收来自联系人的加密消息。当 Briar 重新上线时,它会自动从你的邮箱中同步这些消息。

同样地,你也可以向当前离线的联系人发送加密消息。这些消息会被安全存储,并在对方上线时自动送达。

设置 Mailbox 非常简单:只需在一台备用的 Android 设备上安装 Mailbox 应用,通过扫描二维码将其与你的 Briar 账户关联,然后确保这台设备保持连接电源和 Wi-Fi 即可。

然而,你可能希望这个服务能更加稳定,毕竟一个空闲的 Android 设备在一个家用的网络环境和电源保障的条件下,是有可能下线的。好在,你可以通过 Briar Mailbox 的源代码构建程序包,使其可以在 Linux(例如 Debian、Ubuntu)上运行。

本文介绍如何构建 Brair Mailbox 的 x86 cli 程序,并以 Debian 系统为例说明如何运行一个自启动服务。

准备工作

  1. 本地计算机:安装 docker、git
  2. 远程服务器:确保已安装 java runtime,例如 openjdk-11-jre

本地构建

为了确保构建环境有一切所需的库文件和配置,我们直接使用 Briar 用于构建应用的 docker 镜像:

1
2
3
4
git clone https://code.briarproject.org/briar/ci-image-android.git ~/ci-image-android
cd ~/ci-image-android
docker build -t briar-mailbox-builder .
docker run -it --name briar-mailbox-builder briar-mailbox-builder /bin/bash

进入到容器中后,在容器的 shell 内:

1
2
3
git clone https://code.briarproject.org/briar/briar-mailbox.git ~/briar-mailbox
cd ~/briar-mailbox
./gradlew x86LinuxJar

接着,开启另一个本地终端,并复制容器内的文件到外面来:

1
docker cp briar-mailbox-builder:/root/briar-mailbox/mailbox-cli/build/libs/mailbox-cli-linux-x86_64.jar ./mailbox-cli.jar

然后可将 mailbox-cli.jar 上传到服务器上了。

例如,以用户名为 sammy,主机地址为 remote 为例:

1
2
ssh sammy@remote -t 'mkdir -p ~/mailbox-cli'
rsync ./mailbox-cli.jar sammy@remote:mailbox-cli

服务器配置

确保用户 sammy 的服务可以后台运行:

1
sudo loginctl enable-linger sammy

然后,创建一个 systemd service 文件:

1
2
mkdir -p ~/.config/systemd/user
vi ~/.config/systemd/user/mailbox-cli.service

输入以下内容,注意替换其中的 sammy

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=Briar Mailbox Service
After=default.target

[Service]
WorkingDirectory=/home/sammy/mailbox-cli
ExecStart=/usr/bin/java -jar mailbox-cli.jar
Restart=on-abort

[Install]
WantedBy=default.target

然后先手动启动一次服务:

1
java -jar ~/mailbox-cli/mailbox-cli.jar

在输出中找到二维码(用于连接手机客户端),或者找到 mailbox 的链接(用于连接电脑客户端)。然后在手机或电脑的 Briar 应用程序中配对。配对成功后,可以 Ctrl + C 停止刚刚手动运行的服务。

接着,设置自启动:

1
systemctl --user enable --now mailbox-cli

可检查服务状态:

1
sysetmctl --user status mailbox-cli

至此,服务端已配置完毕。如果 Mailbox 有更新,和之前的操作方法类似:启动已有的 docker 容器,在其中更新 mailbox 代码库后,重新构建程序,再复制出来,上传到服务器中,重启服务器的服务即可。

References

Mastodon