github.com/google/fleetspeak@v0.1.15-0.20240426164851-4f31f62c1aea/cmd/fleetspeak_server/fleetspeak_server.go (about) 1 // Copyright 2018 Google Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // https://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // Package main defines an entry point for a general purpose fleetspeak server. 16 package main 17 18 import ( 19 "context" 20 "flag" 21 "io/ioutil" 22 "os" 23 "os/signal" 24 "syscall" 25 26 log "github.com/golang/glog" 27 "google.golang.org/protobuf/encoding/prototext" 28 29 "github.com/google/fleetspeak/fleetspeak/src/server" 30 "github.com/google/fleetspeak/fleetspeak/src/server/components" 31 32 cpb "github.com/google/fleetspeak/fleetspeak/src/server/components/proto/fleetspeak_components" 33 spb "github.com/google/fleetspeak/fleetspeak/src/server/proto/fleetspeak_server" 34 ) 35 36 var componentsConfigPath = flag.String("components_config", "/etc/fleetspeak-server/server.components.config", "File describing the server component configuration.") 37 var servicesConfigPath = flag.String("services_config", "/etc/fleetspeak-server/server.services.config", "File describing the server services configuration.") 38 39 func main() { 40 flag.Parse() 41 42 s, err := server.MakeServer(readServicesConfig(), loadComponents()) 43 if err != nil { 44 log.Exitf("Unable to initialize Fleetspeak server: %v", err) 45 } 46 defer s.Stop() 47 log.Infof("Fleetspeak server started.") 48 49 // Wait for a sign that we should stop. 50 ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) 51 defer stop() 52 <-ctx.Done() 53 } 54 55 func loadComponents() server.Components { 56 b, err := ioutil.ReadFile(*componentsConfigPath) 57 if err != nil { 58 log.Exitf("Unable to read component config file [%s]: %v", *componentsConfigPath, err) 59 } 60 c := &cpb.Config{} 61 if err := prototext.Unmarshal(b, c); err != nil { 62 log.Exitf("Unable to parse component config file [%s]: %v", *componentsConfigPath, err) 63 } 64 r, err := components.MakeComponents(c) 65 if err != nil { 66 log.Exitf("Failed to load components: %v", err) 67 } 68 return *r 69 } 70 71 func readServicesConfig() *spb.ServerConfig { 72 cb, err := ioutil.ReadFile(*servicesConfigPath) 73 if err != nil { 74 log.Exitf("Unable to read services configuration file [%v]: %v", *servicesConfigPath, err) 75 } 76 conf := &spb.ServerConfig{} 77 if err := prototext.Unmarshal(cb, conf); err != nil { 78 log.Exitf("Unable to parse services configuration file [%v]: %v", *servicesConfigPath, err) 79 } 80 return conf 81 }