【问题标题】:Buiding CockroachDB for RPi yields 'segmentation violation error'为 RPi 构建 CockroachDB 会产生“分段违规错误”
【发布时间】:2019-02-16 00:33:09
【问题描述】:

在发布了几篇帖子(this 和 this)之后,我正在尝试从 RPi 3 上的源代码构建 CockroachDB。

我的树莓派设置:

  • 操作系统:2018-06-27-raspbian-stretch
  • CPU:ARMv7 rev 4(v71)
  • 内存:1G + SWAP:1.5G
  • Go 版本:go1.11 linux/arm

我在“制作”时修复了一些关于 3rd 方库的错误,但现在我陷入了困境:

pi@raspberrypi:~/work/go/src/github.com/cockroachdb/cockroach $ make build TAGS='stdmalloc' -j2
GOPATH set to /home/pi/work/go
go build -o cockroach -v  -tags 'stdmalloc make arm_linux_gnueabihf_stdmalloc' -ldflags '-X github.com/cockroachdb/cockroach/pkg/build.typ=development -extldflags "" -X "github.com/cockroachdb/cockroach/pkg/build.tag=v2.2.0-alpha.00000000-668-gf76d921f42-dirty" -X "github.com/cockroachdb/cockroach/pkg/build.rev=f76d921f4262356fde83312d0f471262d995f1e0" -X "github.com/cockroachdb/cockroach/pkg/build.cgoTargetTriple=arm-linux-gnueabihf"   -X "github.com/cockroachdb/cockroach/pkg/build.utcTime=2018/09/11 12:47:32"' ./pkg/cmd/cockroach
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x2372b8]

goroutine 1 [running]:
runtime/internal/atomic.goLoad64(0x3d65bdc, 0x0, 0x5607a20)
/usr/local/go/src/runtime/internal/atomic/atomic_arm.go:124 +0x1c
github.com/cockroachdb/cockroach/pkg/util/humanizeutil.(*BytesValue).String(0x55fb578, 0x5607a01, 0x56d9ea0)
/home/pi/work/go/src/github.com/cockroachdb/cockroach/pkg/util/humanizeutil/humanize.go:109 +0x28
github.com/cockroachdb/cockroach/pkg/cli.(*bytesOrPercentageValue).String(0x57b4920, 0x56d9ea0, 0x7)
/home/pi/work/go/src/github.com/cockroachdb/cockroach/pkg/cli/flags_util.go:492 +0x20
github.com/cockroachdb/cockroach/vendor/github.com/spf13/pflag.(*FlagSet).VarPF(0x54d3a00, 0x25cf778, 0x57b4920, 0x1ef3864, 0xe, 0x0, 0x0, 0x56d2900, 0x169, 0x56d9ea0)
/home/pi/work/go/src/github.com/cockroachdb/cockroach/vendor/github.com/spf13/pflag/flag.go:778 +0x24
github.com/cockroachdb/cockroach/vendor/github.com/spf13/pflag.(*FlagSet).VarP(0x54d3a00, 0x25cf778, 0x57b4920, 0x1ef3864, 0xe, 0x0, 0x0, 0x56d2900, 0x169)
/home/pi/work/go/src/github.com/cockroachdb/cockroach/vendor/github.com/spf13/pflag/flag.go:786 +0x5c
github.com/cockroachdb/cockroach/pkg/cli.VarFlag(0x54d3a00, 0x25cf778, 0x57b4920, 0x1ef3864, 0xe, 0x0, 0x0, 0x0, 0x0, 0x1fa4462, ...)
/home/pi/work/go/src/github.com/cockroachdb/cockroach/pkg/cli/flags.go:129 +0x6c
github.com/cockroachdb/cockroach/pkg/cli.init.5()
/home/pi/work/go/src/github.com/cockroachdb/cockroach/pkg/cli/flags.go:324 +0x6c0
Makefile:1288: recipe for target 'docs/generated/settings/settings.html' failed
make: *** [docs/generated/settings/settings.html] Error 2
make: *** Deleting file 'docs/generated/settings/settings.html'

有什么想法可能是错的吗?

【问题讨论】:

  • 没有代码可看,即使不是不可能,也很难回答。如果您只是在不熟悉代码的情况下尝试构建其他人的项目并遇到问题,请联系项目维护人员和/或向他们提交错误报告。
  • 看什么代码,它是用 Golang 编写的,它有 50Mb 的源代码并使用了大约 50 个第三方库。这个问题与从源代码构建它有关,它是一个开源......如果你没有这个开源项目的XP,请在之前询问......
  • 这就像说给我QT的源代码,我想看看它的问题在哪里..它是一个开源软件,你可以在各种平台上构建它......跨度>
  • 但是如果你对代码不熟悉,如果你问的是构建问题而没有底层代码问题的概念,你基本上是在要求社区阅读 50MB 的源代码你。这就是为什么我建议改为联系项目的维护者而不是 SO。
  • 请注意,堆栈跟踪会向您显示错误所在的位置:/home/pi/work/go/src/github.com/cockroachdb/cockroach/pkg/util/humanizeutil/humanize.go:109。这看起来像是该程序中的一个错误,并且可能在他们的问题跟踪器上得到更好的报告。

标签: go raspberry-pi raspbian cockroachdb


【解决方案1】:

感谢您的提问。我是那篇博文的原作者。您似乎遇到了与 https://github.com/golang/go/issues/9959 相关的问题。看起来golang在原子访问时需要64位字的64位对齐。这在整个项目中执行起来有些棘手。不过,我们可以尝试通过删除pkg/util/humanizeutil/humanize.go:109 上的原子访问(看起来没有必要)并用return IBytes(*b.val) 替换它来实现此功能。这至少应该让你克服这个障碍。不过,在此之后您可能会遇到其他问题。不幸的是,CockroachDB 从未围绕 32 位 ARMv7 构建构建 CI,因为该项目从未正式支持 32 位架构。

但是,64 位 ARMv8 版本的维护更加积极。事实上,已经引入了一个完整的交叉编译工具链来在 x86_64 主机上为 ARMv8 构建 CockroachDB。可以通过运行build/builder.sh mkrelease arm64-linux-gnueabi 启动使用此工具链的编译。生成的二进制文件可以放到运行 64 位操作系统(如 https://wiki.debian.org/RaspberryPi3)的 RaspberryPi 上。我实际上在上周尝试过,没有遇到任何问题。

【讨论】:

  • 谢谢你的回答,真的很有帮助
猜你喜欢
  • 1970-01-01
  • 2013-05-14
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
  • 2020-12-30
  • 2017-11-15
  • 1970-01-01
相关资源
最近更新 更多