debian-forge-composer/cmd/osbuild-composer/main.go
Lars Karlitski 7aca756156 osbuild-composer: split out the actual service
Split the actual service into its own type `Composer` in composer.go.
main.go now (more or less) contains only collecting configuration from
the environment and the file system, as well as activation file
descriptors.

Aside from making the code easier to grok, this is a first step towards
running composer in a different environment than the one set up by
systemd.
2020-09-29 21:52:58 +01:00

106 lines
2.5 KiB
Go

package main
import (
"flag"
"log"
"os"
"github.com/coreos/go-systemd/activation"
)
const (
configFile = "/etc/osbuild-composer/osbuild-composer.toml"
ServerKeyFile = "/etc/osbuild-composer/composer-key.pem"
ServerCertFile = "/etc/osbuild-composer/composer-crt.pem"
)
var repositoryConfigs = []string{
"/etc/osbuild-composer",
"/usr/share/osbuild-composer",
}
func main() {
var verbose bool
flag.BoolVar(&verbose, "v", false, "Print access log")
flag.Parse()
var logger *log.Logger
if verbose {
logger = log.New(os.Stdout, "", 0)
}
config, err := LoadConfig(configFile)
if err != nil {
if os.IsNotExist(err) {
config = &ComposerConfigFile{}
} else {
log.Fatalf("Error loading configuration: %v", err)
}
}
log.Println("Loaded configuration:")
err = DumpConfig(config, log.Writer())
if err != nil {
log.Fatalf("Error printing configuration: %v", err)
}
stateDir, ok := os.LookupEnv("STATE_DIRECTORY")
if !ok {
log.Fatal("STATE_DIRECTORY is not set. Is the service file missing StateDirectory=?")
}
cacheDir, ok := os.LookupEnv("CACHE_DIRECTORY")
if !ok {
log.Fatal("CACHE_DIRECTORY is not set. Is the service file missing CacheDirectory=?")
}
composer, err := NewComposer(config, stateDir, cacheDir, logger)
if err != nil {
log.Fatalf("%v", err)
}
listeners, err := activation.ListenersWithNames()
if err != nil {
log.Fatalf("Could not get listening sockets: " + err.Error())
}
if l, exists := listeners["osbuild-composer.socket"]; exists {
if len(l) != 2 {
log.Fatalf("Expected two listeners in osbuild-composer.socket, but found %d", len(l))
}
err = composer.InitWeldr(repositoryConfigs, l[0], l[1])
if err != nil {
log.Fatalf("Error initializing weldr API: %v", err)
}
} else {
log.Fatalf("osbuild-composer.socket doesn't exist")
}
if l, exists := listeners["osbuild-composer-koji.socket"]; exists {
if len(l) != 1 {
log.Fatal("The osbuild-composer-koji.socket unit is misconfigured. It should contain only one socket.")
}
err = composer.InitKoji(ServerCertFile, ServerKeyFile, l[0])
if err != nil {
log.Fatalf("Error initializing koji API: %v", err)
}
}
if l, exists := listeners["osbuild-remote-worker.socket"]; exists {
if len(l) != 1 {
log.Fatal("The osbuild-remote-worker.socket unit is misconfigured. It should contain only one socket.")
}
err = composer.InitRemoteWorkers(ServerCertFile, ServerKeyFile, l[0])
if err != nil {
log.Fatalf("Error initializing worker API: %v", err)
}
}
err = composer.Start()
if err != nil {
log.Fatalf("%v", err)
}
}