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  }