编译属于自己的RustDesk客户端
编译属于自己的RustDesk客户端
在上一篇文章中,我们通过最新的 S6-overlay 基础镜像完成了 RustDesk 服务端的搭建,并且使用了官方编译好的客户端实现了免费、安全的远程控制。
第一篇
他们都叫我老宁,公众号:他们都叫我老宁群晖Docker系列(三十二)干掉ToDesk和TeamViewer,群晖部署远程控制服务,编译属于自己的客户端(一)
使用官方客户端首次都需要配置服务器地址和密钥,对家人来说非常不友好,不利于分享,还可能暴露服务器信息和密钥,存在安全隐患。
所以这次我们根据 RustDesk 开源项目构建属于自己的客户端软件,把服务端信息直接写入客户端,做到开箱即用!
PS:如果没有搭建过 RustDesk 服务端的小伙伴可以先看前面一篇文章完成服务端的搭建。
项目地址
https://github.com/rustdesk
客户端
在浏览器中打开客户端的开源项目地址 https://github.com/rustdesk/rustdesk 。(客户端和服务端是不同的两个项目,不要搞混了)

根据文档可以发现 RustDesk 提供了多重编译客户端的方式,比如 Linux、Docker,这些编译方式在编译速度上可能较快,但是操作起来十分复杂。
一般大型开源项目都会提供基于 Github Actions 的 workflows 脚本,利用这些脚本我们可以直接在 利用 Github 的服务器直接编译写好的代码,这样无需在本地配置复杂的编译环境,省时省力。

所以下面直接演示利用 Github Actions 编译 RustDesk 客户端。
Github 编译
🔻 打开客户端地址 https://github.com/rustdesk/rustdesk ,并点击右上角的Fork按钮。

🔻 把代码Fork到自己的仓库。(去掉仅copy the master 分支,可以克隆所有分支代码)

🔻 Fork完毕后的样子。

🔻 点击右上角的 Settings 进入到设置界面,新增 Actions 的密钥。

🔻 Name 输入RENDEZVOUS_SERVER,Secret 输入我们群晖的DDNS域名。(不要加端口号)

🔻 再增加一个密钥。Name 输入RS_PUB_KEY,Secret 输入服务端映射data目录下pub文件的内容。(具体可以看前一篇的说明)

🔻 这样就把客户端要连接的服务信息配置到了 Github Actions 的环境变量中,后面运行 Github Actions 脚本的时候就可以直接写入到代码中了。

🔻 接下来就运行 Actions。点击 Actions 选项,可以看到左侧有很多 workflows。

🔻 点击 Flutter Tag Build ,选择Run workflow,找到Tags下最新的版本。(也可以选择nightly)

🔻 最后点击绿色的Run workflow按钮就会自动进行编译。

🔻 稍等片刻,列表中就会出现一条记录,显示 workflow 正在运行。

🔻 我们可以点击记录进到详情页查看编译的状态。

整个编译过程大概需要一小时,借着这个时间,我们来简单了解下前面服务器的配置是如何写到代码中的。
🔻 点击 Flutter Tag Build 下面的链接可以查看 workflow 的源代码。

🔻 可以看到 flutter-tag.yml 调用了 flutter-build.yml 脚本。

🔻 从 flutter-build.yml 脚本中可以看到它读取了secrets.RS_PUB_KEY、secrets.RENDEZVOUS_SERVER等其他配置。这些带有secrets.开头的都是引用的前面Settings下Actions选项中的secrets。

🔻 如果需要每天凌晨都进行客户端的编译,那么可以启用 Flutter Nightly Build 工作流。

🔻 workflow 运行完成后会自动把编译好的各个客户端发布到 Releases 界面。

🔻 在 Releases 界面下载并安装客户端后,打开首页可以发现状态直接显示为就绪。

🔻 打开设置,可以发现ID/中继服务器的配置为空。说明服务端信息已经被编译到了客户端。

后期如果想要控制其他设备,只需下载对应平台的客户端即可,再也不用单独给每个客户端配置服务器信息了。
后记
经过我多次在不同 MacOS 上的测试,发现在利用 Github Actions 编译的dmg程序在Mac上始终无法打开,排查后发现应该是 workflow 脚本中的证书导致的。
默认的 workflow 脚本中有关于苹果开发者证书相关配置,如果没有上传相关证书就会导致无法打开,所以我们在 Mac 上安装完客户端后,需要重新对APP进行签名。
签名的代码也非常简单,只需在终端执行如下命令即可。
codesign -s - --deep --force --timestamp=none /Applications/RustDesk.app
目录 返回
首页