diff --git a/internal/pxe/supervisor.go b/internal/pxe/supervisor.go index 94d43a5..7e86f7d 100644 --- a/internal/pxe/supervisor.go +++ b/internal/pxe/supervisor.go @@ -41,6 +41,9 @@ func (s *Supervisor) Start(ctx context.Context, hosts []model.Host) error { if err := os.MkdirAll(s.cfg.RuntimeDir, 0o755); err != nil { return fmt.Errorf("pxe: create runtime dir: %w", err) } + if err := os.MkdirAll(s.cfg.TFTPRoot, 0o755); err != nil { + return fmt.Errorf("pxe: create tftp root: %w", err) + } if err := s.writeConfig(hosts); err != nil { return err } @@ -82,8 +85,14 @@ func (s *Supervisor) writeConfig(hosts []model.Host) error { return fmt.Errorf("pxe: write dhcp-hostsfile: %w", err) } + subnet := s.cfg.Subnet + if i := strings.Index(subnet, "/"); i != -1 { + subnet = subnet[:i] + } + conf := dnsmasqConf{ Interface: s.cfg.Interface, + Subnet: subnet, TFTPRoot: s.cfg.TFTPRoot, HostsFile: hostsPath, PublicURL: s.cfg.PublicURL, @@ -126,6 +135,7 @@ func (s *Supervisor) startProcess(ctx context.Context) error { type dnsmasqConf struct { Interface string + Subnet string TFTPRoot string HostsFile string PublicURL string @@ -137,7 +147,7 @@ port=0 interface={{.Interface}} bind-interfaces -dhcp-range=tag:known,192.168.1.0,proxy +dhcp-range=tag:known,{{.Subnet}},proxy dhcp-hostsfile={{.HostsFile}} dhcp-ignore=tag:!known