daemon/logger/gcplogs: remove ensureHomeIfIAmStatic workaround
This function was added inb86e3bee5a
to work around an issue in os/user.Current(), which SEGFAULTS when compiling statically with cgo enabled (see golang/go#13470). We hit similar issues in other parts, and contributed a "osusergo" build- tag in https://go-review.googlesource.com/c/go/+/330753. The "osusergo" build tag must be set when compiling static binaries with cgo enabled. If that build-tag is set, the cgo implementation for user.Current() won't be used, and a pure-go implementation is used instead; https://github.com/golang/go/blob/go1.19.4/src/os/user/cgo_lookup_unix.go#L5 With the above in place, we no longer need this workaround, and can remove the ensureHomeIfIAmStatic() function. Signed-off-by: Sebastiaan van Stijn <github@gone.nl> (cherry picked from commit155e39187c
) Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
2b5ec481e7
commit
770ace39d8
3 changed files with 0 additions and 44 deletions
|
@ -117,15 +117,6 @@ func New(info logger.Info) (logger.Logger, error) {
|
|||
return nil, fmt.Errorf("No project was specified and couldn't read project from the metadata server. Please specify a project")
|
||||
}
|
||||
|
||||
// Issue #29344: gcplogs segfaults (static binary)
|
||||
// If HOME is not set, logging.NewClient() will call os/user.Current() via oauth2/google.
|
||||
// However, in static binary, os/user.Current() leads to segfault due to a glibc issue that won't be fixed
|
||||
// in a short term. (golang/go#13470, https://sourceware.org/bugzilla/show_bug.cgi?id=19341)
|
||||
// So we forcibly set HOME so as to avoid call to os/user/Current()
|
||||
if err := ensureHomeIfIAmStatic(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
c, err := logging.NewClient(context.Background(), project)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -1,27 +0,0 @@
|
|||
package gcplogs // import "github.com/docker/docker/daemon/logger/gcplogs"
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"github.com/docker/docker/dockerversion"
|
||||
"github.com/docker/docker/pkg/homedir"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// ensureHomeIfIAmStatic ensure $HOME to be set if dockerversion.IAmStatic is "true".
|
||||
// See issue #29344: gcplogs segfaults (static binary)
|
||||
// If HOME is not set, logging.NewClient() will call os/user.Current() via oauth2/google.
|
||||
// If compiling statically, make sure osusergo build tag is also used to prevent a segfault
|
||||
// due to a glibc issue that won't be fixed in a short term
|
||||
// (see golang/go#13470, https://sourceware.org/bugzilla/show_bug.cgi?id=19341).
|
||||
// So we forcibly set HOME so as to avoid call to os/user/Current()
|
||||
func ensureHomeIfIAmStatic() error {
|
||||
// Note: dockerversion.IAmStatic is only available for linux.
|
||||
// So we need to use them in this gcplogging_linux.go rather than in gcplogging.go
|
||||
if dockerversion.IAmStatic == "true" && os.Getenv("HOME") == "" {
|
||||
home := homedir.Get()
|
||||
logrus.Warnf("gcplogs requires HOME to be set for static daemon binary. Forcibly setting HOME to %s.", home)
|
||||
os.Setenv("HOME", home)
|
||||
}
|
||||
return nil
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
//go:build !linux
|
||||
// +build !linux
|
||||
|
||||
package gcplogs // import "github.com/docker/docker/daemon/logger/gcplogs"
|
||||
|
||||
func ensureHomeIfIAmStatic() error {
|
||||
return nil
|
||||
}
|
Loading…
Reference in a new issue