From 8d6d7494cf0f9c0f14b5082820082e85576a41da Mon Sep 17 00:00:00 2001 From: Sebastien Douheret Date: Mon, 18 Sep 2017 17:46:09 +0200 Subject: [PATCH] Improved syncthing binary path detection. Signed-off-by: Sebastien Douheret --- lib/syncthing/st.go | 28 +++++++++++++++------------- lib/xdsconfig/fileconfig.go | 10 ++++++---- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/lib/syncthing/st.go b/lib/syncthing/st.go index 1f78757..660738d 100644 --- a/lib/syncthing/st.go +++ b/lib/syncthing/st.go @@ -48,7 +48,6 @@ type ExitChan 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 { @@ -66,13 +65,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 = "/usr/local/bin" - } + panic("home parameter must be set") } s := SyncThing{ @@ -89,6 +82,8 @@ 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") != "" { @@ -98,16 +93,23 @@ func (s *SyncThing) startProc(exeName string, args []string, env []string, eChan // When not set (or set to '.') set bin to path of xds-agent executable bdir := s.binDir if bdir == "" || bdir == "." { - if dir, err := filepath.Abs(filepath.Dir(os.Args[0])); err == nil { - bdir = dir + exe, _ := os.Executable() + if exeAbsPath, err := filepath.Abs(exe); err == nil { + if exePath, err := filepath.EvalSymlinks(exeAbsPath); err == nil { + bdir = filepath.Dir(exePath) + } } } - path, err := exec.LookPath(path.Join(bdir, exeName)) + exePath, err = exec.LookPath(path.Join(bdir, exeName)) if err != nil { - return nil, fmt.Errorf("Cannot find %s executable in %s", exeName, bdir) + // 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/fileconfig.go b/lib/xdsconfig/fileconfig.go index 2795206..1ad2ea3 100644 --- a/lib/xdsconfig/fileconfig.go +++ b/lib/xdsconfig/fileconfig.go @@ -75,11 +75,13 @@ func updateConfigFromFile(c *Config, confFile string) (*FileConfig, error) { } // Support environment variables (IOW ${MY_ENV_VAR} syntax) in agent-config.json - for _, field := range []*string{ + vars := []*string{ &fCfg.LogsDir, - &fCfg.SThgConf.Home, - &fCfg.SThgConf.BinDir} { - + } + if fCfg.SThgConf != nil { + vars = append(vars, &fCfg.SThgConf.Home, &fCfg.SThgConf.BinDir) + } + for _, field := range vars { var err error *field, err = common.ResolveEnvVar(*field) if err != nil { -- 2.16.6