From d4f7b45c3fe483d3864534642f10cf8f6ee23ae9 Mon Sep 17 00:00:00 2001 From: Sebastien Douheret Date: Mon, 18 Sep 2017 18:14:37 +0200 Subject: [PATCH] Fix syncthing binary path detection. --- lib/model/folders.go | 2 +- lib/syncthing/st.go | 32 +++++++++++++++++++++----------- lib/xdsconfig/config.go | 2 +- lib/xdsconfig/fileconfig.go | 5 +++-- 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/lib/model/folders.go b/lib/model/folders.go index ed0078e..7c08a88 100644 --- a/lib/model/folders.go +++ b/lib/model/folders.go @@ -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 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) diff --git a/lib/xdsconfig/config.go b/lib/xdsconfig/config.go index 53d1639..f3cba4a 100644 --- a/lib/xdsconfig/config.go +++ b/lib/xdsconfig/config.go @@ -37,7 +37,7 @@ type Options struct { const ( DefaultAPIVersion = "1" DefaultPort = "8000" - DefaultShareDir = "/mnt/share" + DefaultShareDir = "${HOME}/.xds-server/projects" DefaultSdkRootDir = "/xdt/sdk" ) diff --git a/lib/xdsconfig/fileconfig.go b/lib/xdsconfig/fileconfig.go index a0724af..2651caf 100644 --- a/lib/xdsconfig/fileconfig.go +++ b/lib/xdsconfig/fileconfig.go @@ -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) } -- 2.16.6