summaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-10-28 14:50:43 +0200
committerGitHub <noreply@github.com>2022-10-28 14:50:43 +0200
commit8bd3f408ffdf1dff8bcbef381bd96285b58ed9ae (patch)
tree90c6e52ed4e72e7ef0d25f277a5c756956040677 /client
parentaa9ac9c8b974bee8151b848050d0111a696483f3 (diff)
parent428e44629fe3c1d8bc4a7f626904448a607179ac (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.go2
-rw-r--r--client/go/vespa/find_home.go47
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
+}