diff --git a/cmd/cli/cli.go b/cmd/cli/cli.go index 2c5307c..6ac3123 100644 --- a/cmd/cli/cli.go +++ b/cmd/cli/cli.go @@ -599,11 +599,41 @@ NOTE: Uninstalling will set DNS to values provided by DHCP.`, os.Exit(deactivationPinInvalidExitCode) } uninstall(p, s) + if cleanup { + var files []string + // Config file. + files = append(files, v.ConfigFileUsed()) + // Log file. + files = append(files, cfg.Service.LogPath) + // Socket files. + if dir, _ := socketDir(); dir != "" { + files = append(files, filepath.Join(dir, ctrldControlUnixSock)) + files = append(files, filepath.Join(dir, ctrldLogUnixSock)) + } + // Binary itself. + if bin, _ := os.Executable(); bin != "" { + files = append(files, bin) + } + for _, file := range files { + if file == "" { + continue + } + if err := os.Remove(file); err != nil { + if os.IsNotExist(err) { + continue + } + mainLog.Load().Warn().Err(err).Msg("failed to remove file") + } else { + mainLog.Load().Debug().Msgf("file removed: %s", file) + } + } + } }, } uninstallCmd.Flags().StringVarP(&iface, "iface", "", "", `Reset DNS setting for iface, use "auto" for the default gateway interface`) uninstallCmd.Flags().Int64VarP(&deactivationPin, "pin", "", defaultDeactivationPin, `Pin code for uninstalling ctrld`) _ = uninstallCmd.Flags().MarkHidden("pin") + uninstallCmd.Flags().BoolVarP(&cleanup, "cleanup", "", false, `Removing ctrld binary and config files`) listIfacesCmd := &cobra.Command{ Use: "list", @@ -752,7 +782,7 @@ NOTE: Uninstalling will set DNS to values provided by DHCP.`, }, } uninstallCmdAlias.Flags().StringVarP(&ifaceStartStop, "iface", "", "auto", `Reset DNS setting for iface, "auto" means the default interface gateway`) - uninstallCmdAlias.Flags().AddFlagSet(stopCmd.Flags()) + uninstallCmdAlias.Flags().AddFlagSet(uninstallCmd.Flags()) rootCmd.AddCommand(uninstallCmdAlias) listClientsCmd := &cobra.Command{ diff --git a/cmd/cli/main.go b/cmd/cli/main.go index 279f5f2..3c890f2 100644 --- a/cmd/cli/main.go +++ b/cmd/cli/main.go @@ -36,6 +36,7 @@ var ( cdUpstreamProto string deactivationPin int64 skipSelfChecks bool + cleanup bool mainLog atomic.Pointer[zerolog.Logger] consoleWriter zerolog.ConsoleWriter