已经有完整的frp二进制文件,为什么还要选择自己编译?主要是为了几点.
- 二次开发,比如修改特征,不要被扫描到特征,比如PBKDF2的SALT.
- 精简功能节约内存,毕竟路由的内存很有限.
- 编译出最适合自己服务器指令集的指令,提高执行效率.
基于Debian测试,实际上与系统无关.
安装必要的系统环境(一般系统都有,不放心就安装一下吧.):
apt install bison ed gawk gcc libc6-dev make
下载Go语言:https://golang.org/dl/ (并设置环境变量)
下载后解压到你自己喜欢的目录,假设如下.
root@web-server:~# wget https://dl.google.com/go/go1.11.2.linux-amd64.tar.gz --2018-12-09 21:00:51-- https://dl.google.com/go/go1.11.2.linux-amd64.tar.gz Resolving dl.google.com (dl.google.com)... 2607:f8b0:4007:804::200e, 216.58.217.206 Connecting to dl.google.com (dl.google.com)|2607:f8b0:4007:804::200e|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 126520483 (121M) [application/octet-stream] Saving to: ‘go1.11.2.linux-amd64.tar.gz’ go1.11.2.linux-amd64.tar.gz 100%[===========================================>] 120.66M 33.5MB/s in 3.8s 2018-12-09 21:00:56 (31.5 MB/s) - ‘go1.11.2.linux-amd64.tar.gz’ saved [126520483/126520483] root@web-server:~# tar xf go1.11.2.linux-amd64.tar.gz root@web-server:~/go# pwd /root/go
设置3个环境变量.(我一般习惯在.profile下添加这些内容,注意路径可能不同.,)
export GOROOT=/root/go export GOPATH=/root/go/work export PATH=$PATH:/root/go/bin
一般来说,go目录下没有work目录,需要自己创建一个.
此时重新加载环境变量,就能看到go语言版本了.
运行下面这句就可以获取frp的源码了.
go get github.com/fatedier/frp
这里说的是没有Go源码在目录,实际上,这个源码就不在根目录,所以无所谓.
切换到工作目录,就可以开始编译了.
编译也非常简单,就是make了,但是要编译其他平台,就得指定make的文件.(插一句,这是go语言优点,跨平台特别好.)
结果
root@web-server:~/go/work/src/github.com/fatedier/frp# make -f Makefile.cross-compiles env CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags "-s -w" -o ./frpc_darwin_amd64 ./cmd/frpc env CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags "-s -w" -o ./frps_darwin_amd64 ./cmd/frps env CGO_ENABLED=0 GOOS=freebsd GOARCH=386 go build -ldflags "-s -w" -o ./frpc_freebsd_386 ./cmd/frpc env CGO_ENABLED=0 GOOS=freebsd GOARCH=386 go build -ldflags "-s -w" -o ./frps_freebsd_386 ./cmd/frps env CGO_ENABLED=0 GOOS=freebsd GOARCH=amd64 go build -ldflags "-s -w" -o ./frpc_freebsd_amd64 ./cmd/frpc env CGO_ENABLED=0 GOOS=freebsd GOARCH=amd64 go build -ldflags "-s -w" -o ./frps_freebsd_amd64 ./cmd/frps env CGO_ENABLED=0 GOOS=linux GOARCH=386 go build -ldflags "-s -w" -o ./frpc_linux_386 ./cmd/frpc env CGO_ENABLED=0 GOOS=linux GOARCH=386 go build -ldflags "-s -w" -o ./frps_linux_386 ./cmd/frps env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o ./frpc_linux_amd64 ./cmd/frpc env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o ./frps_linux_amd64 ./cmd/frps env CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -ldflags "-s -w" -o ./frpc_linux_arm ./cmd/frpc env CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -ldflags "-s -w" -o ./frps_linux_arm ./cmd/frps env CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags "-s -w" -o ./frpc_linux_arm64 ./cmd/frpc env CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags "-s -w" -o ./frps_linux_arm64 ./cmd/frps env CGO_ENABLED=0 GOOS=windows GOARCH=386 go build -ldflags "-s -w" -o ./frpc_windows_386.exe ./cmd/frpc env CGO_ENABLED=0 GOOS=windows GOARCH=386 go build -ldflags "-s -w" -o ./frps_windows_386.exe ./cmd/frps env CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o ./frpc_windows_amd64.exe ./cmd/frpc env CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o ./frps_windows_amd64.exe ./cmd/frps env CGO_ENABLED=0 GOOS=linux GOARCH=mips64 go build -ldflags "-s -w" -o ./frpc_linux_mips64 ./cmd/frpc env CGO_ENABLED=0 GOOS=linux GOARCH=mips64 go build -ldflags "-s -w" -o ./frps_linux_mips64 ./cmd/frps env CGO_ENABLED=0 GOOS=linux GOARCH=mips64le go build -ldflags "-s -w" -o ./frpc_linux_mips64le ./cmd/frpc env CGO_ENABLED=0 GOOS=linux GOARCH=mips64le go build -ldflags "-s -w" -o ./frps_linux_mips64le ./cmd/frps env CGO_ENABLED=0 GOOS=linux GOARCH=mips GOMIPS=softfloat go build -ldflags "-s -w" -o ./frpc_linux_mips ./cmd/frpc env CGO_ENABLED=0 GOOS=linux GOARCH=mips GOMIPS=softfloat go build -ldflags "-s -w" -o ./frps_linux_mips ./cmd/frps env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle GOMIPS=softfloat go build -ldflags "-s -w" -o ./frpc_linux_mipsle ./cmd/frpc env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle GOMIPS=softfloat go build -ldflags "-s -w" -o ./frps_linux_mipsle ./cmd/frps
编译结果就在根目录.
# linux下golang环境搭建自动脚本 by 蘭雅sRGB
wget -qO- https://git.io/fp4jf | bash
@sRGB 其实最后的编译应该是go build xxx.go -o xx
[…] frp内网穿透神器的编译 […]
[…] frp内网穿透神器的编译 […]