diff mbox series

[v2,1/1] package/go: fix go-bootstrap when parent dir contains invalid .git

Message ID 20230728045411.1023408-1-christian@aperture.us
State Accepted
Headers show
Series [v2,1/1] package/go: fix go-bootstrap when parent dir contains invalid .git | expand

Commit Message

Christian Stewart July 28, 2023, 4:54 a.m. UTC
Building host-go within docker fails:

error obtaining VCS status: exit status 128
	Use -buildvcs=false to disable VCS stamping.

Reproduction of the issue:

mkdir go-issue-61620
cd ./go-issue-61620
wget https://go.dev/dl/go1.19.11.src.tar.gz
mkdir go-bootstrap
tar -xf go1.19.11.src.tar.gz -C ./go-bootstrap --strip-components=1
cd ./go-bootstrap/src/
bash make.bash
cd ../../
wget https://go.dev/dl/go1.20.6.src.tar.gz
mkdir go
tar -xf go1.20.6.src.tar.gz -C ./go/ --strip-components=1
printf "gitdir: ../../does/not/exist/.git" > ./.git
cd ./go/src/
GOROOT_BOOTSTRAP=$(pwd)/../../go-bootstrap/ bash make.bash

The error only occurs when the .git that git detects in the parent directory of
the GOROOT_BOOTSTRAP is invalid or not present causing errors when running `git`
commands within GOROOT_BOOTSTRAP.

Report: https://lists.buildroot.org/pipermail/buildroot/2023-July/671344.html
Fixes: https://gitlab.com/buildroot.org/buildroot/-/jobs/4725186525
Upstream issue: https://github.com/golang/go/issues/61620
Upstream PR: https://github.com/golang/go/pull/61621

Signed-off-by: Christian Stewart <christian@aperture.us>

---

v1 -> v2:

 - sort HOST_GO_MAKE_ENV alphabetically
 - simplify the patch to set buildvcs=false unconditionally for go-bootstrap
 - create a minimal reproduction of the issue
 - simplify the commit message with the minimal reproduction

Signed-off-by: Christian Stewart <christian@aperture.us>
---
 ...ldvcs-false-when-building-go-bootstr.patch | 73 +++++++++++++++++++
 package/go/go.mk                              |  1 +
 2 files changed, 74 insertions(+)
 create mode 100644 package/go/0002-cmd-dist-set-buildvcs-false-when-building-go-bootstr.patch

Comments

Christian Stewart July 28, 2023, 4:55 a.m. UTC | #1
Hi all,

On Thu, Jul 27, 2023 at 9:54 PM Christian Stewart <christian@aperture.us> wrote:
> diff --git a/package/go/go.mk b/package/go/go.mk
> index efa47e5781..aef8ab2240 100644
> --- a/package/go/go.mk
> +++ b/package/go/go.mk
> @@ -125,6 +125,7 @@ HOST_GO_HOST_ENV = \
>  # HOSTCC_NOCCACHE.  See https://github.com/golang/go/issues/11685.
>  HOST_GO_MAKE_ENV = \
>         GO111MODULE=off \
> +       GOBOOTSTRAP_BUILDVCS=0 \
>         GOCACHE=$(HOST_GO_HOST_CACHE) \
>         GOROOT_BOOTSTRAP=$(HOST_GO_BOOTSTRAP_STAGE2_ROOT) \
>         GOROOT_FINAL=$(HOST_GO_ROOT) \

This hunk can be dropped. All that's needed is the .patch.

Best regards,
Christian
Thomas Petazzoni July 28, 2023, 7:28 p.m. UTC | #2
On Thu, 27 Jul 2023 21:54:11 -0700
Christian Stewart via buildroot <buildroot@buildroot.org> wrote:

> Building host-go within docker fails:
> 
> error obtaining VCS status: exit status 128
> 	Use -buildvcs=false to disable VCS stamping.
> 
> Reproduction of the issue:
> 
> mkdir go-issue-61620
> cd ./go-issue-61620
> wget https://go.dev/dl/go1.19.11.src.tar.gz
> mkdir go-bootstrap
> tar -xf go1.19.11.src.tar.gz -C ./go-bootstrap --strip-components=1
> cd ./go-bootstrap/src/
> bash make.bash
> cd ../../
> wget https://go.dev/dl/go1.20.6.src.tar.gz
> mkdir go
> tar -xf go1.20.6.src.tar.gz -C ./go/ --strip-components=1
> printf "gitdir: ../../does/not/exist/.git" > ./.git
> cd ./go/src/
> GOROOT_BOOTSTRAP=$(pwd)/../../go-bootstrap/ bash make.bash
> 
> The error only occurs when the .git that git detects in the parent directory of
> the GOROOT_BOOTSTRAP is invalid or not present causing errors when running `git`
> commands within GOROOT_BOOTSTRAP.
> 
> Report: https://lists.buildroot.org/pipermail/buildroot/2023-July/671344.html
> Fixes: https://gitlab.com/buildroot.org/buildroot/-/jobs/4725186525
> Upstream issue: https://github.com/golang/go/issues/61620
> Upstream PR: https://github.com/golang/go/pull/61621
> 
> Signed-off-by: Christian Stewart <christian@aperture.us>
> 
> ---

Applied to master after dropping the change in go.mk, as you specified.
Thanks!

Thomas
diff mbox series

Patch

diff --git a/package/go/0002-cmd-dist-set-buildvcs-false-when-building-go-bootstr.patch b/package/go/0002-cmd-dist-set-buildvcs-false-when-building-go-bootstr.patch
new file mode 100644
index 0000000000..e7158a2b3f
--- /dev/null
+++ b/package/go/0002-cmd-dist-set-buildvcs-false-when-building-go-bootstr.patch
@@ -0,0 +1,73 @@ 
+From 6b05378097c6a386ed9912d2471976dc39504e86 Mon Sep 17 00:00:00 2001
+From: Christian Stewart <christian@aperture.us>
+Date: Thu, 27 Jul 2023 21:28:47 -0700
+Subject: [PATCH] cmd/dist: set buildvcs=false when building go-bootstrap
+
+When building go-bootstrap as part of the make.bash process, the cmd/dist
+invokes the bootstrap Go compiler to build the go_bootstrap tool:
+
+${GOROOT_BOOTSTRAP}/bin/go install -tags=math_big_pure_go compiler_bootstrap purego bootstrap/cmd/...
+
+If there is an invalid .git directory in a parent of ${GOROOT_BOOTSTRAP},
+make.bash will fail. Reproduction of the issue:
+
+  mkdir go-issue-61620
+  cd ./go-issue-61620
+  wget https://go.dev/dl/go1.19.11.src.tar.gz
+  mkdir go-bootstrap
+  tar -xf go1.19.11.src.tar.gz -C ./go-bootstrap --strip-components=1
+  cd ./go-bootstrap/src/
+  bash make.bash
+  cd ../../
+  wget https://go.dev/dl/go1.20.6.src.tar.gz
+  mkdir go
+  tar -xf go1.20.6.src.tar.gz -C ./go/ --strip-components=1
+  printf "gitdir: ../../does/not/exist/.git" > ./.git
+  cd ./go/src/
+  GOROOT_BOOTSTRAP=$(pwd)/../../go-bootstrap/ bash make.bash
+
+The build fails with the following error:
+
+  Building Go toolchain1 using [snip]/go-1.19.10.
+  error obtaining VCS status: exit status 128
+    Use -buildvcs=false to disable VCS stamping.
+  go tool dist: FAILED: [snip]/go-1.19.10/bin/go install -tags=math_big_pure_go \
+    compiler_bootstrap purego bootstrap/cmd/...: exit status 1
+
+This change unconditionally sets -buildvcs=false when compiling go-bootstrap. We
+don't need the revision information in those binaries anyway. Setting this flag
+was previously not done as we were unsure if the go-bootstrap compiler would be
+new enough to support the buildvcs build flag. Since Go 1.20.x, Go 1.19.x is the
+minimum version for go-bootstrap, and supports -buildvcs=false. We can now set
+-buildvcs=false without worrying about compatibility.
+
+Related: https://github.com/golang/go/issues/54852
+Fixes: https://github.com/golang/go/issues/61620
+
+---
+
+Upstream PR: https://github.com/golang/go/pull/61621
+
+Signed-off-by: Christian Stewart <christian@aperture.us>
+
+---
+ src/cmd/dist/buildtool.go | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/cmd/dist/buildtool.go b/src/cmd/dist/buildtool.go
+index a528d7aa76..3b411d6ebb 100644
+--- a/src/cmd/dist/buildtool.go
++++ b/src/cmd/dist/buildtool.go
+@@ -221,6 +221,9 @@ func bootstrapBuildTools() {
+ 	cmd := []string{
+ 		pathf("%s/bin/go", goroot_bootstrap),
+ 		"install",
++		// Fixes cases where an invalid .git is present in a parent of GOROOT_BOOTSTRAP.
++		// See: https://github.com/golang/go/issues/61620
++		"-buildvcs=false",
+ 		"-tags=math_big_pure_go compiler_bootstrap purego",
+ 	}
+ 	if vflag > 0 {
+-- 
+2.41.0
+
diff --git a/package/go/go.mk b/package/go/go.mk
index efa47e5781..aef8ab2240 100644
--- a/package/go/go.mk
+++ b/package/go/go.mk
@@ -125,6 +125,7 @@  HOST_GO_HOST_ENV = \
 # HOSTCC_NOCCACHE.  See https://github.com/golang/go/issues/11685.
 HOST_GO_MAKE_ENV = \
 	GO111MODULE=off \
+	GOBOOTSTRAP_BUILDVCS=0 \
 	GOCACHE=$(HOST_GO_HOST_CACHE) \
 	GOROOT_BOOTSTRAP=$(HOST_GO_BOOTSTRAP_STAGE2_ROOT) \
 	GOROOT_FINAL=$(HOST_GO_ROOT) \