forked from pool/warewulf4
Accepting request 1060673 from network:cluster
OBS-URL: https://build.opensuse.org/request/show/1060673 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/warewulf4?expand=0&rev=8
This commit is contained in:
commit
7df194ec51
163
make-ipxe-binary-source-configureable.patch
Normal file
163
make-ipxe-binary-source-configureable.patch
Normal file
@ -0,0 +1,163 @@
|
||||
From 32ab50f299502fce7bf588852a75c63cf3332cf8 Mon Sep 17 00:00:00 2001
|
||||
From: Christian Goll <cgoll@suse.de>
|
||||
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
|
||||
|
@ -1,3 +1,8 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Jan 24 11:17:32 UTC 2023 - Christian Goll <cgoll@suse.com>
|
||||
|
||||
- added make-ipxe-binary-source-configureable.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Jan 19 11:13:58 UTC 2023 - Christian Goll <cgoll@suse.com>
|
||||
|
||||
|
@ -30,7 +30,7 @@ URL: https://warewulf.org
|
||||
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: make
|
||||
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 @@ Summary: Contains the service for the warewulf rest API
|
||||
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 @@ make %{?_smp_mflags} genconfig \
|
||||
PREFIX=%{_prefix} \
|
||||
BINDIR=%{_bindir} \
|
||||
SYSCONFDIR=%{_sysconfdir} \
|
||||
DATADIR=%{_datadir} \
|
||||
DATADIR=%{_datadir}/ipxe \
|
||||
LOCALSTATEDIR=%{_datadir} \
|
||||
SHAREDSTATEDIR=%{_sharedstatedir} \
|
||||
MANDIR=%{_mandir} \
|
||||
@ -136,6 +140,15 @@ mv -v %{buildroot}%{_sysconfdir}/bash_completion.d/warewulf %{buildroot}%{_datad
|
||||
#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 @@ echo "g warewulf -" >> system-user-%{name}.conf
|
||||
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 @@ EOF
|
||||
%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 @@ EOF
|
||||
# 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 @@ EOF
|
||||
%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
|
||||
|
Loading…
Reference in New Issue
Block a user