summaryrefslogtreecommitdiffhomepage
path: root/cmd
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@tailscale.com>2021-07-08 07:53:32 -0700
committerBrad Fitzpatrick <brad@danga.com>2021-07-13 12:23:11 -0700
commit1cedd944cfdb07edab2b3237631639b5bf03d5ed (patch)
tree550eda5219baf2b58ae2cc88ae5f9b4a15cc6d71 /cmd
parentede8ec1e20945bf3c262cc3ab8ebbb403138b14d (diff)
downloadtailscale-1cedd944cfdb07edab2b3237631639b5bf03d5ed.tar.xz
tailscale-1cedd944cfdb07edab2b3237631639b5bf03d5ed.zip
cmd/tailscale/cli: diagnose missing tailscaled on 'up'
Fixes #2029 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
Diffstat (limited to 'cmd')
-rw-r--r--cmd/tailscale/cli/diag.go55
-rw-r--r--cmd/tailscale/cli/diag_other.go16
-rw-r--r--cmd/tailscale/cli/status.go2
-rw-r--r--cmd/tailscale/cli/up.go2
-rw-r--r--cmd/tailscale/depaware.txt1
5 files changed, 74 insertions, 2 deletions
diff --git a/cmd/tailscale/cli/diag.go b/cmd/tailscale/cli/diag.go
new file mode 100644
index 000000000..253c8e875
--- /dev/null
+++ b/cmd/tailscale/cli/diag.go
@@ -0,0 +1,55 @@
+// Copyright (c) 2021 Tailscale Inc & AUTHORS All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build linux windows darwin
+
+package cli
+
+import (
+ "fmt"
+ "path/filepath"
+ "runtime"
+ "strings"
+
+ ps "github.com/mitchellh/go-ps"
+)
+
+// fixTailscaledConnectError is called when the local tailscaled has
+// been determined unreachable due to the provided origErr value. It
+// returns either the same error or a better one to help the user
+// understand why tailscaled isn't running for their platform.
+func fixTailscaledConnectError(origErr error) error {
+ procs, err := ps.Processes()
+ if err != nil {
+ return fmt.Errorf("failed to connect to local Tailscaled process and failed to enumerate processes while looking for it")
+ }
+ found := false
+ for _, proc := range procs {
+ base := filepath.Base(proc.Executable())
+ if base == "tailscaled" {
+ found = true
+ break
+ }
+ if runtime.GOOS == "darwin" && base == "IPNExtension" {
+ found = true
+ break
+ }
+ if runtime.GOOS == "windows" && strings.EqualFold(base, "tailscaled.exe") {
+ found = true
+ break
+ }
+ }
+ if !found {
+ switch runtime.GOOS {
+ case "windows":
+ return fmt.Errorf("failed to connect to local tailscaled process; is the Tailscale service running?")
+ 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 ?)")
+ }
+ 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). Got error: %w", origErr)
+}
diff --git a/cmd/tailscale/cli/diag_other.go b/cmd/tailscale/cli/diag_other.go
new file mode 100644
index 000000000..bc67cbeee
--- /dev/null
+++ b/cmd/tailscale/cli/diag_other.go
@@ -0,0 +1,16 @@
+// Copyright (c) 2021 Tailscale Inc & AUTHORS All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build !linux,!windows,!darwin
+
+package cli
+
+import "fmt"
+
+// The github.com/mitchellh/go-ps package doesn't work on all platforms,
+// so just don't diagnose connect failures.
+
+func fixTailscaledConnectError(origErr error) error {
+ return fmt.Errorf("failed to connect to local tailscaled process (is it running?); got: %w", origErr)
+}
diff --git a/cmd/tailscale/cli/status.go b/cmd/tailscale/cli/status.go
index af887f427..9ae378350 100644
--- a/cmd/tailscale/cli/status.go
+++ b/cmd/tailscale/cli/status.go
@@ -57,7 +57,7 @@ var statusArgs struct {
func runStatus(ctx context.Context, args []string) error {
st, err := tailscale.Status(ctx)
if err != nil {
- return err
+ return fixTailscaledConnectError(err)
}
if statusArgs.json {
if statusArgs.active {
diff --git a/cmd/tailscale/cli/up.go b/cmd/tailscale/cli/up.go
index 8c39bbd44..c6f5909cd 100644
--- a/cmd/tailscale/cli/up.go
+++ b/cmd/tailscale/cli/up.go
@@ -294,7 +294,7 @@ func runUp(ctx context.Context, args []string) error {
st, err := tailscale.Status(ctx)
if err != nil {
- fatalf("can't fetch status from tailscaled: %v", err)
+ return fixTailscaledConnectError(err)
}
origAuthURL := st.AuthURL
diff --git a/cmd/tailscale/depaware.txt b/cmd/tailscale/depaware.txt
index 26a459de7..dfc160e37 100644
--- a/cmd/tailscale/depaware.txt
+++ b/cmd/tailscale/depaware.txt
@@ -4,6 +4,7 @@ tailscale.com/cmd/tailscale dependencies: (generated by github.com/tailscale/dep
W github.com/alexbrainman/sspi/internal/common from github.com/alexbrainman/sspi/negotiate
W 💣 github.com/alexbrainman/sspi/negotiate from tailscale.com/net/tshttpproxy
github.com/kballard/go-shellquote from tailscale.com/cmd/tailscale/cli
+ 💣 github.com/mitchellh/go-ps from tailscale.com/cmd/tailscale/cli
github.com/peterbourgon/ff/v2 from github.com/peterbourgon/ff/v2/ffcli
github.com/peterbourgon/ff/v2/ffcli from tailscale.com/cmd/tailscale/cli
github.com/tcnksm/go-httpstat from tailscale.com/net/netcheck