From 260315cccd79d4ea6bef2c3c1a64485d5a6e67a1 Mon Sep 17 00:00:00 2001 From: Gregory Kurtzer Date: Wed, 4 Nov 2020 12:01:15 -0800 Subject: [PATCH] More fixes and usibility updates --- cmd/warewulfd/ipxe.go | 2 +- cmd/wwbuild/overlay-runtime.go | 4 +- cmd/wwbuild/overlay-system.go | 4 +- cmd/wwbuild/overlay.go | 31 +++++++++---- cmd/wwbuild/wwbuild.go | 44 +++++++------------ cmd/wwclient/wwclient.go | 2 +- internal/pkg/assets/assets.go | 11 +++-- overlays/runtime/default/etc/group.in | 1 + overlays/runtime/default/etc/passwd.in | 2 + .../default/root/.ssh/authorized_keys.in | 1 + 10 files changed, 56 insertions(+), 46 deletions(-) create mode 100644 overlays/runtime/default/etc/group.in create mode 100644 overlays/runtime/default/etc/passwd.in create mode 100644 overlays/runtime/default/root/.ssh/authorized_keys.in diff --git a/cmd/warewulfd/ipxe.go b/cmd/warewulfd/ipxe.go index 430b2930..e26ee84b 100644 --- a/cmd/warewulfd/ipxe.go +++ b/cmd/warewulfd/ipxe.go @@ -19,7 +19,7 @@ func ipxe(w http.ResponseWriter, req *http.Request) { hwaddr := strings.ReplaceAll(url[2], "-", ":") node, err := assets.FindByHwaddr(hwaddr) if err != nil { - log.Printf("Could not find HW Addr: %s\n", hwaddr) + log.Printf("Could not find HW Addr: %s: %s\n", hwaddr, err) w.WriteHeader(404) return } diff --git a/cmd/wwbuild/overlay-runtime.go b/cmd/wwbuild/overlay-runtime.go index 48c3f858..a1ca74b7 100644 --- a/cmd/wwbuild/overlay-runtime.go +++ b/cmd/wwbuild/overlay-runtime.go @@ -21,9 +21,9 @@ func overlayRuntime(node assets.NodeInfo, replace map[string]string, wg *sync.Wa if err == nil { destModTime = destMod.ModTime() } - configMod, err := os.Stat("/etc/warewulf/nodes.yaml") + configMod, err := os.Stat("/etc/warewulf/nodes.conf") if err != nil { - fmt.Printf("ERROR: could not find node file: /etc/warewulf/nodes.yaml") + fmt.Printf("ERROR: could not find node file: /etc/warewulf/nodes.conf") os.Exit(1) } configModTime := configMod.ModTime() diff --git a/cmd/wwbuild/overlay-system.go b/cmd/wwbuild/overlay-system.go index e66e6d2c..eaba6315 100644 --- a/cmd/wwbuild/overlay-system.go +++ b/cmd/wwbuild/overlay-system.go @@ -22,9 +22,9 @@ func overlaySystem(node assets.NodeInfo, replace map[string]string, wg *sync.Wai if err == nil { destModTime = destMod.ModTime() } - configMod, err := os.Stat("/etc/warewulf/nodes.yaml") + configMod, err := os.Stat("/etc/warewulf/nodes.conf") if err != nil { - fmt.Printf("ERROR: could not find node file: /etc/warewulf/nodes.yaml") + fmt.Printf("ERROR: could not find node file: /etc/warewulf/nodes.conf\n") os.Exit(1) } configModTime := configMod.ModTime() diff --git a/cmd/wwbuild/overlay.go b/cmd/wwbuild/overlay.go index b48302cf..8e711b4e 100644 --- a/cmd/wwbuild/overlay.go +++ b/cmd/wwbuild/overlay.go @@ -37,7 +37,7 @@ func BuildOverlayDir(sourceDir string, destDir string, replace map[string]string return err } - destFD, err := os.OpenFile(destDir+"/"+destFile, os.O_RDWR|os.O_CREATE, info.Mode()) + destFD, err := os.OpenFile(destDir + "/" + destFile, os.O_RDWR|os.O_CREATE, info.Mode()) if err != nil { return err } @@ -52,18 +52,21 @@ func BuildOverlayDir(sourceDir string, destDir string, replace map[string]string replaceString := fmt.Sprintf("@%s@", strings.ToUpper(k)) newLine = strings.ReplaceAll(newLine, replaceString, v) } - //TODO: Support directives like '#INCLUDE ' and - // conditionals like '#IFDEF ....` - if strings.HasPrefix(newLine, "#WWENDIF") { + if strings.HasPrefix(newLine, "#WWEND") { skip = false } else if skip == true { - } else if strings.HasPrefix(newLine, "#WWIFDEF") { + } else if strings.HasPrefix(newLine, "#WWIFDEF ") { line := strings.Split(newLine, " ") if len(line) > 0 && line[1] != "false" { skip = true } + } else if strings.HasPrefix(newLine, "#WWIFNDEF ") { + line := strings.Split(newLine, " ") + if len(line) > 0 && line[1] == "false" { + skip = true + } } else if strings.HasPrefix(newLine, "#WWIF ") { line := strings.Split(newLine, " ") if len(line) == 2 && line[1] != "false" { @@ -76,13 +79,25 @@ func BuildOverlayDir(sourceDir string, destDir string, replace map[string]string } } } + } else if strings.HasPrefix(newLine, "#WWELSE") { + if skip == true { + skip = false + } else { + skip = true + } } else if strings.HasPrefix(newLine, "#WWINCLUDE ") { line := strings.Split(newLine, " ") + //fmt.Printf("Including file (%s): %s\n", destDir + "/" + destFile, line[1]) includeFD, err := os.Open(line[1]) if err != nil { - return err - } - io.Copy(w, includeFD) + fmt.Printf("ERROR(os.Open): %s\n", err) + return err + } + _, err = io.Copy(w, includeFD) + if err != nil { + fmt.Printf("ERROR(io.Copy): %s\n", err) + return err + } includeFD.Close() } else { _, err := w.WriteString(newLine + "\n") diff --git a/cmd/wwbuild/wwbuild.go b/cmd/wwbuild/wwbuild.go index 32dcf465..dc336d02 100644 --- a/cmd/wwbuild/wwbuild.go +++ b/cmd/wwbuild/wwbuild.go @@ -8,6 +8,7 @@ import ( "path" "strings" "sync" + "time" ) const LocalStateDir = "/var/warewulf" @@ -33,7 +34,6 @@ func vnfsBuild(vnfsPath string, wg *sync.WaitGroup) { fmt.Printf("ERROR: %s\n", err) os.Exit(1) } - fmt.Printf("BUILD DONE: %s\n", vnfsPath) } else { fmt.Printf("SKIPPING VNFS: (bad path) %s\n", vnfsPath) @@ -43,7 +43,7 @@ func vnfsBuild(vnfsPath string, wg *sync.WaitGroup) { func main() { if len(os.Args) < 2 { - fmt.Printf("USAGE: %s [vnfs/kernel/overlay/all]\n", os.Args[0]) + fmt.Printf("USAGE: %s [vnfs/kernel/overlay] (node regex)\n", os.Args[0]) return } @@ -52,15 +52,10 @@ func main() { set := make(map[string]bool) var wg sync.WaitGroup - if len(os.Args) < 3 { - fmt.Printf("USAGE: %s vnfs [node name pattern/ALL]\n", os.Args[0]) - return - } - - if os.Args[2] == "ALL" { - nodeList, _ = assets.FindAllNodes() - } else { + if len(os.Args) >= 3 { nodeList, _ = assets.SearchByName(os.Args[2]) + } else { + nodeList, _ = assets.FindAllNodes() } if len(nodeList) == 0 { @@ -77,21 +72,18 @@ func main() { wg.Add(1) go vnfsBuild(entry, &wg) } + time.Sleep(1000 * time.Millisecond) + fmt.Printf("Waiting for build(s) to complete...\n") wg.Wait() } else if os.Args[1] == "kernel" { var nodeList []assets.NodeInfo set := make(map[string]bool) - if len(os.Args) < 3 { - fmt.Printf("USAGE: %s vnfs [node name pattern/ALL]\n", os.Args[0]) - return - } - - if os.Args[2] == "ALL" { - nodeList, _ = assets.FindAllNodes() - } else { + if len(os.Args) >= 3 { nodeList, _ = assets.SearchByName(os.Args[2]) + } else { + nodeList, _ = assets.FindAllNodes() } if len(nodeList) == 0 { @@ -140,15 +132,10 @@ func main() { var nodeList []assets.NodeInfo var wg sync.WaitGroup - if len(os.Args) < 3 { - fmt.Printf("USAGE: %s vnfs [node name pattern/ALL]\n", os.Args[0]) - return - } - - if os.Args[2] == "ALL" { - nodeList, _ = assets.FindAllNodes() - } else { + if len(os.Args) >= 3 { nodeList, _ = assets.SearchByName(os.Args[2]) + } else { + nodeList, _ = assets.FindAllNodes() } if len(nodeList) == 0 { @@ -157,7 +144,6 @@ func main() { } for _, node := range nodeList { - replace := make(map[string]string) replace["HOSTNAME"] = node.HostName replace["FQDN"] = node.Fqdn @@ -174,8 +160,8 @@ func main() { } wg.Add(2) - go overlayRuntime(node, replace, &wg) - go overlaySystem(node, replace, &wg) + overlayRuntime(node, replace, &wg) + overlaySystem(node, replace, &wg) } wg.Wait() diff --git a/cmd/wwclient/wwclient.go b/cmd/wwclient/wwclient.go index 79f61365..ebd26441 100644 --- a/cmd/wwclient/wwclient.go +++ b/cmd/wwclient/wwclient.go @@ -99,7 +99,7 @@ func main() { */ log.Printf("Updating runtime system\n") - command := exec.Command("/bin/cpio", "-i") + command := exec.Command("/bin/cpio", "-iu") command.Stdin = resp.Body err := command.Run() if err != nil { diff --git a/internal/pkg/assets/assets.go b/internal/pkg/assets/assets.go index ef1363df..8f81d730 100644 --- a/internal/pkg/assets/assets.go +++ b/internal/pkg/assets/assets.go @@ -1,8 +1,12 @@ package assets import ( + "fmt" "gopkg.in/yaml.v2" "io/ioutil" + // "os" + + // "os" "regexp" "github.com/hpcng/warewulf/internal/pkg/errors" @@ -11,7 +15,7 @@ import ( const ConfigFile = "/etc/warewulf/nodes.conf" func init() { - //TODO: Check to make sure nodes.yaml is found + //TODO: Check to make sure nodes.conf is found } @@ -64,12 +68,13 @@ func FindAllNodes() ([]NodeInfo, error) { var c nodeYaml var ret []NodeInfo - fd, err := ioutil.ReadFile(ConfigFile) + data, err := ioutil.ReadFile(ConfigFile) if err != nil { + fmt.Printf("error reading node configuration file\n") return nil, err } - err = yaml.Unmarshal(fd, &c) + err = yaml.Unmarshal(data, &c) if err != nil { return nil, err } diff --git a/overlays/runtime/default/etc/group.in b/overlays/runtime/default/etc/group.in new file mode 100644 index 00000000..da836ace --- /dev/null +++ b/overlays/runtime/default/etc/group.in @@ -0,0 +1 @@ +#WWINCLUDE /etc/group diff --git a/overlays/runtime/default/etc/passwd.in b/overlays/runtime/default/etc/passwd.in new file mode 100644 index 00000000..ef9462c1 --- /dev/null +++ b/overlays/runtime/default/etc/passwd.in @@ -0,0 +1,2 @@ +root::0:0:root:/root:/bin/bash +#WWINCLUDE /etc/passwd diff --git a/overlays/runtime/default/root/.ssh/authorized_keys.in b/overlays/runtime/default/root/.ssh/authorized_keys.in new file mode 100644 index 00000000..f0248c5e --- /dev/null +++ b/overlays/runtime/default/root/.ssh/authorized_keys.in @@ -0,0 +1 @@ +#WWINCLUDE /root/.ssh/authorized_keys