diff --git a/cmd/tailscaled/tailscaled.go b/cmd/tailscaled/tailscaled.go index ee7792303..974a0ed88 100644 --- a/cmd/tailscaled/tailscaled.go +++ b/cmd/tailscaled/tailscaled.go @@ -178,8 +178,7 @@ func main() { osshare.SetFileSharingEnabled(false, logger.Discard) if err != nil { - // No need to log; the func already did - os.Exit(1) + log.Fatal(err) } } @@ -301,7 +300,7 @@ func run() error { linkMon, err := monitor.New(logf) if err != nil { - log.Fatalf("creating link monitor: %v", err) + return fmt.Errorf("monitor.New: %w", err) } pol.Logtail.SetLinkMonitor(linkMon) @@ -310,8 +309,7 @@ func run() error { dialer := new(tsdial.Dialer) // mutated below (before used) e, useNetstack, err := createEngine(logf, linkMon, dialer) if err != nil { - logf("wgengine.New: %v", err) - return err + return fmt.Errorf("createEngine: %w", err) } if _, ok := e.(wgengine.ResolvingEngine).GetResolver(); !ok { panic("internal error: exit node resolver not wired up") @@ -324,7 +322,7 @@ func run() error { ns.ProcessLocalIPs = useNetstack ns.ProcessSubnets = useNetstack || wrapNetstack if err := ns.Start(); err != nil { - log.Fatalf("failed to start netstack: %v", err) + return fmt.Errorf("failed to start netstack: %w", err) } if useNetstack { @@ -380,13 +378,11 @@ func run() error { store, err := ipnserver.StateStore(statePathOrDefault(), logf) if err != nil { - logf("ipnserver.StateStore: %v", err) - return err + return fmt.Errorf("ipnserver.StateStore: %w", err) } srv, err := ipnserver.New(logf, pol.PublicID.String(), store, e, dialer, nil, opts) if err != nil { - logf("ipnserver.New: %v", err) - return err + return fmt.Errorf("ipnserver.New: %w", err) } if debugMux != nil { @@ -401,8 +397,7 @@ func run() error { err = srv.Run(ctx, ln) // Cancelation is not an error: it is the only way to stop ipnserver. if err != nil && err != context.Canceled { - logf("ipnserver.Run: %v", err) - return err + return fmt.Errorf("ipnserver.Run: %w", err) } return nil