如何在Linux上初始化 QSign 签名服务器

前言

看不懂官方那个文档,还是从源码自己摸索一下吧,刚花了三小时终于解决了,这边记录一下。

安装 JDK

随便你系统是什么发行版,安装一个能用的 jdk 即可,他那个文档上面说1.8以上,那就装个能用的openjdk17吧。本文以 Ubuntu 20.04LTS(amd64) 为例。其他发行版或包管理器请自行搜索如何使用二进制文件安装或者自行编译安装。

sudo apt install openjdk-17-jdk

安装完毕后,使用java -version命令查看是否安装成功,并检查 java 版本。

部署 QSign

去他们官方仓库的 release 页面获取对应版本已编译包,下载后解压。

此处以1.1.7版本为例。wget提示命令不存在请自行安装wget或使用curl,本文不再赘述。

wget https://github.com/fuqiuluo/unidbg-fetch-qsign/releases/download/1.1.7/Package.zip
unzip Package.zip
unzip unidbg-fetch-qsign-1.1.7.zip

进入解压后的文件夹中,此时文件夹可能并未自带txlib文件夹(QQ 客户端版本信息),你需要从新版本那里复制过来,或者自行获取(在官方仓库里 https://github.com/fuqiuluo/unidbg-fetch-qsign/tree/master/txlib)。

复制过来之后你目前的文件夹结构应该是这样的:

├── bin/
│   ├── unidbg-fetch-qsign
│   └── unidbg-fetch-qsign.bat
├── lib/
├── txlib/
│   ├── 8.9.63
│   │   ├── config.json
│   │   ├── dtconfig.json
│   │   ├── libQSec.so
│   │   └── libfekit.so
│   ├── 8.9.68
│   ├── 8.9.71
│   └── 8.9.73

程序运行配置文件按txlib中选定各个版本的config.json,请不要在根目录再次创建,后文会提到如何配置。

然后在解压目录下(bin文件夹外)创建一个sh文件,文件名随意,本文以qsign.sh为例,内容如下(方便下次运行),basePath请自行指定你所需 QQ 客户端版本:

#!/bin/bash
bash ./bin/unidbg-fetch-qsign --basePath=txlib/8.9.68

然后运行你刚刚编写的 sh 文件,待控制台输出:

11:45:14.191 [DefaultDispatcher-worker-1] INFO ktor.application - Responding at http://0.0.0.0:8080

测试运行完毕没问题。即可使用 Ctrl+C 退出。

随后按照 wiki 修改config.json,退出后再次运行你刚刚编写的qsign.sh。建议使用screentmux等工具保障其后台运行。

若你在其他服务器运行公共 qsign 服务,建议使用nginx等反向代理工具,以便于你使用域名访问。

如果你单纯仅部署 qsign,该教程到此为止。

接下来配置 go-cqhttp。

go-cqhttp 的配置

按照刚才的步骤已配置好 qsign 服务,接下来该配置本地的 go-cqhttp 了。由于当前使用的 qsign 版本1.1.7不支持目前最新 release 的 go-cqhttp,所以我们要从源码自行编译。

首先安装 go 环境,推荐使用 gvm

sudo apt-get install bison
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

若安装过程中出现错误请自行搜索处理,安装完成后重启终端,然后从二进制文件安装go1.20

(注:非 amd64 平台上可能需要自行编译,此时请自行将以下命令的-B去掉后安装)

gvm install go1.20 -B

安装完成后,设置go1.20为默认版本:

gvm use go1.20

克隆 go-cqhttp 源码:

git clone https://github.com/Mrs4s/go-cqhttp.git
cd go-cqhttp

在 go-cqhttp 源码目录下运行 go build,等待编译完成后,会在当前目录下生成一个go-cqhttp可执行文件,将其移动到你项目目录下:

mv go-cqhttp /path/to/your/project

定位到你项目目录,运行./go-cqhttp,根据提示生成配置文件,然后退出。

使用文本编辑器修改你的配置文件(在26行处):

  sign-server: 'http://localhost:8080' # 按照你的实际情况修改,这一行需要解除注释
  key: 'type-your-key-here' # 与 config.json 中的 key 保持一致,这一行需要手动添加

然后运行./go-cqhttp,查看配置是否正确,若不正确请重头再试。