package main import ( "log" "log/slog" "os" "flag" "code.kiri.systems/kiri/alky/pkg/config" "code.kiri.systems/kiri/alky/pkg/dns" "code.kiri.systems/kiri/alky/pkg/rootservers" ) var configFlag string func init() { flag.StringVar(&configFlag, "config", "/etc/alky/alky.toml", "config file path for alky") flag.Parse() } func main() { cfg, err := config.LoadConfig(configFlag) if err != nil { log.Fatal(err) } rootServers, err := rootservers.DecodeRootHints(cfg.Server.RootHintsFile) if err != nil { log.Fatal(err) } var logger *slog.Logger switch cfg.Logging.Output { case "file": f, err := os.OpenFile(cfg.Logging.FilePath, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0o644) if err != nil { log.Fatal(err) } logger = slog.New(slog.NewJSONHandler(f, nil)) case "stdout": fallthrough default: logger = slog.New(slog.NewJSONHandler(os.Stdout, nil)) } s := dns.Server{ Address: cfg.Server.Address, Port: cfg.Server.Port, Timeout: cfg.Advanced.QueryTimeout, RootServers: rootServers, Logger: logger, } go s.TCPListenAndServe() go s.UDPListenAndServe() for { } }