From fd92fbd69efb40747aee7902bc7ca96222d7e5d3 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Sat, 21 Jan 2023 12:47:57 -0800 Subject: [PATCH] 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 --- cmd/tailscale/cli/diag.go | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/cmd/tailscale/cli/diag.go b/cmd/tailscale/cli/diag.go index a1d500949..4df526de9 100644 --- a/cmd/tailscale/cli/diag.go +++ b/cmd/tailscale/cli/diag.go @@ -8,11 +8,13 @@ package cli import ( "fmt" + "os/exec" "path/filepath" "runtime" "strings" ps "github.com/mitchellh/go-ps" + "tailscale.com/version/distro" ) // fixTailscaledConnectError is called when the local tailscaled has @@ -47,9 +49,27 @@ func fixTailscaledConnectError(origErr error) error { case "darwin": return fmt.Errorf("failed to connect to local Tailscale service; is Tailscale running?") 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 (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 +}