github.com/Cloud-Foundations/Dominator@v0.3.4/cmd/image-unpacker/main.go (about) 1 // +build linux 2 3 package main 4 5 import ( 6 "flag" 7 "fmt" 8 "os" 9 "syscall" 10 11 "github.com/Cloud-Foundations/Dominator/imageunpacker/httpd" 12 "github.com/Cloud-Foundations/Dominator/imageunpacker/rpcd" 13 "github.com/Cloud-Foundations/Dominator/imageunpacker/unpacker" 14 "github.com/Cloud-Foundations/Dominator/lib/constants" 15 "github.com/Cloud-Foundations/Dominator/lib/flags/loadflags" 16 "github.com/Cloud-Foundations/Dominator/lib/log/serverlogger" 17 "github.com/Cloud-Foundations/Dominator/lib/srpc" 18 "github.com/Cloud-Foundations/Dominator/lib/srpc/setupserver" 19 "github.com/Cloud-Foundations/tricorder/go/tricorder" 20 ) 21 22 const ( 23 dirPerms = syscall.S_IRWXU | syscall.S_IRGRP | syscall.S_IXGRP | 24 syscall.S_IROTH | syscall.S_IXOTH 25 ) 26 27 var ( 28 imageServerHostname = flag.String("imageServerHostname", "localhost", 29 "Hostname of image server") 30 imageServerPortNum = flag.Uint("imageServerPortNum", 31 constants.ImageServerPortNumber, 32 "Port number of image server") 33 portNum = flag.Uint("portNum", constants.ImageUnpackerPortNumber, 34 "Port number to allocate and listen on for HTTP/RPC") 35 stateDir = flag.String("stateDir", "/var/lib/image-unpacker", 36 "Name of state directory.") 37 ) 38 39 func main() { 40 if err := loadflags.LoadForDaemon("image-unpacker"); err != nil { 41 fmt.Fprintln(os.Stderr, err) 42 os.Exit(1) 43 } 44 flag.Parse() 45 tricorder.RegisterFlags() 46 if os.Geteuid() != 0 { 47 fmt.Fprintln(os.Stderr, "Must run the Image Unpacker as root") 48 os.Exit(1) 49 } 50 logger := serverlogger.New("") 51 srpc.SetDefaultLogger(logger) 52 params := setupserver.Params{Logger: logger} 53 if err := setupserver.SetupTlsWithParams(params); err != nil { 54 logger.Fatalln(err) 55 } 56 if err := os.MkdirAll(*stateDir, dirPerms); err != nil { 57 fmt.Fprintf(os.Stderr, "Cannot create state directory: %s\n", err) 58 os.Exit(1) 59 } 60 unpackerObj, err := unpacker.Load(*stateDir, 61 fmt.Sprintf("%s:%d", *imageServerHostname, *imageServerPortNum), logger) 62 if err != nil { 63 fmt.Fprintf(os.Stderr, "Cannot start unpacker: %s\n", err) 64 os.Exit(1) 65 } 66 rpcHtmlWriter := rpcd.Setup(unpackerObj, logger) 67 httpd.AddHtmlWriter(unpackerObj) 68 httpd.AddHtmlWriter(rpcHtmlWriter) 69 httpd.AddHtmlWriter(logger) 70 if err = httpd.StartServer(*portNum, unpackerObj, false); err != nil { 71 fmt.Fprintf(os.Stderr, "Unable to create http server: %s\n", err) 72 os.Exit(1) 73 } 74 }