From 27bb5fbeb0b975c568617a6eb6c2c2f3ab1361a9 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 26 Jul 2019 22:35:14 +0200 Subject: [PATCH] Fix startup procedure, flags --- pmctl/install_windows.go | 2 +- pmctl/lock.go | 8 ++- pmctl/logs.go | 6 +-- pmctl/main.go | 107 ++++++++++++++++++++------------------- pmctl/run.go | 2 +- 5 files changed, 62 insertions(+), 63 deletions(-) diff --git a/pmctl/install_windows.go b/pmctl/install_windows.go index 3b2c14ea..8eef9efc 100644 --- a/pmctl/install_windows.go +++ b/pmctl/install_windows.go @@ -88,7 +88,7 @@ func getServiceExecCommand(exePath string) []string { "run", "core-service", "--db", - windows.EscapeArg(*databaseRootDir), + windows.EscapeArg(databaseRootDir), "--input-signals", } } diff --git a/pmctl/lock.go b/pmctl/lock.go index 13fd4cbb..c913ad64 100644 --- a/pmctl/lock.go +++ b/pmctl/lock.go @@ -13,7 +13,7 @@ import ( ) func checkAndCreateInstanceLock(name string) (pid int32, err error) { - lockFilePath := filepath.Join(*databaseRootDir, fmt.Sprintf("%s-lock.pid", name)) + lockFilePath := filepath.Join(databaseRootDir, fmt.Sprintf("%s-lock.pid", name)) // read current pid file data, err := ioutil.ReadFile(lockFilePath) @@ -32,8 +32,6 @@ func checkAndCreateInstanceLock(name string) (pid int32, err error) { return 0, createInstanceLock(lockFilePath) } - log.Printf("===== checking if PID %d exists\n", int32(parsedPid)) - // check if process exists p, err := processInfo.NewProcess(int32(parsedPid)) if err == nil { @@ -52,7 +50,7 @@ func checkAndCreateInstanceLock(name string) (pid int32, err error) { func createInstanceLock(lockFilePath string) error { // create database dir - err := os.MkdirAll(*databaseRootDir, 0777) + err := os.MkdirAll(databaseRootDir, 0777) if err != nil { log.Printf("failed to create base folder: %s\n", err) } @@ -67,6 +65,6 @@ func createInstanceLock(lockFilePath string) error { } func deleteInstanceLock(name string) error { - lockFilePath := filepath.Join(*databaseRootDir, fmt.Sprintf("%s-lock.pid", name)) + lockFilePath := filepath.Join(databaseRootDir, fmt.Sprintf("%s-lock.pid", name)) return os.Remove(lockFilePath) } diff --git a/pmctl/logs.go b/pmctl/logs.go index acb24043..f4b2cb94 100644 --- a/pmctl/logs.go +++ b/pmctl/logs.go @@ -75,7 +75,7 @@ func finalizeLogFile(logFile *os.File, logFilePath string) { func initControlLogFile() *os.File { // create logging dir - logFileBasePath := filepath.Join(*databaseRootDir, "logs", "fstree", "control") + logFileBasePath := filepath.Join(databaseRootDir, "logs", "fstree", "control") err := os.MkdirAll(logFileBasePath, 0777) if err != nil { log.Printf("failed to create log file folder %s: %s\n", logFileBasePath, err) @@ -94,7 +94,7 @@ func logControlError(cErr error) { } // create dir - logFileBasePath := filepath.Join(*databaseRootDir, "logs", "fstree", "control") + logFileBasePath := filepath.Join(databaseRootDir, "logs", "fstree", "control") err := os.MkdirAll(logFileBasePath, 0777) if err != nil { log.Printf("failed to create log file folder %s: %s\n", logFileBasePath, err) @@ -114,7 +114,7 @@ func logControlError(cErr error) { func logControlStack() { // create dir - logFileBasePath := filepath.Join(*databaseRootDir, "logs", "fstree", "control") + logFileBasePath := filepath.Join(databaseRootDir, "logs", "fstree", "control") err := os.MkdirAll(logFileBasePath, 0777) if err != nil { log.Printf("failed to create log file folder %s: %s\n", logFileBasePath, err) diff --git a/pmctl/main.go b/pmctl/main.go index dfcebaa1..094d873c 100644 --- a/pmctl/main.go +++ b/pmctl/main.go @@ -2,6 +2,7 @@ package main import ( "errors" + "fmt" "log" "os" "os/signal" @@ -16,13 +17,23 @@ import ( ) var ( - databaseRootDir *string + databaseRootDir string + showShortVersion bool + showFullVersion bool rootCmd = &cobra.Command{ Use: "portmaster-control", Short: "contoller for all portmaster components", PersistentPreRunE: cmdSetup, RunE: func(cmd *cobra.Command, args []string) error { + if showShortVersion { + fmt.Println(info.Version()) + return nil + } + if showFullVersion { + fmt.Println(info.FullVersion()) + return nil + } return cmd.Help() }, } @@ -32,54 +43,15 @@ func init() { // Let cobra ignore if we are running as "GUI" or not cobra.MousetrapHelpText = "" - databaseRootDir = rootCmd.PersistentFlags().String("db", "", "set database directory") - err := rootCmd.MarkPersistentFlagRequired("db") - if err != nil { - panic(err) - } + rootCmd.PersistentFlags().StringVar(&databaseRootDir, "db", "", "set database directory") + rootCmd.Flags().BoolVar(&showFullVersion, "version", false, "print version") + rootCmd.Flags().BoolVar(&showShortVersion, "ver", false, "print version number only") } func main() { - var err error - - runtime.GOMAXPROCS(runtime.NumCPU()) - // set meta info info.Set("Portmaster Control", "0.2.5", "AGPLv3", true) - // check if we are running in a console (try to attach to parent console if available) - runningInConsole, err = attachToParentConsole() - if err != nil { - log.Printf("failed to attach to parent console: %s\n", err) - os.Exit(1) - } - - // set up logging - log.SetFlags(log.Ldate | log.Ltime | log.LUTC) - log.SetPrefix("[control] ") - log.SetOutput(os.Stdout) - - // check if meta info is ok - err = info.CheckVersion() - if err != nil { - log.Println("compile error: please compile using the provided build script") - os.Exit(1) - } - - // react to version flag - if info.PrintVersion() { - os.Exit(0) - } - - // warn about CTRL-C on windows - if runningInConsole && runtime.GOOS == "windows" { - log.Println("WARNING: portmaster-control is marked as a GUI application in order to get rid of the console window.") - log.Println("WARNING: CTRL-C will immediately kill without clean shutdown.") - } - - // not using portbase logger - portlog.SetLogLevel(portlog.CriticalLevel) - // for debugging // log.Start() // log.SetLogLevel(log.TraceLevel) @@ -103,7 +75,7 @@ func main() { // start root command go func() { - if err = rootCmd.Execute(); err != nil { + if err := rootCmd.Execute(); err != nil { os.Exit(1) } os.Exit(0) @@ -128,15 +100,44 @@ func main() { } func cmdSetup(cmd *cobra.Command, args []string) (err error) { - // check for database root path - // transform from db base path to updates path - if *databaseRootDir != "" { - // remove redundant escape characters and quotes - *databaseRootDir = strings.Trim(*databaseRootDir, `\"`) - // set updates path - updates.SetDatabaseRoot(*databaseRootDir) - } else { - return errors.New("please supply the database directory using the --db flag") + // check if we are running in a console (try to attach to parent console if available) + runningInConsole, err = attachToParentConsole() + if err != nil { + log.Printf("failed to attach to parent console: %s\n", err) + os.Exit(1) + } + + // check if meta info is ok + err = info.CheckVersion() + if err != nil { + fmt.Println("compile error: please compile using the provided build script") + os.Exit(1) + } + + // set up logging + log.SetFlags(log.Ldate | log.Ltime | log.LUTC) + log.SetPrefix("[control] ") + log.SetOutput(os.Stdout) + + // not using portbase logger + portlog.SetLogLevel(portlog.CriticalLevel) + + if !showShortVersion && !showFullVersion { + // set database root + if databaseRootDir != "" { + // remove redundant escape characters and quotes + databaseRootDir = strings.Trim(databaseRootDir, `\"`) + // set updates path + updates.SetDatabaseRoot(databaseRootDir) + } else { + return errors.New("please supply the database directory using the --db flag") + } + + // warn about CTRL-C on windows + if runningInConsole && runtime.GOOS == "windows" { + log.Println("WARNING: portmaster-control is marked as a GUI application in order to get rid of the console window.") + log.Println("WARNING: CTRL-C will immediately kill without clean shutdown.") + } } return nil diff --git a/pmctl/run.go b/pmctl/run.go index eca89d52..033d67a9 100644 --- a/pmctl/run.go +++ b/pmctl/run.go @@ -207,7 +207,7 @@ func execute(opts *Options, args []string) (cont bool, err error) { // log files var logFile, errorFile *os.File - logFileBasePath := filepath.Join(*databaseRootDir, "logs", "fstree", opts.ShortIdentifier) + logFileBasePath := filepath.Join(databaseRootDir, "logs", "fstree", opts.ShortIdentifier) err = os.MkdirAll(logFileBasePath, 0777) if err != nil { log.Printf("failed to create log file folder %s: %s\n", logFileBasePath, err)