From f8e59e8399d91101d53fd1e8311e96c8e5c7f841 Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Sat, 14 Nov 2015 00:24:13 -0800 Subject: [PATCH] 386: Support minio server on 32bit linux. --- pkg/fs/config.go | 19 ++++++++++++++----- utils.go | 18 +++++++++++++----- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/pkg/fs/config.go b/pkg/fs/config.go index bd6022d3e..d2452973c 100644 --- a/pkg/fs/config.go +++ b/pkg/fs/config.go @@ -20,16 +20,16 @@ import ( "os" "os/user" "path/filepath" + "runtime" + "strconv" "github.com/minio/minio-xl/pkg/probe" "github.com/minio/minio-xl/pkg/quick" ) -// workaround for docker images with fully static binary. -// for static binaries NSS library will not be a part of the static binary -// hence user.Current() fails -// more here : http://gnu.ist.utl.pt/software/libc/FAQ.html -// FAQ says : NSS (for details just type `info libc "Name Service Switch"') won't work properly without shared libraries +// Workaround for docker images with fully static binary and 32bit linux operating systems. +// For static binaries NSS library will not be a part of the static binary hence user.Current() fails. +// For 32bit linux CGO is not enabled so it will not provide linux specific codebase. func userCurrent() (*user.User, *probe.Error) { if os.Getenv("DOCKERIMAGE") == "1" { wd, err := os.Getwd() @@ -38,6 +38,15 @@ func userCurrent() (*user.User, *probe.Error) { } return &user.User{Uid: "0", Gid: "0", Username: "root", Name: "root", HomeDir: wd}, nil } + if runtime.GOARCH == "386" && runtime.GOOS == "linux" { + return &user.User{ + Uid: strconv.Itoa(os.Getuid()), + Gid: strconv.Itoa(os.Getgid()), + Username: os.Getenv("USER"), + Name: os.Getenv("USER"), + HomeDir: os.Getenv("HOME"), + }, nil + } user, err := user.Current() if err != nil { return nil, probe.NewError(err) diff --git a/utils.go b/utils.go index 888693d0f..d2c235e94 100644 --- a/utils.go +++ b/utils.go @@ -20,6 +20,7 @@ import ( "encoding/base64" "os" "os/user" + "runtime" "strconv" "strings" @@ -56,11 +57,9 @@ func isMaxObjectSize(size string) bool { return false } -// workaround for docker images with fully static binary. -// for static binaries NSS library will not be a part of the static binary -// hence user.Current() fails -// more here : http://gnu.ist.utl.pt/software/libc/FAQ.html -// FAQ says : NSS (for details just type `info libc "Name Service Switch"') won't work properly without shared libraries +// Workaround for docker images with fully static binary and 32bit linux operating systems. +// For static binaries NSS library will not be a part of the static binary hence user.Current() fails. +// For 32bit linux CGO is not enabled so it will not provide linux specific codebase. func userCurrent() (*user.User, *probe.Error) { if os.Getenv("DOCKERIMAGE") == "1" { wd, err := os.Getwd() @@ -69,6 +68,15 @@ func userCurrent() (*user.User, *probe.Error) { } return &user.User{Uid: "0", Gid: "0", Username: "root", Name: "root", HomeDir: wd}, nil } + if runtime.GOARCH == "386" && runtime.GOOS == "linux" { + return &user.User{ + Uid: strconv.Itoa(os.Getuid()), + Gid: strconv.Itoa(os.Getgid()), + Username: os.Getenv("USER"), + Name: os.Getenv("USER"), + HomeDir: os.Getenv("HOME"), + }, nil + } user, err := user.Current() if err != nil { return nil, probe.NewError(err)