cmd/tailscaled: run off internal state autonomously.

With this change, tailscaled can be restarted and reconnect
without interaction from `tailscale`, and `tailscale` is merely
there to provide login assistance and adjust preferences.

Signed-off-by: David Anderson <dave@natulte.net>
This commit is contained in:
David Anderson
2020-02-15 18:14:50 -08:00
committed by Dave Anderson
parent 997678f540
commit 62fb652eef
4 changed files with 85 additions and 59 deletions
+14
View File
@@ -23,6 +23,15 @@ import (
"tailscale.com/wgengine/magicsock"
)
// globalStateKey is the ipn.StateKey that tailscaled loads on
// startup.
//
// We have to support multiple state keys for other OSes (Windows in
// particular), but right now Unix daemons run with a single
// node-global state. To keep open the option of having per-user state
// later, the global state key doesn't look like a username.
const globalStateKey = "_daemon"
func main() {
fake := getopt.BoolLong("fake", 0, "fake tunnel+routing instead of tuntap")
debug := getopt.StringLong("debug", 0, "", "Address of debug server")
@@ -43,6 +52,10 @@ func main() {
log.Fatalf("too many non-flag arguments: %#v", getopt.Args()[0])
}
if *statepath == "" {
log.Fatalf("--state is required")
}
if *debug != "" {
go runDebugServer(*debug)
}
@@ -60,6 +73,7 @@ func main() {
opts := ipnserver.Options{
StatePath: *statepath,
AutostartStateKey: globalStateKey,
SurviveDisconnects: true,
}
err = ipnserver.Run(context.Background(), logf, pol.PublicID.String(), opts, e)