From d4f7b45c3fe483d3864534642f10cf8f6ee23ae9 Mon Sep 17 00:00:00 2001
From: Sebastien Douheret <sebastien.douheret@iot.bzh>
Date: Mon, 18 Sep 2017 18:14:37 +0200
Subject: Fix syncthing binary path detection.

---
 lib/syncthing/st.go | 32 +++++++++++++++++++++-----------
 1 file changed, 21 insertions(+), 11 deletions(-)

(limited to 'lib/syncthing')

diff --git a/lib/syncthing/st.go b/lib/syncthing/st.go
index c76db5a..bc65299 100644
--- a/lib/syncthing/st.go
+++ b/lib/syncthing/st.go
@@ -91,7 +91,6 @@ type FolderStatus struct {
 // NewSyncThing creates a new instance of Syncthing
 func NewSyncThing(conf *xdsconfig.Config, log *logrus.Logger) *SyncThing {
 	var url, apiKey, home, binDir string
-	var err error
 
 	stCfg := conf.FileConf.SThgConf
 	if stCfg != nil {
@@ -109,13 +108,7 @@ func NewSyncThing(conf *xdsconfig.Config, log *logrus.Logger) *SyncThing {
 	}
 
 	if home == "" {
-		home = "/mnt/share"
-	}
-
-	if binDir == "" {
-		if binDir, err = filepath.Abs(filepath.Dir(os.Args[0])); err != nil {
-			binDir = "/opt/AGL/bin"
-		}
+		panic("home parameter must be set")
 	}
 
 	s := SyncThing{
@@ -136,17 +129,34 @@ func NewSyncThing(conf *xdsconfig.Config, log *logrus.Logger) *SyncThing {
 
 // Start Starts syncthing process
 func (s *SyncThing) startProc(exeName string, args []string, env []string, eChan *chan ExitChan) (*exec.Cmd, error) {
+	var err error
+	var exePath string
 
 	// Kill existing process (useful for debug ;-) )
 	if os.Getenv("DEBUG_MODE") != "" {
 		exec.Command("bash", "-c", "pkill -9 "+exeName).Output()
 	}
 
-	path, err := exec.LookPath(path.Join(s.binDir, exeName))
+	// When not set (or set to '.') set bin to path of xds-agent executable
+	bdir := s.binDir
+	if bdir == "" || bdir == "." {
+		exe, _ := os.Executable()
+		if exeAbsPath, err := filepath.Abs(exe); err == nil {
+			if exePath, err := filepath.EvalSymlinks(exeAbsPath); err == nil {
+				bdir = filepath.Dir(exePath)
+			}
+		}
+	}
+
+	exePath, err = exec.LookPath(path.Join(bdir, exeName))
 	if err != nil {
-		return nil, fmt.Errorf("Cannot find %s executable in %s", exeName, s.binDir)
+		// Let's try in /opt/AGL/bin
+		exePath, err = exec.LookPath(path.Join("opt", "AGL", "bin", exeName))
+		if err != nil {
+			return nil, fmt.Errorf("Cannot find %s executable in %s", exeName, bdir)
+		}
 	}
-	cmd := exec.Command(path, args...)
+	cmd := exec.Command(exePath, args...)
 	cmd.Env = os.Environ()
 	for _, ev := range env {
 		cmd.Env = append(cmd.Env, ev)
-- 
cgit