From d62743ee117cca12b8e7276d28b54cecf269e8f1 Mon Sep 17 00:00:00 2001 From: Josh Burks Date: Tue, 18 Jun 2024 08:08:28 -0700 Subject: [PATCH 01/11] clean up /proc/cmdline with dracut and allow dracut to boot with secure mode to fix #1261 --- dracut/modules.d/90wwinit/load-wwinit.sh | 4 +++- dracut/modules.d/90wwinit/module-setup.sh | 2 +- dracut/modules.d/90wwinit/parse-wwinit.sh | 10 ++++++---- etc/ipxe/dracut.ipxe | 2 +- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/dracut/modules.d/90wwinit/load-wwinit.sh b/dracut/modules.d/90wwinit/load-wwinit.sh index 3086207d..2b7f2c57 100755 --- a/dracut/modules.d/90wwinit/load-wwinit.sh +++ b/dracut/modules.d/90wwinit/load-wwinit.sh @@ -8,6 +8,8 @@ do if [ -n "${archive}" ] then info "Loading ${archive}" - (curl --silent -L "${archive}" | gzip -d | cpio -im --directory="${NEWROOT}") || die "Unable to load ${archive}" + #Load only runtime overlays from a static privledge port + [[ "$archive" == *"runtime"* ]] && localport="--local-port 986" || localport="" + (curl --silent $localport -L "${archive}" | gzip -d | cpio -im --directory="${NEWROOT}") || die "Unable to load ${archive}" fi done diff --git a/dracut/modules.d/90wwinit/module-setup.sh b/dracut/modules.d/90wwinit/module-setup.sh index 454562ad..d1fd62e5 100755 --- a/dracut/modules.d/90wwinit/module-setup.sh +++ b/dracut/modules.d/90wwinit/module-setup.sh @@ -14,7 +14,7 @@ depends() { } install() { - inst_multiple cpio curl + inst_multiple cpio curl dmidecode inst_hook cmdline 30 "$moddir/parse-wwinit.sh" inst_hook pre-mount 30 "$moddir/load-wwinit.sh" } diff --git a/dracut/modules.d/90wwinit/parse-wwinit.sh b/dracut/modules.d/90wwinit/parse-wwinit.sh index 45875024..6ee37184 100755 --- a/dracut/modules.d/90wwinit/parse-wwinit.sh +++ b/dracut/modules.d/90wwinit/parse-wwinit.sh @@ -6,10 +6,12 @@ if [ "${root}" = "wwinit" ] then info "root=${root}" - export wwinit_container=$(getarg wwinit.container=); info "wwinit.container=${wwinit_container}" - export wwinit_system=$(getarg wwinit.system=); info "wwinit.system=${wwinit_system}" - export wwinit_runtime=$(getarg wwinit.runtime=); info "wwinit.runtime=${wwinit_runtime}" - export wwinit_kmods=$(getarg wwinit.kmods=); info "wwinit.kmods=${wwinit_kmods}" + export wwinit_uri="http://$(getarg wwinit.uri)/provision/$(getarg wwid)?assetkey=$(dmidecode -s chassis-asset-tag)&uuid=$(dmidecode -s system-uuid)&stage=" + export wwinit_container="${wwinit_uri}container&compress=gz"; info "wwinit.container=${wwinit_container}" + export wwinit_system="${wwinit_uri}system&compress=gz"; info "wwinit.system=${wwinit_system}" + export wwinit_runtime="${wwinit_uri}runtime&compress=gz"; info "wwinit.runtime=${wwinit_runtime}" + wwinit_kmods_passed=$(getarg wwinit.kmods=) + [ -n "$wwinit_kmods_passed" ] && export wwinit_kmods="${wwinit_uri}kmods&compress=gz"; info "wwinit.kmods=${wwinit_kmods}" wwinit_tmpfs_size=$(getarg wwinit.tmpfs.size=) if [ -n "$wwinit_tmpfs_size" ] diff --git a/etc/ipxe/dracut.ipxe b/etc/ipxe/dracut.ipxe index 7ae3b77e..0f91977f 100644 --- a/etc/ipxe/dracut.ipxe +++ b/etc/ipxe/dracut.ipxe @@ -29,7 +29,7 @@ echo Downloading initramfs initrd --name initramfs ${uri}&stage=initramfs || goto reboot set dracut_net rd.neednet=1 {{range $devname, $netdev := .NetDevs}}{{if and $netdev.Hwaddr $netdev.Device}} ifname={{$netdev.Device}}:{{$netdev.Hwaddr}} {{end}}{{end}} -set dracut_wwinit root=wwinit wwinit.container=${uri}&stage=container&compress=gz wwinit.system=${uri}&stage=system&compress=gz wwinit.runtime=${uri}&stage=runtime&compress=gz {{if ne .KernelOverride ""}}wwinit.kmods=${uri}&stage=kmods&compress=gz{{end}} init=/init +set dracut_wwinit root=wwinit wwinit_uri={{.Ipaddr}}:{{.Port}} {{if ne .KernelOverride ""}}wwinit.kmods=true{{end}} init=/init echo Booting initramfs #echo Network KernelArgs: ${dracut_net} From a079f2c1799b80758d095c1e1566c31880901200 Mon Sep 17 00:00:00 2001 From: Josh Burks Date: Tue, 18 Jun 2024 08:12:16 -0700 Subject: [PATCH 02/11] Update changelog and contributors Signed-off-by: Josh Burks --- CHANGELOG.md | 4 ++++ CONTRIBUTORS.md | 1 + 2 files changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b60e132..2e832a25 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Added option for wwclient port number. #1349 +### Fixed + +- Fix dracut booting with secure mode. #1261 + ### Changed - Added a link to an example SELinux-enabled node image in documentation. #1305 diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index f64ee187..f122854a 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -36,3 +36,4 @@ * Shane Nehring * Tobias Ribizel * Tobias Poschwatta +* Josh Burks From 70204649c03b553eb07ef431b166afa79fe88d6e Mon Sep 17 00:00:00 2001 From: Josh Burks Date: Tue, 18 Jun 2024 08:15:02 -0700 Subject: [PATCH 03/11] added requires cpio,curl,dmidecode to warewulf-dracut spec Signed-off-by: Josh Burks --- warewulf.spec.in | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/warewulf.spec.in b/warewulf.spec.in index 0d61f47b..d1cb5f53 100644 --- a/warewulf.spec.in +++ b/warewulf.spec.in @@ -93,6 +93,9 @@ Requires: dracut %else Requires: dracut-network %endif +Requires: curl +Requires: cpio +Requires: dmidecode %description dracut Warewulf is a stateless and diskless container operating system provisioning @@ -217,6 +220,9 @@ getent group %{wwgroup} >/dev/null || groupadd -r %{wwgroup} %changelog +* Tue Jun 18 2024 Josh Burks +- Add curl, cpio, dmidecode as requires for warewulf-dracut + * Thu Apr 18 2024 Jonathon Anderson - New warewulf-dracut subpackage From 7e70e5a2bb17df52b6563ec499980c0f30c209e7 Mon Sep 17 00:00:00 2001 From: Jonathon Anderson Date: Fri, 5 Jul 2024 11:35:34 -0600 Subject: [PATCH 04/11] Refactor priveleged port use in dracut - Use a port range - Minor stylistic changes Signed-off-by: Jonathon Anderson --- dracut/modules.d/90wwinit/load-wwinit.sh | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/dracut/modules.d/90wwinit/load-wwinit.sh b/dracut/modules.d/90wwinit/load-wwinit.sh index 2b7f2c57..72d2180c 100755 --- a/dracut/modules.d/90wwinit/load-wwinit.sh +++ b/dracut/modules.d/90wwinit/load-wwinit.sh @@ -8,8 +8,13 @@ do if [ -n "${archive}" ] then info "Loading ${archive}" - #Load only runtime overlays from a static privledge port - [[ "$archive" == *"runtime"* ]] && localport="--local-port 986" || localport="" - (curl --silent $localport -L "${archive}" | gzip -d | cpio -im --directory="${NEWROOT}") || die "Unable to load ${archive}" + # Load runtime overlay from a static privledged port. + # Others use default settings. + localport="" + if [[ "$archive" == *"runtime"* ]] + then + localport="--local-port 1-1023" + fi + (curl --silent ${localport} -L "${archive}" | gzip -d | cpio -im --directory="${NEWROOT}") || die "Unable to load ${archive}" fi done From c2cc0157bab25b2091187c2a2d6e901048088a89 Mon Sep 17 00:00:00 2001 From: Jonathon Anderson Date: Fri, 5 Jul 2024 11:49:52 -0600 Subject: [PATCH 05/11] Don't assume runtime overlay name format Signed-off-by: Jonathon Anderson --- dracut/modules.d/90wwinit/load-wwinit.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dracut/modules.d/90wwinit/load-wwinit.sh b/dracut/modules.d/90wwinit/load-wwinit.sh index 72d2180c..9a793315 100755 --- a/dracut/modules.d/90wwinit/load-wwinit.sh +++ b/dracut/modules.d/90wwinit/load-wwinit.sh @@ -11,7 +11,7 @@ do # Load runtime overlay from a static privledged port. # Others use default settings. localport="" - if [[ "$archive" == *"runtime"* ]] + if [[ "${archive}" == "${wwinit_runtime}" ]] then localport="--local-port 1-1023" fi From becd0a5e323d800527cd5cd50d6486d5752db5ea Mon Sep 17 00:00:00 2001 From: Jonathon Anderson Date: Fri, 5 Jul 2024 11:52:09 -0600 Subject: [PATCH 06/11] Pass wwinit.KernelOverride explicitly Rather than create a new wwinit.kmods boolean, pass wwinit.KernelOverride explicitly to dracut and allow it to perform the same logic that previously had been in iPXE. Signed-off-by: Jonathon Anderson --- dracut/modules.d/90wwinit/parse-wwinit.sh | 6 ++++-- etc/ipxe/dracut.ipxe | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/dracut/modules.d/90wwinit/parse-wwinit.sh b/dracut/modules.d/90wwinit/parse-wwinit.sh index 6ee37184..322364e6 100755 --- a/dracut/modules.d/90wwinit/parse-wwinit.sh +++ b/dracut/modules.d/90wwinit/parse-wwinit.sh @@ -10,8 +10,10 @@ then export wwinit_container="${wwinit_uri}container&compress=gz"; info "wwinit.container=${wwinit_container}" export wwinit_system="${wwinit_uri}system&compress=gz"; info "wwinit.system=${wwinit_system}" export wwinit_runtime="${wwinit_uri}runtime&compress=gz"; info "wwinit.runtime=${wwinit_runtime}" - wwinit_kmods_passed=$(getarg wwinit.kmods=) - [ -n "$wwinit_kmods_passed" ] && export wwinit_kmods="${wwinit_uri}kmods&compress=gz"; info "wwinit.kmods=${wwinit_kmods}" + if [ -n "$(getarg wwinit.KernelOverride)" ] + then + export wwinit_kmods="${wwinit_uri}kmods&compress=gz"; info "wwinit.kmods=${wwinit_kmods}" + fi wwinit_tmpfs_size=$(getarg wwinit.tmpfs.size=) if [ -n "$wwinit_tmpfs_size" ] diff --git a/etc/ipxe/dracut.ipxe b/etc/ipxe/dracut.ipxe index 0f91977f..9da62bb2 100644 --- a/etc/ipxe/dracut.ipxe +++ b/etc/ipxe/dracut.ipxe @@ -29,7 +29,7 @@ echo Downloading initramfs initrd --name initramfs ${uri}&stage=initramfs || goto reboot set dracut_net rd.neednet=1 {{range $devname, $netdev := .NetDevs}}{{if and $netdev.Hwaddr $netdev.Device}} ifname={{$netdev.Device}}:{{$netdev.Hwaddr}} {{end}}{{end}} -set dracut_wwinit root=wwinit wwinit_uri={{.Ipaddr}}:{{.Port}} {{if ne .KernelOverride ""}}wwinit.kmods=true{{end}} init=/init +set dracut_wwinit root=wwinit wwinit_uri={{.Ipaddr}}:{{.Port}} {{if ne .KernelOverride ""}}wwinit.KernelOverride={{ .KernelOverride }}{{end}} init=/init echo Booting initramfs #echo Network KernelArgs: ${dracut_net} From 624631a4d5247f41454a11bdc8927c82d7c73f31 Mon Sep 17 00:00:00 2001 From: Jonathon Anderson Date: Fri, 5 Jul 2024 12:12:49 -0600 Subject: [PATCH 07/11] Use the wwinit uri built by iPXE during dracut Signed-off-by: Jonathon Anderson --- dracut/modules.d/90wwinit/module-setup.sh | 2 +- dracut/modules.d/90wwinit/parse-wwinit.sh | 2 +- etc/ipxe/dracut.ipxe | 2 +- warewulf.spec.in | 3 +-- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/dracut/modules.d/90wwinit/module-setup.sh b/dracut/modules.d/90wwinit/module-setup.sh index d1fd62e5..454562ad 100755 --- a/dracut/modules.d/90wwinit/module-setup.sh +++ b/dracut/modules.d/90wwinit/module-setup.sh @@ -14,7 +14,7 @@ depends() { } install() { - inst_multiple cpio curl dmidecode + inst_multiple cpio curl inst_hook cmdline 30 "$moddir/parse-wwinit.sh" inst_hook pre-mount 30 "$moddir/load-wwinit.sh" } diff --git a/dracut/modules.d/90wwinit/parse-wwinit.sh b/dracut/modules.d/90wwinit/parse-wwinit.sh index 322364e6..d2feadff 100755 --- a/dracut/modules.d/90wwinit/parse-wwinit.sh +++ b/dracut/modules.d/90wwinit/parse-wwinit.sh @@ -6,7 +6,7 @@ if [ "${root}" = "wwinit" ] then info "root=${root}" - export wwinit_uri="http://$(getarg wwinit.uri)/provision/$(getarg wwid)?assetkey=$(dmidecode -s chassis-asset-tag)&uuid=$(dmidecode -s system-uuid)&stage=" + wwinit_uri="$(getarg wwinit.uri)" export wwinit_container="${wwinit_uri}container&compress=gz"; info "wwinit.container=${wwinit_container}" export wwinit_system="${wwinit_uri}system&compress=gz"; info "wwinit.system=${wwinit_system}" export wwinit_runtime="${wwinit_uri}runtime&compress=gz"; info "wwinit.runtime=${wwinit_runtime}" diff --git a/etc/ipxe/dracut.ipxe b/etc/ipxe/dracut.ipxe index 9da62bb2..ca76c0bb 100644 --- a/etc/ipxe/dracut.ipxe +++ b/etc/ipxe/dracut.ipxe @@ -29,7 +29,7 @@ echo Downloading initramfs initrd --name initramfs ${uri}&stage=initramfs || goto reboot set dracut_net rd.neednet=1 {{range $devname, $netdev := .NetDevs}}{{if and $netdev.Hwaddr $netdev.Device}} ifname={{$netdev.Device}}:{{$netdev.Hwaddr}} {{end}}{{end}} -set dracut_wwinit root=wwinit wwinit_uri={{.Ipaddr}}:{{.Port}} {{if ne .KernelOverride ""}}wwinit.KernelOverride={{ .KernelOverride }}{{end}} init=/init +set dracut_wwinit root=wwinit wwinit.uri=${uri} {{if ne .KernelOverride ""}}wwinit.KernelOverride={{ .KernelOverride }}{{end}} init=/init echo Booting initramfs #echo Network KernelArgs: ${dracut_net} diff --git a/warewulf.spec.in b/warewulf.spec.in index d1cb5f53..e0ac1202 100644 --- a/warewulf.spec.in +++ b/warewulf.spec.in @@ -95,7 +95,6 @@ Requires: dracut-network %endif Requires: curl Requires: cpio -Requires: dmidecode %description dracut Warewulf is a stateless and diskless container operating system provisioning @@ -221,7 +220,7 @@ getent group %{wwgroup} >/dev/null || groupadd -r %{wwgroup} %changelog * Tue Jun 18 2024 Josh Burks -- Add curl, cpio, dmidecode as requires for warewulf-dracut +- Add curl, cpio as requires for warewulf-dracut * Thu Apr 18 2024 Jonathon Anderson - New warewulf-dracut subpackage From e4385713e823fd4bd0f9fec57b5a94a851b30ff7 Mon Sep 17 00:00:00 2001 From: Jonathon Anderson Date: Fri, 5 Jul 2024 12:13:10 -0600 Subject: [PATCH 08/11] Port dracut boot refinement to grub Signed-off-by: Jonathon Anderson --- etc/grub/grub.cfg.ww | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/etc/grub/grub.cfg.ww b/etc/grub/grub.cfg.ww index 859d2d51..ae9bedbd 100644 --- a/etc/grub/grub.cfg.ww +++ b/etc/grub/grub.cfg.ww @@ -42,10 +42,7 @@ menuentry "Network boot node: {{.Id}}" --id ww4 { menuentry "Network boot node with dracut: {{.Id}}" --id dracut { initramfs="${uri}&stage=initramfs" - uri="http://{{.Ipaddr}}:{{.Port}}/provision/${net_default_mac}?assetkey=${assetkey}" - container="${uri}&stage=container&compress=gz" - system="${uri}&stage=system&compress=gz" - runtime="${uri}&stage=runtime&compress=gz" + wwinit_uri="http://{{.Ipaddr}}:{{.Port}}/provision/${net_default_mac}?assetkey=${assetkey}" {{if .KernelOverride }} echo "Kernel: {{.KernelOverride}}" @@ -55,7 +52,7 @@ menuentry "Network boot node with dracut: {{.Id}}" --id dracut { echo "KernelArgs: {{.KernelArgs}}" net_args="rd.neednet=1 {{range $devname, $netdev := .NetDevs}}{{if and $netdev.Hwaddr $netdev.Device}} ifname={{$netdev.Device}}:{{$netdev.Hwaddr}} {{end}}{{end}}" - wwinit_args="root=wwinit wwinit.container=${container} wwinit.system=${system} wwinit.runtime=${runtime} init=/init" + wwinit_args="root=wwinit wwinit.uri=${wwinit_uri}" linux $kernel wwid=${net_default_mac} {{.KernelArgs}} $net_args $wwinit_args if [ x$? = x0 ] ; then From 938ac534bed123d97f3da2000fe79683c0adf2e6 Mon Sep 17 00:00:00 2001 From: Jonathon Anderson Date: Fri, 5 Jul 2024 15:36:37 -0400 Subject: [PATCH 09/11] Fix dracut-side uri references Signed-off-by: Jonathon Anderson --- dracut/modules.d/90wwinit/parse-wwinit.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dracut/modules.d/90wwinit/parse-wwinit.sh b/dracut/modules.d/90wwinit/parse-wwinit.sh index d2feadff..772a1baf 100755 --- a/dracut/modules.d/90wwinit/parse-wwinit.sh +++ b/dracut/modules.d/90wwinit/parse-wwinit.sh @@ -7,12 +7,12 @@ if [ "${root}" = "wwinit" ] then info "root=${root}" wwinit_uri="$(getarg wwinit.uri)" - export wwinit_container="${wwinit_uri}container&compress=gz"; info "wwinit.container=${wwinit_container}" - export wwinit_system="${wwinit_uri}system&compress=gz"; info "wwinit.system=${wwinit_system}" - export wwinit_runtime="${wwinit_uri}runtime&compress=gz"; info "wwinit.runtime=${wwinit_runtime}" + export wwinit_container="${wwinit_uri}container&compress=gz"; info "wwinit_container=${wwinit_container}" + export wwinit_system="${wwinit_uri}system&compress=gz"; info "wwinit_system=${wwinit_system}" + export wwinit_runtime="${wwinit_uri}runtime&compress=gz"; info "wwinit_runtime=${wwinit_runtime}" if [ -n "$(getarg wwinit.KernelOverride)" ] then - export wwinit_kmods="${wwinit_uri}kmods&compress=gz"; info "wwinit.kmods=${wwinit_kmods}" + export wwinit_kmods="${wwinit_uri}kmods&compress=gz"; info "wwinit_kmods=${wwinit_kmods}" fi wwinit_tmpfs_size=$(getarg wwinit.tmpfs.size=) From c2e4ca5b59a709e3bdf201eedeb83f9e5fe3375f Mon Sep 17 00:00:00 2001 From: Elmar Pruesse Date: Fri, 23 Aug 2024 21:33:50 -0600 Subject: [PATCH 10/11] Fix missing URL component "stage" in parse-wwinit.sh --- dracut/modules.d/90wwinit/parse-wwinit.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dracut/modules.d/90wwinit/parse-wwinit.sh b/dracut/modules.d/90wwinit/parse-wwinit.sh index 772a1baf..6115c896 100755 --- a/dracut/modules.d/90wwinit/parse-wwinit.sh +++ b/dracut/modules.d/90wwinit/parse-wwinit.sh @@ -7,12 +7,12 @@ if [ "${root}" = "wwinit" ] then info "root=${root}" wwinit_uri="$(getarg wwinit.uri)" - export wwinit_container="${wwinit_uri}container&compress=gz"; info "wwinit_container=${wwinit_container}" - export wwinit_system="${wwinit_uri}system&compress=gz"; info "wwinit_system=${wwinit_system}" - export wwinit_runtime="${wwinit_uri}runtime&compress=gz"; info "wwinit_runtime=${wwinit_runtime}" + export wwinit_container="${wwinit_uri}&stage=container&compress=gz"; info "wwinit_container=${wwinit_container}" + export wwinit_system="${wwinit_uri}&stage=system&compress=gz"; info "wwinit_system=${wwinit_system}" + export wwinit_runtime="${wwinit_uri}&stage=runtime&compress=gz"; info "wwinit_runtime=${wwinit_runtime}" if [ -n "$(getarg wwinit.KernelOverride)" ] then - export wwinit_kmods="${wwinit_uri}kmods&compress=gz"; info "wwinit_kmods=${wwinit_kmods}" + export wwinit_kmods="${wwinit_uri}&stage=kmods&compress=gz"; info "wwinit_kmods=${wwinit_kmods}" fi wwinit_tmpfs_size=$(getarg wwinit.tmpfs.size=) From e2da5b6d09a514167f530f45daa465ea8eb820f8 Mon Sep 17 00:00:00 2001 From: Jonathon Anderson Date: Thu, 5 Sep 2024 18:39:31 -0400 Subject: [PATCH 11/11] Restore use of dmidecode in dracut for assettag and uuid This prevents exposing these values in /proc/cmdline. Signed-off-by: Jonathon Anderson --- dracut/modules.d/90wwinit/module-setup.sh | 2 +- dracut/modules.d/90wwinit/parse-wwinit.sh | 4 +++- etc/grub/grub.cfg.ww | 2 +- etc/ipxe/dracut.ipxe | 7 ++++--- warewulf.spec.in | 3 ++- 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/dracut/modules.d/90wwinit/module-setup.sh b/dracut/modules.d/90wwinit/module-setup.sh index 454562ad..d1fd62e5 100755 --- a/dracut/modules.d/90wwinit/module-setup.sh +++ b/dracut/modules.d/90wwinit/module-setup.sh @@ -14,7 +14,7 @@ depends() { } install() { - inst_multiple cpio curl + inst_multiple cpio curl dmidecode inst_hook cmdline 30 "$moddir/parse-wwinit.sh" inst_hook pre-mount 30 "$moddir/load-wwinit.sh" } diff --git a/dracut/modules.d/90wwinit/parse-wwinit.sh b/dracut/modules.d/90wwinit/parse-wwinit.sh index 6115c896..8479796d 100755 --- a/dracut/modules.d/90wwinit/parse-wwinit.sh +++ b/dracut/modules.d/90wwinit/parse-wwinit.sh @@ -6,7 +6,9 @@ if [ "${root}" = "wwinit" ] then info "root=${root}" - wwinit_uri="$(getarg wwinit.uri)" + uuid=$(dmidecode -s system-uuid) + assetkey=$(dmidecode -s chassis-asset-tag | sed -E -e 's/(^ +| +$)//g' -e 's/^(Unknown|Not Specified)$//g' -e 's/ /_/g') + wwinit_uri="$(getarg wwinit.uri)?assetkey=${assetkey}&uuid=${uuid}" export wwinit_container="${wwinit_uri}&stage=container&compress=gz"; info "wwinit_container=${wwinit_container}" export wwinit_system="${wwinit_uri}&stage=system&compress=gz"; info "wwinit_system=${wwinit_system}" export wwinit_runtime="${wwinit_uri}&stage=runtime&compress=gz"; info "wwinit_runtime=${wwinit_runtime}" diff --git a/etc/grub/grub.cfg.ww b/etc/grub/grub.cfg.ww index ae9bedbd..aff280a9 100644 --- a/etc/grub/grub.cfg.ww +++ b/etc/grub/grub.cfg.ww @@ -42,7 +42,7 @@ menuentry "Network boot node: {{.Id}}" --id ww4 { menuentry "Network boot node with dracut: {{.Id}}" --id dracut { initramfs="${uri}&stage=initramfs" - wwinit_uri="http://{{.Ipaddr}}:{{.Port}}/provision/${net_default_mac}?assetkey=${assetkey}" + wwinit_uri="http://{{.Ipaddr}}:{{.Port}}/provision/${net_default_mac}" {{if .KernelOverride }} echo "Kernel: {{.KernelOverride}}" diff --git a/etc/ipxe/dracut.ipxe b/etc/ipxe/dracut.ipxe index ca76c0bb..d002689f 100644 --- a/etc/ipxe/dracut.ipxe +++ b/etc/ipxe/dracut.ipxe @@ -13,7 +13,8 @@ echo Kernel: {{.ContainerName}} (container default) echo KernelArgs: {{.KernelArgs}} echo -set uri http://{{.Ipaddr}}:{{.Port}}/provision/{{.Hwaddr}}?assetkey=${asset}&uuid=${uuid} +set baseuri http://{{.Ipaddr}}:{{.Port}}/provision/{{.Hwaddr}} +set uri ${baseuri}?assetkey=${asset}&uuid=${uuid} echo Warewulf Controller: {{.Ipaddr}} echo Downloading Kernel Image: @@ -29,7 +30,7 @@ echo Downloading initramfs initrd --name initramfs ${uri}&stage=initramfs || goto reboot set dracut_net rd.neednet=1 {{range $devname, $netdev := .NetDevs}}{{if and $netdev.Hwaddr $netdev.Device}} ifname={{$netdev.Device}}:{{$netdev.Hwaddr}} {{end}}{{end}} -set dracut_wwinit root=wwinit wwinit.uri=${uri} {{if ne .KernelOverride ""}}wwinit.KernelOverride={{ .KernelOverride }}{{end}} init=/init +set dracut_wwinit root=wwinit wwinit.uri=${baseuri} {{if ne .KernelOverride ""}}wwinit.KernelOverride={{ .KernelOverride }}{{end}} init=/init echo Booting initramfs #echo Network KernelArgs: ${dracut_net} @@ -52,4 +53,4 @@ echo Rebooting in 30s. echo ================================================================================ sleep 30 reboot -{{ end }} \ No newline at end of file +{{ end }} diff --git a/warewulf.spec.in b/warewulf.spec.in index e0ac1202..2a6c43eb 100644 --- a/warewulf.spec.in +++ b/warewulf.spec.in @@ -95,6 +95,7 @@ Requires: dracut-network %endif Requires: curl Requires: cpio +Requires: dmidecode %description dracut Warewulf is a stateless and diskless container operating system provisioning @@ -220,7 +221,7 @@ getent group %{wwgroup} >/dev/null || groupadd -r %{wwgroup} %changelog * Tue Jun 18 2024 Josh Burks -- Add curl, cpio as requires for warewulf-dracut +- Add curl, cpio, and dracut as requires for warewulf-dracut * Thu Apr 18 2024 Jonathon Anderson - New warewulf-dracut subpackage