func makeServerCommandLine(g *libkb.GlobalContext, cl libkb.CommandLine, forkType keybase1.ForkType) (arg0 string, args []string, err error) { // ForkExec requires an absolute path to the binary. LookPath() gets this // for us, or correctly leaves arg0 alone if it's already a path. arg0, err = exec.LookPath(os.Args[0]) if err != nil { return } // Fixme: This isn't ideal, it would be better to specify when the args // are defined if they should be reexported to the server, and if so, then // we should automate the reconstruction of the argument vector. Let's do // this when we yank out keybase/cli bools := []string{ "no-debug", "api-dump-unsafe", "plain-logging", } strings := []string{ "home", "server", "config", "session", "proxy", "username", "gpg-home", "gpg", "secret-keyring", "pid-file", "socket-file", "gpg-options", "local-rpc-debug-unsafe", "run-mode", "timers", "tor-mode", "tor-proxy", "tor-hidden-address", } args = append(args, arg0) // Always pass --debug to the server for more verbose logging, as other // startup mechanisms do (launchd, run_keybase, etc). This can be // overridden with --no-debug though. args = append(args, "--debug") for _, b := range bools { if isSet, isTrue := cl.GetBool(b, true); isSet && isTrue { args = append(args, "--"+b) } } for _, s := range strings { if v := cl.GetGString(s); len(v) > 0 { args = append(args, "--"+s, v) } } // If there is no explicit log file add one when autoforking. // otherwise it was added in the previous block already. if g.Env.GetLogFile() == "" { args = append(args, "--log-file", g.Env.GetDefaultLogFile()) } args = append(args, "service") var chdir string chdir, err = G.Env.GetServiceSpawnDir() if err != nil { return } G.Log.Debug("| Setting run directory for keybase service to %s", chdir) args = append(args, "--chdir", chdir) if forkType == keybase1.ForkType_AUTO { args = append(args, "--auto-forked") } else if forkType == keybase1.ForkType_WATCHDOG { args = append(args, "--watchdog-forked") } else if forkType == keybase1.ForkType_LAUNCHD { args = append(args, "--launchd-forked") } G.Log.Debug("| Made server args: %s %v", arg0, args) return }
func makeServerCommandLine(cl libkb.CommandLine) (arg0 string, args []string, err error) { // ForkExec requires an absolute path to the binary. LookPath() gets this // for us, or correctly leaves arg0 alone if it's already a path. arg0, err = exec.LookPath(os.Args[0]) if err != nil { return } // Fixme: This isn't ideal, it would be better to specify when the args // are defined if they should be reexported to the server, and if so, then // we should automate the reconstruction of the argument vector. Let's do // this when we yank out keybase/cli bools := []string{ "debug", "api-dump-unsafe", "plain-logging", } strings := []string{ "home", "server", "config", "session", "proxy", "username", "gpg-home", "gpg", "secret-keyring", "pid-file", "socket-file", "gpg-options", "local-rpc-debug-unsafe", "run-mode", "timers", } args = append(args, arg0) for _, b := range bools { if isSet, isTrue := cl.GetBool(b, true); isSet && isTrue { args = append(args, "--"+b) } } for _, s := range strings { if v := cl.GetGString(s); len(v) > 0 { args = append(args, "--"+s, v) } } args = append(args, "service") var chdir string chdir, err = G.Env.GetServiceSpawnDir() if err != nil { return } G.Log.Debug("| Setting run directory for keybase service to %s", chdir) args = append(args, "--chdir", chdir) G.Log.Debug("| Made server args: %s %v", arg0, args) return }