Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package warewulf4 for openSUSE:Factory checked in at 2023-01-24 19:44:03 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/warewulf4 (Old) and /work/SRC/openSUSE:Factory/.warewulf4.new.32243 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "warewulf4" Tue Jan 24 19:44:03 2023 rev:8 rq:1060673 version:4.4.0 Changes: -------- --- /work/SRC/openSUSE:Factory/warewulf4/warewulf4.changes 2023-01-19 16:44:39.413910412 +0100 +++ /work/SRC/openSUSE:Factory/.warewulf4.new.32243/warewulf4.changes 2023-01-24 20:36:45.293756101 +0100 @@ -1,0 +2,5 @@ +Tue Jan 24 11:17:32 UTC 2023 - Christian Goll <[email protected]> + +- added make-ipxe-binary-source-configureable.patch + +------------------------------------------------------------------- New: ---- make-ipxe-binary-source-configureable.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ warewulf4.spec ++++++ --- /var/tmp/diff_new_pack.mO95lE/_old 2023-01-24 20:36:45.749758463 +0100 +++ /var/tmp/diff_new_pack.mO95lE/_new 2023-01-24 20:36:45.753758484 +0100 @@ -30,7 +30,7 @@ Source0: https://github.com/hpcng/warewulf/archive/v%{version}%{?rls_cndt}.tar.gz#/warewulf4-v%{version}.tar.gz Source1: vendor.tar.gz Source3: warewulf4-rpmlintrc -#Patch1: upstream.patch +Patch1: make-ipxe-binary-source-configureable.patch # no firewalld in sle12 %if 0%{?sle_version} >= 150000 || 0%{?suse_version} > 1500 @@ -44,12 +44,16 @@ BuildRequires: munge BuildRequires: sysuser-tools BuildRequires: tftp +BuildRequires: yq BuildRoot: %{_tmppath}/%{name}-%{version}-build -Requires: %{name}-ipxe = %{version} +#Requires: %{name}-ipxe = %{version} Requires: %{name}-overlay = %{version} -Requires: dhcp-server -Requires: ipmitool -Requires: nfs-kernel-server +Recommends: dhcp-server +Recommends: ipmitool +Recommends: ipxe-bootimgs +Recommends: ipxe-bootimgs +Recommends: nfs-kernel-server +Recommends: tftp %{go_nostrip} @@ -77,13 +81,13 @@ Containts the binaries for the access of warewulf through a rest API and from the commandline from an external host. %package ipxe -Requires: tftp Summary: Binaries of iPXE for ww4 installation BuildArch: noarch %description ipxe For the boot of the nodes iPXE binaries are needed. As these package includes these files for x86, i386 and ARM. +These are the binaries from the upstream project. %package slurm Summary: Configuration template for slurm @@ -106,7 +110,7 @@ PREFIX=%{_prefix} \ BINDIR=%{_bindir} \ SYSCONFDIR=%{_sysconfdir} \ - DATADIR=%{_datadir} \ + DATADIR=%{_datadir}/ipxe \ LOCALSTATEDIR=%{_datadir} \ SHAREDSTATEDIR=%{_sharedstatedir} \ MANDIR=%{_mandir} \ @@ -136,6 +140,15 @@ #cp %{S:2} %{buildroot}%{_sysconfdir}/warewulf/warewulf.conf #rm -rf %{buildroot}%{_datadir}/warewulf/ipxe rm -f %{buildroot}/usr/share/doc/packages/warewulf/LICENSE.md +rm -rf %{buildroot}%{_localstatedir}/lib/warewulf +# use ipxe-bootimgs images +yq e ' + .tftp.ipxe."00:00" = "undionly.kpxe" | + .tftp.ipxe."00:07" = "ipxe-x86_64.efi" | + .tftp.ipxe."00:09" = "ipxe-x86_64.efi" | + .tftp.ipxe."00:0B" = "snp-arm64.efi"'\ + -i %{buildroot}%{_sysconfdir}/warewulf/warewulf.conf +sed -i 's@\(^\s*\)\(.*:.*\):@\1"\2":@' %{buildroot}%{_sysconfdir}/warewulf/warewulf.conf # create systemuser echo "u warewulf -" > system-user-%{name}.conf @@ -144,15 +157,15 @@ install -D -m 644 system-user-%{name}.conf %{buildroot}%{_sysusersdir}/system-user-%{name}.conf # get the slurm package readay -mkdir -p %{buildroot}%{_localstatedir}/lib/warewulf/overlays/host/etc/slurm -mv %{buildroot}%{_sysconfdir}/warewulf/examples/slurm.conf.ww %{buildroot}%{_localstatedir}/lib/warewulf/overlays/host/etc/slurm -mkdir -p %{buildroot}%{_localstatedir}/lib/warewulf/overlays/generic/etc/munge -cat > %{buildroot}%{_localstatedir}/lib/warewulf/overlays/generic/etc/munge/munge.key.ww <<EOF +mkdir -p %{buildroot}%{_datadir}/warewulf/overlays/host/etc/slurm +mv %{buildroot}%{_sysconfdir}/warewulf/examples/slurm.conf.ww %{buildroot}%{_datadir}/warewulf/overlays/host/etc/slurm +mkdir -p %{buildroot}%{_datadir}/warewulf/overlays/generic/etc/munge +cat > %{buildroot}%{_datadir}/warewulf/overlays/generic/etc/munge/munge.key.ww <<EOF {{ Include "/etc/munge/munge.key" -}} EOF -chmod 600 %{buildroot}%{_localstatedir}/lib/warewulf/overlays/generic/etc/munge/munge.key.ww -mkdir -p %{buildroot}%{_localstatedir}/lib/warewulf/overlays/generic/etc/slurm -cat > %{buildroot}%{_localstatedir}/lib/warewulf/overlays/generic/etc/slurm/slurm.conf.ww <<EOF +chmod 600 %{buildroot}%{_datadir}/warewulf/overlays/generic/etc/munge/munge.key.ww +mkdir -p %{buildroot}%{_datadir}/warewulf/overlays/generic/etc/slurm +cat > %{buildroot}%{_datadir}/warewulf/overlays/generic/etc/slurm/slurm.conf.ww <<EOF {{ Include "/etc/slurm/slurm.conf" }} EOF @@ -174,19 +187,16 @@ %license LICENSE.md %attr(0755, root, warewulf) %dir %{_sysconfdir}/warewulf %attr(0755, root, warewulf) %dir %{_sysconfdir}/warewulf/examples -%attr(0755, root, warewulf) %dir %{_sysconfdir}/warewulf/ipxe %{_datadir}/bash-completion/completions/wwctl %{_mandir}/man1/wwctl*1.gz %{_mandir}/man5/*conf*gz %config(noreplace) %{_sysconfdir}/warewulf/nodes.conf %config(noreplace) %{_sysconfdir}/warewulf/warewulf.conf %config(noreplace) %{_sysconfdir}/warewulf/defaults.conf - -%config(noreplace) %{_sysconfdir}/warewulf/ipxe/*.ipxe +%config(noreplace) %{_sysconfdir}/warewulf/ipxe %{_sysconfdir}/warewulf/examples %{_prefix}/lib/firewalld/services/warewulf.xml -%{_localstatedir}/lib/warewulf -%exclude %{_localstatedir}/lib/warewulf/overlays +%exclude %{_datadir}/warewulf/overlays %{_bindir}/wwctl %{_sbindir}/rcwarewulfd %{_unitdir}/warewulfd.service @@ -196,14 +206,14 @@ # The configuration files in this location are for the compute # nodes, so when modified we do not replace them as sensible # admin will read the changelog -%config(noreplace) %{_localstatedir}/lib/warewulf/overlays -%exclude %{_localstatedir}/lib/warewulf/overlays/host/etc/slurm -%exclude %{_localstatedir}/lib/warewulf/overlays/generic/etc/slurm -%exclude %{_localstatedir}/lib/warewulf/overlays/generic/etc/munge +%dir %{_datadir}/warewulf/ +%config(noreplace) %{_datadir}/warewulf/overlays +%exclude %{_datadir}/warewulf/overlays/host/etc/slurm +%exclude %{_datadir}/warewulf/overlays/generic/etc/slurm +%exclude %{_datadir}/warewulf/overlays/generic/etc/munge %files ipxe -#/srv/tftpboot/warewulf -%{_datadir}/warewulf +%{_datadir}/ipxe %files api %{_bindir}/wwapic @@ -214,13 +224,13 @@ %config(noreplace) %{_sysconfdir}/warewulf/wwapird.conf %files slurm -%dir %{_localstatedir}/lib/warewulf/overlays/host/etc/slurm -%{_localstatedir}/lib/warewulf/overlays/host/etc/slurm/slurm.conf.ww -%dir %{_localstatedir}/lib/warewulf/overlays/generic/etc/slurm -%{_localstatedir}/lib/warewulf/overlays/generic/etc/slurm/slurm.conf.ww -%dir %{_localstatedir}/lib/warewulf/overlays/generic/etc/munge -%{_localstatedir}/lib/warewulf/overlays/generic/etc/munge/munge.key.ww -%dir %attr(0700,munge,munge) %{_localstatedir}/lib/warewulf/overlays/generic/etc/munge -%attr(0600,munge,munge) %config(noreplace) %{_localstatedir}/lib/warewulf/overlays/generic/etc/munge/munge.key.ww +%dir %{_datadir}/warewulf/overlays/host/etc/slurm +%{_datadir}/warewulf/overlays/host/etc/slurm/slurm.conf.ww +%dir %{_datadir}/warewulf/overlays/generic/etc/slurm +%{_datadir}/warewulf/overlays/generic/etc/slurm/slurm.conf.ww +%dir %{_datadir}/warewulf/overlays/generic/etc/munge +%{_datadir}/warewulf/overlays/generic/etc/munge/munge.key.ww +%dir %attr(0700,munge,munge) %{_datadir}/warewulf/overlays/generic/etc/munge +%attr(0600,munge,munge) %config(noreplace) %{_datadir}/warewulf/overlays/generic/etc/munge/munge.key.ww %changelog ++++++ make-ipxe-binary-source-configureable.patch ++++++ >From 32ab50f299502fce7bf588852a75c63cf3332cf8 Mon Sep 17 00:00:00 2001 From: Christian Goll <[email protected]> Date: Fri, 20 Jan 2023 15:05:42 +0100 Subject: [PATCH] make ipxe binary source configureable --- internal/pkg/buildconfig/defaults.go | 2 +- internal/pkg/configure/tftp.go | 17 ++++++++++------- internal/pkg/overlay/datastructure.go | 2 ++ internal/pkg/warewulfconf/constructors.go | 12 ++++++++++-- internal/pkg/warewulfconf/datastructure.go | 2 ++ overlays/host/etc/dhcp/dhcpd.conf.ww | 14 +++++--------- 6 files changed, 30 insertions(+), 19 deletions(-) diff --git a/internal/pkg/buildconfig/defaults.go b/internal/pkg/buildconfig/defaults.go index 24cb2d40..17baecba 100644 --- a/internal/pkg/buildconfig/defaults.go +++ b/internal/pkg/buildconfig/defaults.go @@ -27,7 +27,7 @@ func BINDIR() string { } func DATADIR() string { - wwlog.Debug("DATADIR = '%s'", bindir) + wwlog.Debug("DATADIR = '%s'", datadir) return datadir } diff --git a/internal/pkg/configure/tftp.go b/internal/pkg/configure/tftp.go index d321f023..842d7fb4 100644 --- a/internal/pkg/configure/tftp.go +++ b/internal/pkg/configure/tftp.go @@ -11,9 +11,8 @@ import ( "github.com/hpcng/warewulf/internal/pkg/wwlog" ) -var tftpdir string = path.Join(buildconfig.TFTPDIR(), "warewulf") - func TFTP() error { + var tftpdir string = path.Join(buildconfig.TFTPDIR(), "warewulf") controller, err := warewulfconf.New() if err != nil { wwlog.Error("%s", err) @@ -27,11 +26,15 @@ func TFTP() error { } fmt.Printf("Writing PXE files to: %s\n", tftpdir) - for _, f := range [4]string{"x86_64.efi", "x86_64.kpxe", "arm64.efi"} { - err = util.SafeCopyFile(path.Join(buildconfig.DATADIR(), "warewulf", "ipxe", f), path.Join(tftpdir, f)) + copyCheck := make(map[string]bool) + for _, f := range controller.Tftp.IpxeBinaries { + if copyCheck[f] { + continue + } + copyCheck[f] = true + err = util.SafeCopyFile(path.Join(buildconfig.DATADIR(), f), path.Join(tftpdir, f)) if err != nil { - wwlog.Error("%s", err) - return err + wwlog.Warn("ipxe binary could not be copied, not booting may not work: %s", err) } } @@ -39,7 +42,7 @@ func TFTP() error { wwlog.Info("Warewulf does not auto start TFTP services due to disable by warewulf.conf") os.Exit(0) } - + fmt.Printf("Enabling and restarting the TFTP services\n") err = util.SystemdStart(controller.Tftp.SystemdName) if err != nil { diff --git a/internal/pkg/overlay/datastructure.go b/internal/pkg/overlay/datastructure.go index 2a427bee..eb8004cf 100644 --- a/internal/pkg/overlay/datastructure.go +++ b/internal/pkg/overlay/datastructure.go @@ -31,6 +31,7 @@ type TemplateStruct struct { Dhcp warewulfconf.DhcpConf Nfs warewulfconf.NfsConf Warewulf warewulfconf.WarewulfConf + Tftp warewulfconf.TftpConf AllNodes []node.NodeInfo node.NodeConf // backward compatiblity @@ -64,6 +65,7 @@ func InitStruct(nodeInfo node.NodeInfo) TemplateStruct { tstruct.AllNodes = allNodes tstruct.Nfs = *controller.Nfs tstruct.Dhcp = *controller.Dhcp + tstruct.Tftp = *controller.Tftp tstruct.Warewulf = *controller.Warewulf tstruct.Ipaddr = controller.Ipaddr tstruct.Ipaddr6 = controller.Ipaddr6 diff --git a/internal/pkg/warewulfconf/constructors.go b/internal/pkg/warewulfconf/constructors.go index 1d68564a..904d0d31 100644 --- a/internal/pkg/warewulfconf/constructors.go +++ b/internal/pkg/warewulfconf/constructors.go @@ -36,8 +36,14 @@ func New() (ControllerConf, error) { ret.Tftp = &tftpconf ret.Nfs = &nfsConf err := defaults.Set(&ret) + // ipxe binaries are merged not overwritten, store defaults separate + defIpxe := make(map[string]string) + for k, v := range ret.Tftp.IpxeBinaries { + defIpxe[k] = v + delete(ret.Tftp.IpxeBinaries, k) + } if err != nil { - wwlog.Error("Coult initialize default variables") + wwlog.Error("Could initialize default variables") return ret, err } // Check if cached config is old before re-reading config file @@ -53,7 +59,9 @@ func New() (ControllerConf, error) { if err != nil { return ret, err } - + if len(ret.Tftp.IpxeBinaries) == 0 { + ret.Tftp.IpxeBinaries = defIpxe + } if ret.Ipaddr == "" || ret.Netmask == "" { conn, error := net.Dial("udp", "8.8.8.8:80") if error != nil { diff --git a/internal/pkg/warewulfconf/datastructure.go b/internal/pkg/warewulfconf/datastructure.go index c3eebf8c..eb195a2e 100644 --- a/internal/pkg/warewulfconf/datastructure.go +++ b/internal/pkg/warewulfconf/datastructure.go @@ -44,6 +44,8 @@ type TftpConf struct { Enabled bool `yaml:"enabled" default:"true"` TftpRoot string `yaml:"tftproot" default:"/var/lib/tftpboot"` SystemdName string `yaml:"systemd name" default:"tftp"` + // Path is relative to buildconfig.DATADIR() + IpxeBinaries map[string]string `yaml:"ipxe" default:"{\"00:09\": \"x86_64.efi\",\"00:00\": \"x86_64.kpxe\",\"00:0B\": \"arm64.efi\",\"00:07\": \"x86_64.efi\"}"` } type NfsConf struct { diff --git a/overlays/host/etc/dhcp/dhcpd.conf.ww b/overlays/host/etc/dhcp/dhcpd.conf.ww index 82b96cec..66b9d22e 100644 --- a/overlays/host/etc/dhcp/dhcpd.conf.ww +++ b/overlays/host/etc/dhcp/dhcpd.conf.ww @@ -20,15 +20,11 @@ option architecture-type code 93 = unsigned integer 16; if exists user-class and option user-class = "iPXE" { filename "http://{{$.Ipaddr}}:{{$.Warewulf.Port}}/ipxe/${mac:hexhyp}"; } else { - if option architecture-type = 00:0B { - filename "/warewulf/arm64.efi"; - } elsif option architecture-type = 00:09 { - filename "/warewulf/x86_64.efi"; - } elsif option architecture-type = 00:07 { - filename "/warewulf/x86_64.efi"; - } elsif option architecture-type = 00:00 { - filename "/warewulf/x86_64.kpxe"; - } +{{range $type,$name := $.Tftp.IpxeBinaries }} + if option architecture-type = {{ $type }} { + filename "/warewulf/{{ $name }}"; + } +{{ end }} } {{if eq .Dhcp.Template "static" -}} -- 2.39.0
