Closed z16166 closed 4 years ago
有的arm阉割了fpu,或许应该检查一下
AC88U就是阉割了FPU的,所以我装的Go的包的名字是go_nohf,nohf就是no hardware floating point的,是用软件库来模拟浮点数运算的。
神奇了,我刚才又进那个目录编译了一下,这次编出来的v2ray文件14MB,而且自带可执行属性,能执行,等于是问题解决了。有点莫名其妙啊,有可能是这个go_nohf不怎么稳定。
admin@RT-AC88U-4AF8:/tmp/mnt/WD12T/home/go/src/v2ray.com/core/main# env CGO_ENABLED=0 go build -o $HOME/v2ray -ldflags "-s -w"
go: downloading github.com/refraction-networking/utls v0.0.0-20190909200633-43c36d3c1f57
go: downloading go.starlark.net v0.0.0-20190919145610-979af19b165c
go: downloading github.com/gorilla/websocket v1.4.1
go: extracting github.com/gorilla/websocket v1.4.1
go: extracting go.starlark.net v0.0.0-20190919145610-979af19b165c
go: extracting github.com/refraction-networking/utls v0.0.0-20190909200633-43c36d3c1f57
admin@RT-AC88U-4AF8:/tmp/mnt/WD12T/home/go/src/v2ray.com/core/main# ls -la /tmp/home/root/
drwx------ 3 admin root 160 Mar 21 15:22 .
drwxr-xr-x 3 admin root 60 Jan 1 1970 ..
-rw------- 1 admin root 855 Mar 21 15:23 .ash_history
-rw-rw-rw- 1 admin root 84 Mar 21 11:37 .gitconfig
drwx------ 2 admin root 60 May 5 2018 .ssh
-rw-rw-rw- 1 admin root 165 Mar 21 10:20 .wget-hsts
-rwxrwxrwx 1 admin root 9768200 Mar 21 12:33 v2ctl
-rwxrwxrwx 1 admin root 14911584 Mar 21 15:22 v2ray
admin@RT-AC88U-4AF8:/tmp/mnt/WD12T/home/go/src/v2ray.com/core/main# /tmp/home/root/v2ray
V2Ray 4.23.0 (V2Fly, a community-driven edition of V2Ray.) Custom (go1.12.14 linux/arm)
A unified platform for anti-censorship.
2020/03/21 15:24:01 Using config from STDIN
梅林使用的libc库是uClibc,所需要的V2ray得在路由器上编译出来。假定已经刷了梅林,安装好了Entware。我是在RT-AC88U的USB 3.0口上外挂了一个12T的硬盘,就是最近几个月比较火的那款西数WD Elements 12T,亚马逊一上架基本秒无的。/opt是Entware建的一个符号链接,指向/tmp/opt,最终指向的是/tmp/mnt/WD12T/entware。root帐号的主目录是/tmp/home/root(这个目录下空间有限,而且重启路由器后会消失,一般不在这里干活)
Entware中有两个go包,要安装go_nohf这个包。nohf是no hardware floating point的意思,也就是用软件指令模拟浮点运算,因为AC88U没有浮点硬件。如果你的路由器有浮点硬件,就下载go,而不是go_nohf。git之类的工具假定已经用opkg装好了。
opkg install go_nohf
export GOROOT=/opt/bin/go
export GOPATH=/tmp/mnt/WD12T/home/go
export GOCACHE=/tmp/mnt/WD12T/home/.cache/go-build
export GOPROXY=https://goproxy.io
export GO111MODULE=off
export CGO_ENABLED=0
下载go代码要用。尽量设置为http代理,我发现SOCKS5代理容易报错。
export http_proxy=http://192.168.2.73:8118
export https_proxy=http://192.168.2.73:8118
git config --global http.proxy "http://192.168.2.73:8118"
git config --global https.proxy "http://192.168.2.73:8118"
git config --global http.sslVerify false (临时的)
第二项可能不是必须的。
go get -insecure -u v2ray.com/core/...
go get -insecure -u v2ray.com/ext/...
cd $GOPATH/src/v2ray.com/core/main
go build -o $HOME/v2ray -ldflags "-s -w"
cd $GOPATH/src/v2ray.com/core/infra/control/main
go build -o $HOME/v2ctl -tags confonly -ldflags "-s -w"
编译产物v2ray、v2ctl放在$HOME下。其中v2ray我编译了几次都是200多K的文件,默认也没有可执行属性,无法运行。后来又尝试了一次,居然好了,得到一个14M的产物。怀疑是go编译器不稳定导致的,未深究。
从官网github下载预编译的v2ray-linux-arm.zip,解压到目录/tmp/mnt/WD12T/v2ray下; 把这目录下官方编译出来的v2ray、v2ctl都删了; 把我们编译好的v2ray、v2ctl从$HOME复制到这个目录下; 从Windows客户端v2rayN中拷贝其config.json到这个目录下(如果没有在v2rayN中生成过,就自己新配一个config.json吧,此处不再赘述如何配置config.json),注意用dos2unix转一下格式;
创建符号链接(可选):
ln -s /tmp/mnt/WD12T/home/v2ray/v2ray /opt/bin/v2ray
ln -s /tmp/mnt/WD12T/home/v2ray/v2ctl /opt/bin/v2ctl
新建开机脚本文件/opt/etc/init.d/S81v2ray,内容为:
#!/bin/sh
ENABLED=yes
PROCS=v2ray
ARGS="-c /tmp/mnt/WD12T/home/v2ray/config.json"
PREARGS=""
DESC=$PROCS
PATH=/opt/sbin:/opt/bin:/opt/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/tmp/mnt/WD12T/home/v2ray
. /opt/etc/init.d/rc.func
注意这个脚本最后调用的是/opt/etc/init.d/rc.func,确保这个文件存在。这文件是Entware的服务管理框架脚本,参看https://github.com/Entware/entware-ng-rtndev/blob/master/entware-opt/files/rc.func。
脚本存盘后记得给S81v2ray加上可执行属性:
chmod u+x /opt/etc/init.d/S81v2ray
至此大功告成!
路由器是华硕AC88U,CPU是armv7l,go编译器是在梅林中装的Entware中的go_nohf - 1.12.14-1。
编译步骤如下。编译出来的v2ctl我试了运行后会显示帮助信息,但这个v2ray只有200多K,不是个ELF文件,默认也没给加上可执行属性。加上可执行属性执行的话,会被当做shell脚本来执行,所以报错"",这对吗?
GO111MODULE=off GOPROXY=https://goproxy.io go get -u v2ray.com/core/... cd $(go env GOPATH)/src/v2ray.com/core/main env CGO_ENABLED=0 go build -o $HOME/v2ray -ldflags "-s -w" cd $(go env GOPATH)/src/v2ray.com/core/infra/control/main env CGO_ENABLED=0 go build -o $HOME/v2ctl -tags confonly -ldflags "-s -w" admin@RT-AC88U-4AF8:/tmp/mnt/WD12T/home/go/src/v2ray.com/core/infra/control/main# ls -la /tmp/home/root drwx------ 3 admin root 160 Mar 21 12:33 . drwxr-xr-x 3 admin root 60 Jan 1 1970 .. -rw------- 1 admin root 2484 Mar 21 12:35 .ash_history -rw-rw-rw- 1 admin root 84 Mar 21 11:37 .gitconfig drwx------ 2 admin root 60 May 5 2018 .ssh -rw-rw-rw- 1 admin root 165 Mar 21 10:20 .wget-hsts -rwxrwxrwx 1 admin root 9768200 Mar 21 12:33 v2ctl -rw-rw-rw- 1 admin root 213464 Mar 21 12:32 v2ray admin@RT-AC88U-4AF8:/tmp/home/root# chmod u+x v2ray admin@RT-AC88U-4AF8:/tmp/home/root# ls v2ctl v2ray admin@RT-AC88U-4AF8:/tmp/home/root# ldd ./v2ray libcrypt.so.0 => /lib/libcrypt.so.0 (0x2abff000) libm.so.0 => /lib/libm.so.0 (0x2acac000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x2ac1c000) libc.so.0 => /lib/libc.so.0 (0x2ac2e000) ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x2ab81000) admin@RT-AC88U-4AF8:/tmp/home/root# ./v2ray ./v2ray: line 1: syntax error: unexpected newline
哥们能共享一下编译出来的文件吗,我这编译老提示这个
asm: writing output: write $WORK/b122/asm_linux_arm.o: no space left on device
go build v2ray.com/core/common/dice: write /tmp/go-build568245200/b131/importcfg: no space left on device
go build golang.org/x/net/internal/timeseries: write /tmp/go-build568245200/b149/importcfg: no space left on device
go build google.golang.org/grpc/backoff: write /tmp/go-build568245200/b194/importcfg: no space left on device
go build google.golang.org/grpc/internal/grpclog: write /tmp/go-build568245200/b198/importcfg: no space left on device
go build google.golang.org/grpc/attributes: write /tmp/go-build568245200/b200/importcfg: no space left on device
go build google.golang.org/grpc/metadata: write /tmp/go-build568245200/b204/importcfg: no space left on device
go build google.golang.org/grpc/internal/grpcrand: write /tmp/go-build568245200/b208/importcfg: no space left on device
go build google.golang.org/grpc/codes: write /tmp/go-build568245200/b209/importcfg: no space left on device
go build google.golang.org/grpc/encoding: write /tmp/go-build568245200/b210/importcfg: no space left on device
go build google.golang.org/grpc/internal/buffer: write /tmp/go-build568245200/b227/importcfg: no space left on device
go build google.golang.org/grpc/internal/envconfig: write /tmp/go-build568245200/b229/importcfg: no space left on device
go build google.golang.org/grpc/internal/grpcsync: write /tmp/go-build568245200/b230/importcfg: no space left on device
go build golang.org/x/text/transform: write /tmp/go-build568245200/b243/importcfg: no space left on device
go build golang.org/x/text/unicode/bidi: write /tmp/go-build568245200/b244/importcfg: no space left on device
go build golang.org/x/net/http2/hpack: write /tmp/go-build568245200/b246/importcfg: no space left on device
go build google.golang.org/grpc/keepalive: write /tmp/go-build568245200/b248/importcfg: no space left on device
go build google.golang.org/grpc/tap: write /tmp/go-build568245200/b251/importcfg: no space left on device
go build v2ray.com/core/common/crypto/internal: write /tmp/go-build568245200/b271/importcfg: no space left on device
go build v2ray.com/core/common/strmatcher: write /tmp/go-build568245200/b278/importcfg: no space left on device
go build golang.org/x/net/dns/dnsmessage: write /tmp/go-build568245200/b284/importcfg: no space left on device
go build go.starlark.net/internal/spell: write /tmp/go-build568245200/b289/importcfg: no space left on device
go build go.starlark.net/syntax: write /tmp/go-build568245200/b290/importcfg: no space left on device
go build golang.org/x/crypto/chacha20: write /tmp/go-build568245200/b307/importcfg: no space left on device
go build golang.org/x/crypto/poly1305: write /tmp/go-build568245200/b309/importcfg: no space left on device
go build golang.org/x/crypto/hkdf: write /tmp/go-build568245200/b310/importcfg: no space left on device
go build github.com/dgryski/go-metro: write /tmp/go-build568245200/b322/importcfg: no space left on device
go build golang.org/x/crypto/sha3: write /tmp/go-build568245200/b325/importcfg: no space left on device
go build github.com/lucas-clemente/quic-go/internal/protocol: write /tmp/go-build568245200/b343/importcfg: no space left on device
go build golang.org/x/crypto/cryptobyte: write /tmp/go-build568245200/b349/importcfg: no space left on device
go build golang.org/x/crypto/curve25519: write /tmp/go-build568245200/b351/importcfg: no space left on device
go build golang.org/x/sys/cpu: write /tmp/go-build568245200/b352/importcfg: no space left on device
go build github.com/gorilla/websocket: write /tmp/go-build568245200/b359/importcfg: no space left on device
# google.golang.org/protobuf/internal/impl
compile: writing output: write $WORK/b081/_pkg_.a: no space left on device
路由器是华硕AC88U,CPU是armv7l,go编译器是在梅林中装的Entware中的go_nohf - 1.12.14-1。 编译步骤如下。编译出来的v2ctl我试了运行后会显示帮助信息,但这个v2ray只有200多K,不是个ELF文件,默认也没给加上可执行属性。加上可执行属性执行的话,会被当做shell脚本来执行,所以报错"",这对吗?
GO111MODULE=off GOPROXY=https://goproxy.io go get -u v2ray.com/core/... cd $(go env GOPATH)/src/v2ray.com/core/main env CGO_ENABLED=0 go build -o $HOME/v2ray -ldflags "-s -w" cd $(go env GOPATH)/src/v2ray.com/core/infra/control/main env CGO_ENABLED=0 go build -o $HOME/v2ctl -tags confonly -ldflags "-s -w" admin@RT-AC88U-4AF8:/tmp/mnt/WD12T/home/go/src/v2ray.com/core/infra/control/main# ls -la /tmp/home/root drwx------ 3 admin root 160 Mar 21 12:33 . drwxr-xr-x 3 admin root 60 Jan 1 1970 .. -rw------- 1 admin root 2484 Mar 21 12:35 .ash_history -rw-rw-rw- 1 admin root 84 Mar 21 11:37 .gitconfig drwx------ 2 admin root 60 May 5 2018 .ssh -rw-rw-rw- 1 admin root 165 Mar 21 10:20 .wget-hsts -rwxrwxrwx 1 admin root 9768200 Mar 21 12:33 v2ctl -rw-rw-rw- 1 admin root 213464 Mar 21 12:32 v2ray admin@RT-AC88U-4AF8:/tmp/home/root# chmod u+x v2ray admin@RT-AC88U-4AF8:/tmp/home/root# ls v2ctl v2ray admin@RT-AC88U-4AF8:/tmp/home/root# ldd ./v2ray libcrypt.so.0 => /lib/libcrypt.so.0 (0x2abff000) libm.so.0 => /lib/libm.so.0 (0x2acac000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x2ac1c000) libc.so.0 => /lib/libc.so.0 (0x2ac2e000) ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x2ab81000) admin@RT-AC88U-4AF8:/tmp/home/root# ./v2ray ./v2ray: line 1: syntax error: unexpected newline
哥们能共享一下编译出来的文件吗,我这编译老提示这个
asm: writing output: write $WORK/b122/asm_linux_arm.o: no space left on device go build v2ray.com/core/common/dice: write /tmp/go-build568245200/b131/importcfg: no space left on device go build golang.org/x/net/internal/timeseries: write /tmp/go-build568245200/b149/importcfg: no space left on device go build google.golang.org/grpc/backoff: write /tmp/go-build568245200/b194/importcfg: no space left on device go build google.golang.org/grpc/internal/grpclog: write /tmp/go-build568245200/b198/importcfg: no space left on device go build google.golang.org/grpc/attributes: write /tmp/go-build568245200/b200/importcfg: no space left on device go build google.golang.org/grpc/metadata: write /tmp/go-build568245200/b204/importcfg: no space left on device go build google.golang.org/grpc/internal/grpcrand: write /tmp/go-build568245200/b208/importcfg: no space left on device go build google.golang.org/grpc/codes: write /tmp/go-build568245200/b209/importcfg: no space left on device go build google.golang.org/grpc/encoding: write /tmp/go-build568245200/b210/importcfg: no space left on device go build google.golang.org/grpc/internal/buffer: write /tmp/go-build568245200/b227/importcfg: no space left on device go build google.golang.org/grpc/internal/envconfig: write /tmp/go-build568245200/b229/importcfg: no space left on device go build google.golang.org/grpc/internal/grpcsync: write /tmp/go-build568245200/b230/importcfg: no space left on device go build golang.org/x/text/transform: write /tmp/go-build568245200/b243/importcfg: no space left on device go build golang.org/x/text/unicode/bidi: write /tmp/go-build568245200/b244/importcfg: no space left on device go build golang.org/x/net/http2/hpack: write /tmp/go-build568245200/b246/importcfg: no space left on device go build google.golang.org/grpc/keepalive: write /tmp/go-build568245200/b248/importcfg: no space left on device go build google.golang.org/grpc/tap: write /tmp/go-build568245200/b251/importcfg: no space left on device go build v2ray.com/core/common/crypto/internal: write /tmp/go-build568245200/b271/importcfg: no space left on device go build v2ray.com/core/common/strmatcher: write /tmp/go-build568245200/b278/importcfg: no space left on device go build golang.org/x/net/dns/dnsmessage: write /tmp/go-build568245200/b284/importcfg: no space left on device go build go.starlark.net/internal/spell: write /tmp/go-build568245200/b289/importcfg: no space left on device go build go.starlark.net/syntax: write /tmp/go-build568245200/b290/importcfg: no space left on device go build golang.org/x/crypto/chacha20: write /tmp/go-build568245200/b307/importcfg: no space left on device go build golang.org/x/crypto/poly1305: write /tmp/go-build568245200/b309/importcfg: no space left on device go build golang.org/x/crypto/hkdf: write /tmp/go-build568245200/b310/importcfg: no space left on device go build github.com/dgryski/go-metro: write /tmp/go-build568245200/b322/importcfg: no space left on device go build golang.org/x/crypto/sha3: write /tmp/go-build568245200/b325/importcfg: no space left on device go build github.com/lucas-clemente/quic-go/internal/protocol: write /tmp/go-build568245200/b343/importcfg: no space left on device go build golang.org/x/crypto/cryptobyte: write /tmp/go-build568245200/b349/importcfg: no space left on device go build golang.org/x/crypto/curve25519: write /tmp/go-build568245200/b351/importcfg: no space left on device go build golang.org/x/sys/cpu: write /tmp/go-build568245200/b352/importcfg: no space left on device go build github.com/gorilla/websocket: write /tmp/go-build568245200/b359/importcfg: no space left on device # google.golang.org/protobuf/internal/impl compile: writing output: write $WORK/b081/_pkg_.a: no space left on device
你的空间不足了。为什么要在路由器上编译,go是可以跨平台的
路由器是华硕AC88U,CPU是armv7l,go编译器是在梅林中装的Entware中的go_nohf - 1.12.14-1。 编译步骤如下。编译出来的v2ctl我试了运行后会显示帮助信息,但这个v2ray只有200多K,不是个ELF文件,默认也没给加上可执行属性。加上可执行属性执行的话,会被当做shell脚本来执行,所以报错"",这对吗? ... ... libc.so.0 => /lib/libc.so.0 (0x2ac2e000) ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x2ab81000) admin@RT-AC88U-4AF8:/tmp/home/root# ./v2ray ./v2ray: line 1: syntax error: unexpected newline
哥们能共享一下编译出来的文件吗,我这编译老提示这个
asm: writing output: write $WORK/b122/asm_linux_arm.o: no space left on device go build v2ray.com/core/common/dice: write /tmp/go-build568245200/b131/importcfg: no space left on device go build golang.org/x/net/internal/timeseries: write /tmp/go-build568245200/b149/importcfg: no space left on device go build google.golang.org/grpc/backoff: write /tmp/go-build568245200/b194/importcfg: no space left on device ... ... go build github.com/gorilla/websocket: write /tmp/go-build568245200/b359/importcfg: no space left on device # google.golang.org/protobuf/internal/impl compile: writing output: write $WORK/b081/_pkg_.a: no space left on device
你的空间不足了。为什么要在路由器上编译,go是可以跨平台的
因为正如@z16166 说的那样,我需要用go_nohf来编译。我也试过官方现成的二进制文件,不能运行。 有办法让它不使用 /tmp 作为临时路径吗?我有外接U盘,空间还很大。
已经通过 export GOTMPDIR="/opt/tmp" 解决这个问题
路由器是华硕AC88U,CPU是armv7l,go编译器是在梅林中装的Entware中的go_nohf - 1.12.14-1。
编译步骤如下。编译出来的v2ctl我试了运行后会显示帮助信息,但这个v2ray只有200多K,不是个ELF文件,默认也没给加上可执行属性。加上可执行属性执行的话,会被当做shell脚本来执行,所以报错"",这对吗?