github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/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/setupserver" 18 "github.com/Cloud-Foundations/tricorder/go/tricorder" 19 ) 20 21 const ( 22 dirPerms = syscall.S_IRWXU | syscall.S_IRGRP | syscall.S_IXGRP | 23 syscall.S_IROTH | syscall.S_IXOTH 24 ) 25 26 var ( 27 imageServerHostname = flag.String("imageServerHostname", "localhost", 28 "Hostname of image server") 29 imageServerPortNum = flag.Uint("imageServerPortNum", 30 constants.ImageServerPortNumber, 31 "Port number of image server") 32 portNum = flag.Uint("portNum", constants.ImageUnpackerPortNumber, 33 "Port number to allocate and listen on for HTTP/RPC") 34 stateDir = flag.String("stateDir", "/var/lib/image-unpacker", 35 "Name of state directory.") 36 ) 37 38 func main() { 39 if err := loadflags.LoadForDaemon("image-unpacker"); err != nil { 40 fmt.Fprintln(os.Stderr, err) 41 os.Exit(1) 42 } 43 flag.Parse() 44 tricorder.RegisterFlags() 45 if os.Geteuid() != 0 { 46 fmt.Fprintln(os.Stderr, "Must run the Image Unpacker as root") 47 os.Exit(1) 48 } 49 logger := serverlogger.New("") 50 if err := setupserver.SetupTls(); err != nil { 51 logger.Fatalln(err) 52 } 53 if err := os.MkdirAll(*stateDir, dirPerms); err != nil { 54 fmt.Fprintf(os.Stderr, "Cannot create state directory: %s\n", err) 55 os.Exit(1) 56 } 57 unpackerObj, err := unpacker.Load(*stateDir, 58 fmt.Sprintf("%s:%d", *imageServerHostname, *imageServerPortNum), logger) 59 if err != nil { 60 fmt.Fprintf(os.Stderr, "Cannot start unpacker: %s\n", err) 61 os.Exit(1) 62 } 63 rpcHtmlWriter := rpcd.Setup(unpackerObj, logger) 64 httpd.AddHtmlWriter(unpackerObj) 65 httpd.AddHtmlWriter(rpcHtmlWriter) 66 httpd.AddHtmlWriter(logger) 67 if err = httpd.StartServer(*portNum, unpackerObj, false); err != nil { 68 fmt.Fprintf(os.Stderr, "Unable to create http server: %s\n", err) 69 os.Exit(1) 70 } 71 }