cmd/tailscale/cli: only give systemctl hint on systemd systems
Per recent user confusion on a QNAP issue. Change-Id: Ibda00013df793fb831f4088b40be8a04dfad17c2 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>pull/7035/head
parent
d5100e0910
commit
fd92fbd69e
|
@ -8,11 +8,13 @@ package cli
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
ps "github.com/mitchellh/go-ps"
|
ps "github.com/mitchellh/go-ps"
|
||||||
|
"tailscale.com/version/distro"
|
||||||
)
|
)
|
||||||
|
|
||||||
// fixTailscaledConnectError is called when the local tailscaled has
|
// fixTailscaledConnectError is called when the local tailscaled has
|
||||||
|
@ -47,9 +49,27 @@ func fixTailscaledConnectError(origErr error) error {
|
||||||
case "darwin":
|
case "darwin":
|
||||||
return fmt.Errorf("failed to connect to local Tailscale service; is Tailscale running?")
|
return fmt.Errorf("failed to connect to local Tailscale service; is Tailscale running?")
|
||||||
case "linux":
|
case "linux":
|
||||||
return fmt.Errorf("failed to connect to local tailscaled; it doesn't appear to be running (sudo systemctl start tailscaled ?)")
|
var hint string
|
||||||
|
if isSystemdSystem() {
|
||||||
|
hint = " (sudo systemctl start tailscaled ?)"
|
||||||
|
}
|
||||||
|
return fmt.Errorf("failed to connect to local tailscaled; it doesn't appear to be running%s", hint)
|
||||||
}
|
}
|
||||||
return fmt.Errorf("failed to connect to local tailscaled process; it doesn't appear to be running")
|
return fmt.Errorf("failed to connect to local tailscaled process; it doesn't appear to be running")
|
||||||
}
|
}
|
||||||
return fmt.Errorf("failed to connect to local tailscaled (which appears to be running as %v, pid %v). Got error: %w", foundProc.Executable(), foundProc.Pid(), origErr)
|
return fmt.Errorf("failed to connect to local tailscaled (which appears to be running as %v, pid %v). Got error: %w", foundProc.Executable(), foundProc.Pid(), origErr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// isSystemdSystem reports whether the current machine uses systemd
|
||||||
|
// and in particular whether the systemctl command is available.
|
||||||
|
func isSystemdSystem() bool {
|
||||||
|
if runtime.GOOS != "linux" {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
switch distro.Get() {
|
||||||
|
case distro.QNAP, distro.Gokrazy, distro.Synology:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
_, err := exec.LookPath("systemctl")
|
||||||
|
return err == nil
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue