diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-10-28 14:50:43 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-28 14:50:43 +0200 |
commit | 8bd3f408ffdf1dff8bcbef381bd96285b58ed9ae (patch) | |
tree | 90c6e52ed4e72e7ef0d25f277a5c756956040677 /client | |
parent | aa9ac9c8b974bee8151b848050d0111a696483f3 (diff) | |
parent | 428e44629fe3c1d8bc4a7f626904448a607179ac (diff) |
Merge pull request #24639 from vespa-engine/arnej/find-home-and-verify
be more paranoid when detecting VESPA_HOME
Diffstat (limited to 'client')
-rw-r--r-- | client/go/script-utils/main.go | 2 | ||||
-rw-r--r-- | client/go/vespa/find_home.go | 47 |
2 files changed, 33 insertions, 16 deletions
diff --git a/client/go/script-utils/main.go b/client/go/script-utils/main.go index 642bdad39ed..b2de56cf05a 100644 --- a/client/go/script-utils/main.go +++ b/client/go/script-utils/main.go @@ -23,12 +23,12 @@ func basename(s string) string { func main() { defer handleSimplePanic() + _ = vespa.FindAndVerifyVespaHome() action := basename(os.Args[0]) if action == "script-utils" && len(os.Args) > 1 { action = os.Args[1] os.Args = os.Args[1:] } - _ = vespa.FindHome() switch action { case "start-c-binary": os.Exit(startcbinary.Run(os.Args[1:])) diff --git a/client/go/vespa/find_home.go b/client/go/vespa/find_home.go index 975a1046960..02ebc5cc1a1 100644 --- a/client/go/vespa/find_home.go +++ b/client/go/vespa/find_home.go @@ -8,15 +8,20 @@ import ( "fmt" "os" "strings" + + "github.com/vespa-engine/vespa/client/go/trace" + "github.com/vespa-engine/vespa/client/go/util" +) + +const ( + defaultVespaInstallDir = "/opt/vespa" + scriptUtilsFilename = "libexec/vespa/script-utils" ) func FindHome() string { - const ( - defaultInstallDir = "opt/vespa" - commonEnvSh = "libexec/vespa/common-env.sh" - ) // use env var if it is set: if ev := os.Getenv("VESPA_HOME"); ev != "" { + trace.Debug("VH set:", ev) return ev } // some helper functions... @@ -27,22 +32,22 @@ func FindHome() string { } return path[:idx] } - var isFile = func(fn string) bool { - st, err := os.Stat(fn) - return err == nil && st.Mode().IsRegular() - } var findPath = func() string { myProgName := os.Args[0] if strings.HasPrefix(myProgName, "/") { + trace.Debug("findPath", myProgName, "=>", dirName(myProgName)) return dirName(myProgName) } if strings.Contains(myProgName, "/") { - dir, _ := os.Getwd() - return dir + "/" + dirName(myProgName) + curDir, _ := os.Getwd() + path := fmt.Sprintf("%s/%s", curDir, dirName(myProgName)) + trace.Debug("findPath", myProgName, "=>", path) + return path } for _, dir := range strings.Split(os.Getenv("PATH"), ":") { - fn := dir + "/" + myProgName - if isFile(fn) { + fn := fmt.Sprintf("%s/%s", dir, myProgName) + if util.IsRegularFile(fn) { + trace.Debug("findPath", myProgName, "=>", dir) return dir } } @@ -50,14 +55,16 @@ func FindHome() string { } // detect path from argv[0] for path := findPath(); path != ""; path = dirName(path) { - if isFile(path + "/" + commonEnvSh) { + mySelf := fmt.Sprintf("%s/%s", path, scriptUtilsFilename) + if util.IsRegularFile(mySelf) { + trace.Debug("found", mySelf, "VH =>", path) os.Setenv("VESPA_HOME", path) return path } } // fallback - os.Setenv("VESPA_HOME", defaultInstallDir) - return defaultInstallDir + os.Setenv("VESPA_HOME", defaultVespaInstallDir) + return defaultVespaInstallDir } func HasFileUnderVespaHome(fn string) (bool, string) { @@ -71,3 +78,13 @@ func HasFileUnderVespaHome(fn string) (bool, string) { } return false, "" } + +func FindAndVerifyVespaHome() string { + vespaHome := FindHome() + myself := fmt.Sprintf("%s/%s", vespaHome, scriptUtilsFilename) + if !util.IsExecutableFile(myself) { + trace.Warning("missing or bad file:", myself) + util.JustExitMsg("Not a valid VESPA_HOME: " + vespaHome) + } + return vespaHome +} |