Fix syncthing binary path detection.
authorSebastien Douheret <sebastien.douheret@iot.bzh>
Mon, 18 Sep 2017 16:14:37 +0000 (18:14 +0200)
committerSebastien Douheret <sebastien.douheret@iot.bzh>
Mon, 18 Sep 2017 16:14:37 +0000 (18:14 +0200)
lib/model/folders.go
lib/syncthing/st.go
lib/xdsconfig/config.go
lib/xdsconfig/fileconfig.go

index ed0078e..7c08a88 100644 (file)
@@ -197,7 +197,7 @@ func (f *Folders) createUpdate(newF folder.FolderConfig, create bool, initial bo
        // SYNCTHING
        case folder.TypeCloudSync:
                if f.SThg == nil {
-                       return nil, fmt.Errorf("ClownSync type not supported (syncthing not initialized)")
+                       return nil, fmt.Errorf("CloudSync type not supported (syncthing not initialized)")
                }
                fld = f.SThg.NewFolderST(f.Conf)
        // PATH MAP
index c76db5a..bc65299 100644 (file)
@@ -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)
index 53d1639..f3cba4a 100644 (file)
@@ -37,7 +37,7 @@ type Options struct {
 const (
        DefaultAPIVersion = "1"
        DefaultPort       = "8000"
-       DefaultShareDir   = "/mnt/share"
+       DefaultShareDir   = "${HOME}/.xds-server/projects"
        DefaultSdkRootDir = "/xdt/sdk"
 )
 
index a0724af..2651caf 100644 (file)
@@ -59,11 +59,12 @@ func readGlobalConfig(c *Config, confFile string) error {
        searchIn = append(searchIn, "/etc/xds-server/config.json")
 
        exePath := os.Args[0]
-       exeAbsPath, err := filepath.Abs(os.Args[0])
+       ee, _ := os.Executable()
+       exeAbsPath, err := filepath.Abs(ee)
        if err == nil {
                exePath, err = filepath.EvalSymlinks(exeAbsPath)
                if err == nil {
-                       exePath = filepath.Dir(exePath)
+                       exePath = filepath.Dir(ee)
                } else {
                        exePath = filepath.Dir(exeAbsPath)
                }