debian-forge-composer/cmd/osbuild-composer/main.go
Martin Sehnoutka f4f8603db5 osbuild-compose: store now takes a distro registry
previously it took only a single distro, but now it requires the whole
registry
2020-02-12 11:17:26 +01:00

80 lines
1.9 KiB
Go

package main
import (
"flag"
"log"
"os"
"runtime"
"github.com/osbuild/osbuild-composer/internal/distro"
"github.com/osbuild/osbuild-composer/internal/jobqueue"
"github.com/osbuild/osbuild-composer/internal/rcm"
"github.com/osbuild/osbuild-composer/internal/rpmmd"
"github.com/osbuild/osbuild-composer/internal/store"
"github.com/osbuild/osbuild-composer/internal/weldr"
"github.com/coreos/go-systemd/activation"
)
func currentArch() string {
if runtime.GOARCH == "amd64" {
return "x86_64"
} else if runtime.GOARCH == "arm64" {
return "aarch64"
} else if runtime.GOARCH == "ppc64le" {
return "ppc64le"
} else if runtime.GOARCH == "s390x" {
return "s390x"
} else {
panic("unsupported architecture")
}
}
func main() {
var verbose bool
flag.BoolVar(&verbose, "v", false, "Print access log")
flag.Parse()
stateDir := "/var/lib/osbuild-composer"
listeners, err := activation.Listeners()
if err != nil {
log.Fatalf("Could not get listening sockets: " + err.Error())
}
if len(listeners) != 2 && len(listeners) != 3 {
log.Fatalf("Unexpected number of listening sockets (%d), expected 2 or 3", len(listeners))
}
weldrListener := listeners[0]
jobListener := listeners[1]
rpm := rpmmd.NewRPMMD()
distros := distro.NewRegistry([]string{"/etc/osbuild-composer", "/usr/share/osbuild-composer"})
distribution, err := distros.FromHost()
if err != nil {
log.Fatalf("Could not determine distro from host: " + err.Error())
}
var logger *log.Logger
if verbose {
logger = log.New(os.Stdout, "", 0)
}
store := store.New(&stateDir, distribution, *distros)
jobAPI := jobqueue.New(logger, store)
weldrAPI := weldr.New(rpm, currentArch(), distribution, logger, store)
go jobAPI.Serve(jobListener)
// Optionally run RCM API as well as Weldr API
if len(listeners) == 3 {
rcmListener := listeners[2]
rcmAPI := rcm.New(logger, store)
go rcmAPI.Serve(rcmListener)
}
weldrAPI.Serve(weldrListener)
}