cmd/cli: skip router setup with "ctrld service start"

Either do magic stuff and make things work automatically (normal users),
or don't do any of it and just run ctrld as a service (power users).
This commit is contained in:
Cuong Manh Le
2023-11-14 21:46:23 +07:00
committed by Cuong Manh Le
parent cd9c750884
commit 494d8be777
2 changed files with 52 additions and 34 deletions
+30 -14
View File
@@ -144,6 +144,8 @@ func initCLI() {
_ = runCmd.Flags().MarkHidden("homedir")
runCmd.Flags().StringVarP(&iface, "iface", "", "", `Update DNS setting for iface, "auto" means the default interface gateway`)
_ = runCmd.Flags().MarkHidden("iface")
runCmd.Flags().BoolVarP(&setupRouter, "router", "", false, "Do setup router")
_ = runCmd.Flags().MarkHidden("router")
runCmd.Flags().StringVarP(&cdUpstreamProto, "proto", "", ctrld.ResolverTypeDOH, `Control D upstream type, either "doh" or "doh3"`)
rootCmd.AddCommand(runCmd)
@@ -253,7 +255,7 @@ func initCLI() {
return
}
if router.Name() != "" {
if router.Name() != "" && setupRouter {
mainLog.Load().Debug().Msg("cleaning up router before installing")
_ = p.router.Cleanup()
}
@@ -307,6 +309,8 @@ func initCLI() {
startCmd.Flags().StringVarP(&iface, "iface", "", "", `Update DNS setting for iface, "auto" means the default interface gateway`)
startCmd.Flags().StringVarP(&nextdns, nextdnsFlagName, "", "", "NextDNS resolver id")
startCmd.Flags().StringVarP(&cdUpstreamProto, "proto", "", ctrld.ResolverTypeDOH, `Control D upstream type, either "doh" or "doh3"`)
startCmd.Flags().BoolVarP(&setupRouter, "router", "", false, "Do router setup")
_ = startCmd.Flags().MarkHidden("router")
routerCmd := &cobra.Command{
Use: "setup",
@@ -591,11 +595,16 @@ NOTE: Uninstalling will set DNS to values provided by DHCP.`,
if !cmd.Flags().Changed("iface") {
os.Args = append(os.Args, "--iface="+ifaceStartStop)
}
if !cmd.Flags().Changed("router") {
os.Args = append(os.Args, fmt.Sprintf("--router=%v", setupRouterStartStop))
}
iface = ifaceStartStop
setupRouter = setupRouterStartStop
startCmd.Run(cmd, args)
},
}
startCmdAlias.Flags().StringVarP(&ifaceStartStop, "iface", "", "auto", `Update DNS setting for iface, "auto" means the default interface gateway`)
startCmdAlias.Flags().BoolVarP(&setupRouterStartStop, "router", "", true, "Do router setup")
startCmdAlias.Flags().AddFlagSet(startCmd.Flags())
rootCmd.AddCommand(startCmdAlias)
stopCmdAlias := &cobra.Command{
@@ -609,11 +618,16 @@ NOTE: Uninstalling will set DNS to values provided by DHCP.`,
if !cmd.Flags().Changed("iface") {
os.Args = append(os.Args, "--iface="+ifaceStartStop)
}
if !cmd.Flags().Changed("router") {
os.Args = append(os.Args, fmt.Sprintf("--router=%v", setupRouterStartStop))
}
iface = ifaceStartStop
setupRouter = setupRouterStartStop
stopCmd.Run(cmd, args)
},
}
stopCmdAlias.Flags().StringVarP(&ifaceStartStop, "iface", "", "auto", `Reset DNS setting for iface, "auto" means the default interface gateway`)
stopCmdAlias.Flags().BoolVarP(&setupRouterStartStop, "router", "", true, "Do router setup")
stopCmdAlias.Flags().AddFlagSet(stopCmd.Flags())
rootCmd.AddCommand(stopCmdAlias)
@@ -974,19 +988,21 @@ func run(appCallback *AppCallback, stopCh chan struct{}) {
if cp := router.CertPool(); cp != nil {
rootCertPool = cp
}
p.onStarted = append(p.onStarted, func() {
mainLog.Load().Debug().Msg("router setup on start")
if err := p.router.Setup(); err != nil {
mainLog.Load().Error().Err(err).Msg("could not configure router")
}
})
p.onStopped = append(p.onStopped, func() {
mainLog.Load().Debug().Msg("router cleanup on stop")
if err := p.router.Cleanup(); err != nil {
mainLog.Load().Error().Err(err).Msg("could not cleanup router")
}
p.resetDNS()
})
if setupRouter {
p.onStarted = append(p.onStarted, func() {
mainLog.Load().Debug().Msg("router setup on start")
if err := p.router.Setup(); err != nil {
mainLog.Load().Error().Err(err).Msg("could not configure router")
}
})
p.onStopped = append(p.onStopped, func() {
mainLog.Load().Debug().Msg("router cleanup on stop")
if err := p.router.Cleanup(); err != nil {
mainLog.Load().Error().Err(err).Msg("could not cleanup router")
}
p.resetDNS()
})
}
}
close(waitCh)