github.com/Cloud-Foundations/Dominator@v0.3.4/cmd/filegen-server/main.go (about) 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 "os" 7 "syscall" 8 9 "github.com/Cloud-Foundations/Dominator/lib/constants" 10 "github.com/Cloud-Foundations/Dominator/lib/filegen" 11 "github.com/Cloud-Foundations/Dominator/lib/filegen/httpd" 12 "github.com/Cloud-Foundations/Dominator/lib/filegen/util" 13 "github.com/Cloud-Foundations/Dominator/lib/flags/loadflags" 14 "github.com/Cloud-Foundations/Dominator/lib/fsutil" 15 "github.com/Cloud-Foundations/Dominator/lib/log/serverlogger" 16 "github.com/Cloud-Foundations/Dominator/lib/srpc" 17 "github.com/Cloud-Foundations/Dominator/lib/srpc/setupserver" 18 "github.com/Cloud-Foundations/tricorder/go/tricorder" 19 ) 20 21 var ( 22 configFile = flag.String("configFile", "/var/lib/filegen-server/config", 23 "Name of file containing the configuration") 24 permitInsecureMode = flag.Bool("permitInsecureMode", false, 25 "If true, run in insecure mode. This gives remote access to all") 26 portNum = flag.Uint("portNum", constants.BasicFileGenServerPortNumber, 27 "Port number to allocate and listen on for HTTP/RPC") 28 ) 29 30 func printUsage() { 31 fmt.Fprintln(os.Stderr, "Usage: filegen-server [flags...] directory...") 32 fmt.Fprintln(os.Stderr, "Common flags:") 33 flag.PrintDefaults() 34 fmt.Fprintln(os.Stderr, "directory: tree of source files") 35 } 36 37 func main() { 38 if os.Geteuid() == 0 { 39 fmt.Fprintln(os.Stderr, "Do not run the filegen server as root") 40 os.Exit(1) 41 } 42 if err := loadflags.LoadForDaemon("filegen-server"); err != nil { 43 fmt.Fprintln(os.Stderr, err) 44 os.Exit(1) 45 } 46 flag.Usage = printUsage 47 flag.Parse() 48 tricorder.RegisterFlags() 49 logger := serverlogger.New("") 50 srpc.SetDefaultLogger(logger) 51 params := setupserver.Params{Logger: logger} 52 if err := setupserver.SetupTlsWithParams(params); err != nil { 53 if *permitInsecureMode { 54 logger.Println(err) 55 } else { 56 logger.Fatalln(err) 57 } 58 } 59 manager := filegen.New(logger) 60 if *configFile != "" { 61 if err := util.LoadConfiguration(manager, *configFile); err != nil { 62 fmt.Fprintln(os.Stderr, err) 63 os.Exit(1) 64 } 65 ch := fsutil.WatchFile(*configFile, nil) 66 (<-ch).Close() // Drain the first event. 67 go func() { 68 <-ch 69 err := syscall.Exec(os.Args[0], os.Args, os.Environ()) 70 if err != nil { 71 logger.Printf("Unable to Exec:%s: %s\n", os.Args[0], err) 72 } 73 }() 74 } 75 httpd.AddHtmlWriter(manager) 76 httpd.AddHtmlWriter(logger) 77 for _, pathname := range flag.Args() { 78 if err := registerSourceDirectory(manager, pathname, "/"); err != nil { 79 fmt.Fprintln(os.Stderr, err) 80 os.Exit(1) 81 } 82 } 83 if err := httpd.StartServer(*portNum, manager, false); err != nil { 84 fmt.Fprintf(os.Stderr, "Unable to create http server: %s\n", err) 85 os.Exit(1) 86 } 87 }