cmd/cli: change socket dir to /var/run on *nix

This commit is contained in:
Cuong Manh Le
2023-12-18 21:30:53 +07:00
committed by Cuong Manh Le
parent 5c24acd952
commit 8dbe828b99
+28 -7
View File
@@ -206,7 +206,11 @@ func initCLI() {
defaultConfigFile = filepath.Join(dir, defaultConfigFile) defaultConfigFile = filepath.Join(dir, defaultConfigFile)
} }
sc.Arguments = append(sc.Arguments, "--homedir="+dir) sc.Arguments = append(sc.Arguments, "--homedir="+dir)
sockPath := filepath.Join(dir, ctrldLogUnixSock) sockDir := dir
if d, err := socketDir(); err == nil {
sockDir = d
}
sockPath := filepath.Join(sockDir, ctrldLogUnixSock)
_ = os.Remove(sockPath) _ = os.Remove(sockPath)
go func() { go func() {
defer func() { defer func() {
@@ -393,7 +397,7 @@ func initCLI() {
{s.Start, true}, {s.Start, true},
} }
if doTasks(tasks) { if doTasks(tasks) {
dir, err := userHomeDir() dir, err := socketDir()
if err != nil { if err != nil {
mainLog.Load().Warn().Err(err).Msg("Service was restarted, but could not ping the control server") mainLog.Load().Warn().Err(err).Msg("Service was restarted, but could not ping the control server")
return return
@@ -416,7 +420,7 @@ func initCLI() {
Short: "Reload the ctrld service", Short: "Reload the ctrld service",
Args: cobra.NoArgs, Args: cobra.NoArgs,
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
dir, err := userHomeDir() dir, err := socketDir()
if err != nil { if err != nil {
mainLog.Load().Fatal().Err(err).Msg("failed to find ctrld home dir") mainLog.Load().Fatal().Err(err).Msg("failed to find ctrld home dir")
} }
@@ -688,7 +692,7 @@ NOTE: Uninstalling will set DNS to values provided by DHCP.`,
checkHasElevatedPrivilege() checkHasElevatedPrivilege()
}, },
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
dir, err := userHomeDir() dir, err := socketDir()
if err != nil { if err != nil {
mainLog.Load().Fatal().Err(err).Msg("failed to find ctrld home dir") mainLog.Load().Fatal().Err(err).Msg("failed to find ctrld home dir")
} }
@@ -790,7 +794,11 @@ func run(appCallback *AppCallback, stopCh chan struct{}) {
homedir = dir homedir = dir
} }
} }
sockPath := filepath.Join(homedir, ctrldLogUnixSock) sockDir := homedir
if d, err := socketDir(); err == nil {
sockDir = d
}
sockPath := filepath.Join(sockDir, ctrldLogUnixSock)
if addr, err := net.ResolveUnixAddr("unix", sockPath); err == nil { if addr, err := net.ResolveUnixAddr("unix", sockPath); err == nil {
if conn, err := net.Dial(addr.Network(), addr.String()); err == nil { if conn, err := net.Dial(addr.Network(), addr.String()); err == nil {
lc := &logConn{conn: conn} lc := &logConn{conn: conn}
@@ -842,7 +850,7 @@ func run(appCallback *AppCallback, stopCh chan struct{}) {
} }
p.router = router.New(&cfg, cdUID != "") p.router = router.New(&cfg, cdUID != "")
cs, err := newControlServer(filepath.Join(homedir, ctrldControlUnixSock)) cs, err := newControlServer(filepath.Join(sockDir, ctrldControlUnixSock))
if err != nil { if err != nil {
mainLog.Load().Warn().Err(err).Msg("could not create control server") mainLog.Load().Warn().Err(err).Msg("could not create control server")
} }
@@ -1295,7 +1303,7 @@ func selfCheckStatus(s service.Service) service.Status {
if status != service.StatusRunning { if status != service.StatusRunning {
return status return status
} }
dir, err := userHomeDir() dir, err := socketDir()
if err != nil { if err != nil {
mainLog.Load().Error().Err(err).Msg("failed to check ctrld listener status: could not get home directory") mainLog.Load().Error().Err(err).Msg("failed to check ctrld listener status: could not get home directory")
return service.StatusUnknown return service.StatusUnknown
@@ -1447,6 +1455,19 @@ func userHomeDir() (string, error) {
return dir, nil return dir, nil
} }
// socketDir returns directory that ctrld will create socket file for running controlServer.
func socketDir() (string, error) {
switch {
case runtime.GOOS == "windows", isMobile():
return userHomeDir()
}
dir := "/var/run"
if ok, _ := dirWritable(dir); !ok {
return userHomeDir()
}
return dir, nil
}
// tryReadingConfig is like tryReadingConfigWithNotice, with notice set to false. // tryReadingConfig is like tryReadingConfigWithNotice, with notice set to false.
func tryReadingConfig(writeDefaultConfig bool) { func tryReadingConfig(writeDefaultConfig bool) {
tryReadingConfigWithNotice(writeDefaultConfig, false) tryReadingConfigWithNotice(writeDefaultConfig, false)