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
Brad Fitzpatrick 2 years ago committed by Brad Fitzpatrick
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…
Cancel
Save