File LocalStateDir-is-configureable-to-meet-FHS.patch of Package warewulf4

From b670e183470c97e7fc0a266866ec3e9964084d12 Mon Sep 17 00:00:00 2001
From: Christian Goll <cgoll@suse.de>
Date: Wed, 21 Jul 2021 12:45:16 +0200
Subject: [PATCH] LocalStateDir is configureable to meet FHS

---
 Makefile                                   | 27 +++++++++++-----------
 internal/app/wwctl/configure/nfs/main.go   |  2 +-
 internal/pkg/config/config.go              | 16 ++++++++++---
 internal/pkg/warewulfconf/datastructure.go |  1 +
 4 files changed, 29 insertions(+), 17 deletions(-)

diff --git a/Makefile b/Makefile
index 0babd54..7169b6c 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,7 @@
 .PHONY: all
 
 VERSION := 4.2.0
+LOCALSTATE ?= /var/warewulf/
 
 # auto installed tooling
 TOOLS_DIR := .tools
@@ -52,8 +53,8 @@ debian: all
 
 files: all
 	install -d -m 0755 $(DESTDIR)/usr/bin/
-	install -d -m 0755 $(DESTDIR)/var/warewulf/
-	install -d -m 0755 $(DESTDIR)/var/warewulf/chroots
+	install -d -m 0755 $(DESTDIR)$(LOCALSTATE)/
+	install -d -m 0755 $(DESTDIR)$(LOCALSTATE)/chroots
 	install -d -m 0755 $(DESTDIR)/etc/warewulf/
 	install -d -m 0755 $(DESTDIR)/etc/warewulf/ipxe
 	install -d -m 0755 $(DESTDIR)/var/lib/tftpboot/warewulf/ipxe/
@@ -63,12 +64,12 @@ files: all
 	test -f $(DESTDIR)/etc/warewulf/hosts.tmpl || install -m 644 etc/hosts.tmpl $(DESTDIR)/etc/warewulf/
 	cp -r etc/dhcp $(DESTDIR)/etc/warewulf/
 	cp -r etc/ipxe $(DESTDIR)/etc/warewulf/
-	cp -r overlays $(DESTDIR)/var/warewulf/
-	chmod +x $(DESTDIR)/var/warewulf/overlays/system/default/init
-	chmod 600 $(DESTDIR)/var/warewulf/overlays/system/default/etc/ssh/ssh*
-	chmod 644 $(DESTDIR)/var/warewulf/overlays/system/default/etc/ssh/ssh*.pub.ww
-	mkdir -p $(DESTDIR)/var/warewulf/overlays/system/default/warewulf/bin/
-	cp wwclient $(DESTDIR)/var/warewulf/overlays/system/default/warewulf/bin/
+	cp -r overlays $(DESTDIR)$(LOCALSTATE)/
+	chmod +x $(DESTDIR)$(LOCALSTATE)/overlays/system/default/init
+	chmod 600 $(DESTDIR)$(LOCALSTATE)/overlays/system/default/etc/ssh/ssh*
+	chmod 644 $(DESTDIR)$(LOCALSTATE)/overlays/system/default/etc/ssh/ssh*.pub.ww
+	mkdir -p $(DESTDIR)$(LOCALSTATE)/overlays/system/default/warewulf/bin/
+	cp wwclient $(DESTDIR)$(LOCALSTATE)/overlays/system/default/warewulf/bin/
 	cp wwctl $(DESTDIR)/usr/bin/
 	mkdir -p $(DESTDIR)/usr/lib/firewalld/services
 	install -c -m 0644 include/firewalld/warewulf.xml $(DESTDIR)/usr/lib/firewalld/services
@@ -82,11 +83,11 @@ files: all
 #	restorecon -r /var/lib/tftpboot/warewulf
 
 debfiles: debian
-	chmod +x $(DESTDIR)/var/warewulf/overlays/system/debian/init
-	chmod 600 $(DESTDIR)/var/warewulf/overlays/system/debian/etc/ssh/ssh*
-	chmod 644 $(DESTDIR)/var/warewulf/overlays/system/debian/etc/ssh/ssh*.pub.ww
-	mkdir -p $(DESTDIR)/var/warewulf/overlays/system/debian/warewulf/bin/
-	cp wwclient $(DESTDIR)/var/warewulf/overlays/system/debian/warewulf/bin/
+	chmod +x $(DESTDIR)$(LOCALSTATE)/overlays/system/debian/init
+	chmod 600 $(DESTDIR)$(LOCALSTATE)/overlays/system/debian/etc/ssh/ssh*
+	chmod 644 $(DESTDIR)$(LOCALSTATE)/overlays/system/debian/etc/ssh/ssh*.pub.ww
+	mkdir -p $(DESTDIR)$(LOCALSTATE)/overlays/system/debian/warewulf/bin/
+	cp wwclient $(DESTDIR)$(LOCALSTATE)/overlays/system/debian/warewulf/bin/
 
 wwctl:
 	cd cmd/wwctl; GOOS=linux go build -mod vendor -tags "$(WW_BUILD_GO_BUILD_TAGS)" -o ../../wwctl
diff --git a/internal/app/wwctl/configure/nfs/main.go b/internal/app/wwctl/configure/nfs/main.go
index 7827b24..4657f66 100644
--- a/internal/app/wwctl/configure/nfs/main.go
+++ b/internal/app/wwctl/configure/nfs/main.go
@@ -40,7 +40,7 @@ func Configure(show bool) error {
 		}
 		defer exports.Close()
 
-		fstab, err := os.OpenFile("/var/warewulf/overlays/system/default/etc/fstab", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
+		fstab, err := os.OpenFile(fmt.Sprintf("%s/overlays/system/default/etc/fstab",controller.LocalStateDir), os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
 		if err != nil {
 			wwlog.Printf(wwlog.ERROR, "%s\n", err)
 			os.Exit(1)
diff --git a/internal/pkg/config/config.go b/internal/pkg/config/config.go
index 34a9f00..c08221d 100644
--- a/internal/pkg/config/config.go
+++ b/internal/pkg/config/config.go
@@ -6,11 +6,21 @@ import (
 
 	"github.com/hpcng/warewulf/internal/pkg/util"
 	"github.com/hpcng/warewulf/internal/pkg/wwlog"
+  "github.com/hpcng/warewulf/internal/pkg/warewulfconf"
 )
 
-const (
-	LocalStateDir = "/var/warewulf"
-)
+var LocalStateDir = "/var/warewulf"
+
+func init() {
+  conf, err := warewulfconf.New()
+  if err != nil {
+    wwlog.Printf(wwlog.ERROR, "%s\n", err)
+    return
+  }
+  if conf.LocalStateDir != ""  {
+    LocalStateDir = conf.LocalStateDir
+  }
+}
 
 func OverlayDir() string {
 	return fmt.Sprintf("%s/overlays/", LocalStateDir)
diff --git a/internal/pkg/warewulfconf/datastructure.go b/internal/pkg/warewulfconf/datastructure.go
index 8315ddd..a688617 100644
--- a/internal/pkg/warewulfconf/datastructure.go
+++ b/internal/pkg/warewulfconf/datastructure.go
@@ -13,6 +13,7 @@ type ControllerConf struct {
 	Netmask  string        `yaml:"netmask"`
 	Network  string        `yaml:"network,omitempty"`
 	Fqdn     string        `yaml:"fqdn,omitempty"`
+  LocalStateDir string   `yaml:"localstatedir"`
 	Warewulf *WarewulfConf `yaml:"warewulf"`
 	Dhcp     *DhcpConf     `yaml:"dhcp"`
 	Tftp     *TftpConf     `yaml:"tftp"`
-- 
2.33.0

openSUSE Build Service is sponsored by