从源代码构建Golang的详细指南

从源代码构建Golang的详细指南 我正在CI流程中添加一个新步骤,用于每天构建并执行针对Go开发版本的应用程序测试。但问题是,我在从源码构建Go时遇到了困难。我的Dockerfile尚未完成,目前内容如下:

FROM debian:stretch

RUN apt update \
  && DEBIAN_FRONTEND=noninteractive apt install --no-install-recommends -y ca-certificates=20161130+nmu1+deb9u1 build-essential=12.3 golang=2:1.7~5 git=1:2.11.0-3+deb9u4 gcc=4:6.3.0-4 \
  && apt clean \
  && rm -rf /var/lib/apt/lists/*

RUN git clone https://go.googlesource.com/go /usr/local/go \
  && cd /usr/local/go/src/ \
  && bash all.bash

这是构建输出:

root@60f6ffea56ba:/usr/local/go/src# bash all.bash
Building Go cmd/dist using /usr/lib/go-1.7.
Building Go toolchain1 using /usr/lib/go-1.7.
Building Go bootstrap cmd/go (go_bootstrap) using Go toolchain1.
Building Go toolchain2 using go_bootstrap and Go toolchain1.
Building Go toolchain3 using go_bootstrap and Go toolchain2.
Building packages and commands for linux/amd64.

##### Testing packages.
ok  	archive/tar	0.124s
ok  	archive/zip	1.809s
ok  	bufio	0.274s
ok  	bytes	0.244s
ok  	compress/bzip2	0.090s
ok  	compress/flate	1.206s
ok  	compress/gzip	0.047s
ok  	compress/lzw	0.029s
ok  	compress/zlib	0.056s
ok  	container/heap	0.015s
ok  	container/list	0.023s
ok  	container/ring	0.043s
ok  	context	0.997s
ok  	crypto	0.057s
ok  	crypto/aes	0.025s
ok  	crypto/cipher	0.224s
ok  	crypto/des	0.024s
ok  	crypto/dsa	0.068s
ok  	crypto/ecdsa	0.323s
ok  	crypto/elliptic	0.581s
ok  	crypto/hmac	0.027s
ok  	crypto/internal/subtle	0.034s
ok  	crypto/md5	0.009s
ok  	crypto/rand	0.093s
ok  	crypto/rc4	0.038s
ok  	crypto/rsa	0.101s
ok  	crypto/sha1	0.041s
ok  	crypto/sha256	0.023s
ok  	crypto/sha512	0.005s
ok  	crypto/subtle	0.018s
ok  	crypto/tls	1.840s
ok  	crypto/x509	1.745s
ok  	database/sql	0.650s
ok  	database/sql/driver	0.028s
ok  	debug/dwarf	0.019s
ok  	debug/elf	0.063s
ok  	debug/gosym	0.500s
ok  	debug/macho	0.022s
ok  	debug/pe	0.014s
ok  	debug/plan9obj	0.027s
ok  	encoding/ascii85	0.038s
ok  	encoding/asn1	0.009s
ok  	encoding/base32	0.057s
ok  	encoding/base64	0.016s
ok  	encoding/binary	0.031s
ok  	encoding/csv	0.031s
ok  	encoding/gob	0.072s
ok  	encoding/hex	0.041s
ok  	encoding/json	0.611s
ok  	encoding/pem	0.014s
ok  	encoding/xml	0.055s
ok  	errors	0.032s
ok  	expvar	0.013s
ok  	flag	0.071s
ok  	fmt	0.278s
ok  	go/ast	0.004s
ok  	go/build	0.477s
ok  	go/constant	0.018s
ok  	go/doc	0.091s
ok  	go/format	0.033s
ok  	go/importer	0.162s
ok  	go/internal/gccgoimporter	0.024s
ok  	go/internal/gcimporter	0.738s
ok  	go/internal/srcimporter	1.219s
ok  	go/parser	0.062s
ok  	go/printer	0.386s
ok  	go/scanner	0.021s
ok  	go/token	0.061s
ok  	go/types	1.066s
ok  	hash	0.023s
ok  	hash/adler32	0.037s
ok  	hash/crc32	0.057s
ok  	hash/crc64	0.013s
ok  	hash/fnv	0.005s
ok  	html	0.028s
ok  	html/template	0.058s
ok  	image	0.175s
ok  	image/color	0.018s
ok  	image/draw	0.092s
ok  	image/gif	0.787s
ok  	image/jpeg	0.295s
ok  	image/png	0.084s
ok  	index/suffixarray	0.034s
ok  	internal/cpu	0.052s
ok  	internal/fmtsort	0.013s
ok  	internal/poll	0.069s
ok  	internal/singleflight	0.047s
ok  	internal/trace	2.715s
ok  	internal/x/crypto/chacha20poly1305	0.146s
ok  	internal/x/crypto/cryptobyte	0.021s
ok  	internal/x/crypto/curve25519	0.048s
ok  	internal/x/crypto/hkdf	0.005s
ok  	internal/x/crypto/internal/chacha20	0.168s
ok  	internal/x/crypto/poly1305	0.043s
ok  	internal/x/net/dns/dnsmessage	0.090s
ok  	internal/x/net/http/httpguts	0.005s
ok  	internal/x/net/http/httpproxy	0.055s
ok  	internal/x/net/http2/hpack	0.033s
ok  	internal/x/net/idna	0.015s
ok  	internal/x/net/nettest	1.413s
ok  	internal/x/text/transform	0.017s
ok  	internal/x/text/unicode/norm	0.035s
ok  	internal/xcoff	0.032s
ok  	io	0.064s
ok  	io/ioutil	0.041s
ok  	log	0.012s
ok  	log/syslog	1.261s
ok  	math	0.018s
ok  	math/big	2.957s
ok  	math/bits	0.039s
ok  	math/cmplx	0.013s
ok  	math/rand	0.316s
ok  	mime	0.023s
ok  	mime/multipart	0.603s
ok  	mime/quotedprintable	0.444s
--- FAIL: TestCgoLookupPort (0.00s)
    cgo_unix_test.go:48: lookup tcp/smtp: Servname not supported for ai_socktype
--- FAIL: TestCgoLookupPortWithCancel (0.00s)
    cgo_unix_test.go:61: lookup tcp/smtp: Servname not supported for ai_socktype
--- FAIL: TestReadLine (0.00s)
    parse_test.go:24: open /etc/services: no such file or directory
FAIL
FAIL	net	6.156s
ok  	net/http	4.338s
ok  	net/http/cgi	1.084s
ok  	net/http/cookiejar	0.070s
ok  	net/http/fcgi	0.052s
ok  	net/http/httptest	0.092s
ok  	net/http/httptrace	0.034s
ok  	net/http/httputil	0.157s
ok  	net/http/internal	0.020s
ok  	net/http/pprof	2.028s
ok  	net/internal/socktest	0.008s
ok  	net/mail	0.007s
ok  	net/rpc	0.046s
ok  	net/rpc/jsonrpc	0.028s
ok  	net/smtp	0.089s
ok  	net/textproto	0.004s
ok  	net/url	0.034s
ok  	os	0.849s
ok  	os/exec	0.753s
ok  	os/signal	5.137s
ok  	os/user	0.024s
ok  	path	0.022s
ok  	path/filepath	0.051s
ok  	plugin	0.036s
ok  	reflect	0.411s
ok  	regexp	0.201s
ok  	regexp/syntax	0.421s
ok  	runtime	65.215s
ok  	runtime/debug	0.095s
ok  	runtime/internal/atomic	0.110s
ok  	runtime/internal/math	0.015s
ok  	runtime/internal/sys	0.003s
ok  	runtime/pprof	10.581s
ok  	runtime/pprof/internal/profile	0.004s
ok  	runtime/trace	3.281s
ok  	sort	0.134s
ok  	strconv	0.886s
ok  	strings	0.238s
ok  	sync	0.364s
ok  	sync/atomic	0.171s
ok  	syscall	0.102s
ok  	testing	1.319s
ok  	testing/quick	0.277s
ok  	text/scanner	0.054s
ok  	text/tabwriter	0.032s
ok  	text/template	0.450s
ok  	text/template/parse	0.036s
ok  	time	2.904s
ok  	unicode	0.026s
ok  	unicode/utf16	0.041s
ok  	unicode/utf8	0.054s
ok  	cmd/addr2line	2.427s
ok  	cmd/api	0.038s
ok  	cmd/asm/internal/asm	0.753s
ok  	cmd/asm/internal/lex	0.004s
ok  	cmd/compile	0.066s
ok  	cmd/compile/internal/gc	20.135s
ok  	cmd/compile/internal/ssa	0.607s
ok  	cmd/compile/internal/syntax	0.030s
ok  	cmd/compile/internal/test	0.048s [no tests to run]
ok  	cmd/compile/internal/types	0.018s
ok  	cmd/cover	3.097s
ok  	cmd/doc	0.051s
ok  	cmd/fix	7.607s
ok  	cmd/go	101.490s
ok  	cmd/go/internal/cache	1.047s
ok  	cmd/go/internal/dirhash	0.013s
ok  	cmd/go/internal/generate	0.082s
ok  	cmd/go/internal/get	0.026s
ok  	cmd/go/internal/imports	0.010s
ok  	cmd/go/internal/load	0.034s
ok  	cmd/go/internal/lockedfile	0.035s
ok  	cmd/go/internal/lockedfile/internal/filelock	0.112s
ok  	cmd/go/internal/modconv	0.043s
ok  	cmd/go/internal/modfetch	0.056s
ok  	cmd/go/internal/modfetch/codehost	0.033s
ok  	cmd/go/internal/modfile	0.030s
ok  	cmd/go/internal/modload	0.027s
ok  	cmd/go/internal/module	0.021s
ok  	cmd/go/internal/mvs	0.021s
ok  	cmd/go/internal/par	0.043s
ok  	cmd/go/internal/search	0.006s
ok  	cmd/go/internal/semver	0.003s
ok  	cmd/go/internal/txtar	0.019s
ok  	cmd/go/internal/web2	0.033s
ok  	cmd/go/internal/work	0.017s
ok  	cmd/gofmt	0.115s
ok  	cmd/internal/buildid	0.261s
ok  	cmd/internal/dwarf	0.007s
ok  	cmd/internal/edit	0.004s
ok  	cmd/internal/goobj	0.986s
ok  	cmd/internal/obj	0.005s
ok  	cmd/internal/obj/arm64	0.062s
ok  	cmd/internal/obj/x86	0.469s
ok  	cmd/internal/objabi	0.010s
ok  	cmd/internal/src	0.005s
ok  	cmd/internal/test2json	0.163s
ok  	cmd/link	3.180s
ok  	cmd/link/internal/ld	3.100s
ok  	cmd/link/internal/sym	0.042s
ok  	cmd/nm	3.390s
ok  	cmd/objdump	2.968s
ok  	cmd/pack	2.444s
ok  	cmd/trace	0.028s
ok  	cmd/vendor/github.com/google/pprof/internal/binutils	0.111s
ok  	cmd/vendor/github.com/google/pprof/internal/driver	0.442s
ok  	cmd/vendor/github.com/google/pprof/internal/elfexec	0.048s
ok  	cmd/vendor/github.com/google/pprof/internal/graph	0.015s
ok  	cmd/vendor/github.com/google/pprof/internal/measurement	0.009s
ok  	cmd/vendor/github.com/google/pprof/internal/report	0.300s
ok  	cmd/vendor/github.com/google/pprof/internal/symbolizer	0.018s
ok  	cmd/vendor/github.com/google/pprof/internal/symbolz	0.022s
ok  	cmd/vendor/github.com/google/pprof/profile	0.120s
ok  	cmd/vendor/github.com/ianlancetaylor/demangle	0.035s
ok  	cmd/vendor/golang.org/x/arch/arm/armasm	0.028s
ok  	cmd/vendor/golang.org/x/arch/arm64/arm64asm	0.077s
ok  	cmd/vendor/golang.org/x/arch/ppc64/ppc64asm	0.018s
ok  	cmd/vendor/golang.org/x/arch/x86/x86asm	0.145s
ok  	cmd/vendor/golang.org/x/crypto/ssh/terminal	0.008s
ok  	cmd/vendor/golang.org/x/sys/unix	0.585s
ok  	cmd/vet	8.483s
2019/02/27 12:10:35 Failed: exit status 1

我已经安装了gcc,是不是还缺少什么? 我也尝试了稳定分支如release-branch.go1.12,但出现了同样的错误…


更多关于从源代码构建Golang的详细指南的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

算了……我需要休息一下。抱歉并感谢!

更多关于从源代码构建Golang的详细指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这对我来说看起来是一个成功的构建,只是有些测试失败了。

为什么还要运行测试呢?直接构建并安装就好了。

从构建输出可以看到,测试失败主要集中在网络相关的测试上,具体是 net 包中的几个测试用例。这些失败通常是由于容器环境中缺少必要的系统文件或网络配置导致的,而不是Go语言构建本身的问题。

主要错误包括:

  • TestCgoLookupPortTestCgoLookupPortWithCancel:缺少 /etc/services 文件
  • TestReadLine:同样缺少 /etc/services 文件

以下是修复后的Dockerfile示例:

FROM debian:stretch

RUN apt update \
  && DEBIAN_FRONTEND=noninteractive apt install --no-install-recommends -y \
    ca-certificates \
    build-essential \
    golang \
    git \
    gcc \
    netbase \
  && apt clean \
  && rm -rf /var/lib/apt/lists/*

# 创建必要的系统文件
RUN echo "smtp 25/tcp mail" >> /etc/services \
  && echo "smtp 25/udp mail" >> /etc/services

RUN git clone https://go.googlesource.com/go /usr/local/go \
  && cd /usr/local/go/src/ \
  && ./all.bash

关键修改:

  1. 添加了 netbase 包,它提供了 /etc/services 文件
  2. 手动添加了smtp服务到 /etc/services 文件
  3. 移除了具体的版本号以避免依赖冲突

如果仍然遇到问题,可以跳过测试直接构建:

FROM debian:stretch

RUN apt update \
  && DEBIAN_FRONTEND=noninteractive apt install --no-install-recommends -y \
    ca-certificates \
    build-essential \
    golang \
    git \
    gcc \
  && apt clean \
  && rm -rf /var/lib/apt/lists/*

RUN git clone https://go.googlesource.com/go /usr/local/go \
  && cd /usr/local/go/src/ \
  && ./make.bash

使用 ./make.bash 而不是 ./all.bash 会跳过测试阶段,只进行构建。对于CI环境,这通常是可接受的,因为主要目的是获取可用的Go工具链。

要验证构建是否成功,可以在构建完成后添加测试命令:

RUN /usr/local/go/bin/go version

这会输出构建的Go版本信息,确认构建成功完成。

回到顶部