sing-box 是一款非常优秀的通用代理平台,支持多种协议,功能强大,性能稳定,安装和部署也比较方便。

事实上 sing-box 还支持源代码编译,方便我们定制化的生成 sing-box 的可执行文件。同时,官方提供的二进制版本可能是通过低版本的 Go 编译器生成,为了获得更好的性能,我们也可以自行使用最新版的 Go 编译器来编译生成 sing-box。

1] 安装 Go 语言环境

由于 sing-box 对于 Go 语言环境具有最低版本要求,所以建议直接安装最新版的 Go 语言环境,对于 Windows 平台和 macOS 平台,直接到 Go 语言的 >>官方网站<< 下载对应的安装包进行安装,至于 linux 平台,则需要下载支持 CPU 架构的二进制压缩包,然后使用如下命令解压可执行文件至对应目录即完成了安装(以最新 Go 1.23.0为例):

# rm -rf /usr/local/go && tar -C /usr/local -xzf go1.23.0.linux-amd64.tar.gz
# export PATH=$PATH:/usr/local/go/bin
# go version

图.1 安装 Go 语言环境

第二条命令是将 Go 的可执行文件添加至系统环境变量,利于命令执行,最后查看 Go 版本,如果可以成功显示,则表示 Go 语言环境就安装成功了。

2] 编译 sing-box

下载最新版 sing-box 的源代码,示例使用最新版1.10.0-beta.5,解压后进入源代码文件目录:

# wget https://github.com/SagerNet/sing-box/archive/refs/tags/v1.10.0-beta.5.tar.gz
# tar -zxvf v1.10.0-beta.5.tar.gz
# cd sing-box-1.10.0-beta.5/

之后就可以进行编译了,使用如下命令即可生成二进制文件:

# make          //在当前文件夹生成可执行文件sing-box
or
# make install  //在$GOBIN文件夹中生成可执行文件sing-box

此时,会根据文件夹中的”Makefile”进行编译,最终生成可执行文件。

我们当然也可以通过调整构建标记的方式选择是否启用某些功能,sing-box 的构建标记如下:

构建标记 默认启用 说明
with_quic 编译支持 QUIC 功能
with_grpc × 编译支持标准 gRPC 功能
with_dhcp 编译支持 DHCP 功能
with_wireguard 编译支持 WireGuard 功能
with_reality_server 编译支持作为 reality TLS 服务器功能
with_acme 编译支持 ACME TLS 证书颁发者功能
with_clash_api 编译支持 Clash API 功能
with_v2ray_api × 编译支持 V2Ray API 功能
with_gvisor 编译支持 gVisor 功能
with_embedded_tor × 编译支持嵌入式 Tor 功能

使用自定义构建标记编译 sing-box 的命令格式为:

# TAGS="tag_a tag_b" make
or
# go build -tags "tag_a tag_b" ./cmd/sing-box

所以,自定义构建默认功能的完整编译命令为:

# go build -tags "with_quic with_dhcp with_wireguard with_ech with_utls with_reality_server with_acme with_clash_api with_gvisor" ./cmd/sing-box

命令执行完成后,同样会在当前目录生成一个可执行文件”sing-box”,使用如下命令,就可以查看其版本信息了:

# ./sing-box version

图.2 查看编译后 sing-box 版本信息

此时,会显示 sing-box 的编译环境和构建标记等信息。但是其版本显示为”unknown”,这也比较好处理,在源代码文件夹有一个”/constant”文件夹,里面有一个”version.go”文件,将其中的” var Version = “unknown” “修改为” var Version = “1.10.0-beta.5” “,再次执行编译命令生成新的二进制文件,就可以显示设置的版本号了。

图.3 查看 sing-box 版本信息

至此,我们就通过源代码成功编译出 sing-box 了。注意在编译过程中会将程序依赖的 Go 程序下载至”$GOPATH”文件夹,如果网络情况不好,可能会出现依赖包不能正确下载的情况,从而造成编译失败,所以建议编译时具有科学上网环境。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注