From c61af786f3eab3b4243a8ec92fb94a9c50a84b4e Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Mon, 26 Feb 2024 23:49:45 +0000 Subject: [PATCH] Add support for machines that do not have a SMBIOS Try to read from "/sys/firmware/devicetree/base/serial-number" if there is no SMBIOS (Raspberry Pi Serial Number) and create a UUID from that. Fixes warewulf/warewulf#1108 Signed-off-by: Timothy Middelkoop --- internal/app/wwclient/root.go | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/internal/app/wwclient/root.go b/internal/app/wwclient/root.go index 539d1dc8..1dadb52c 100644 --- a/internal/app/wwclient/root.go +++ b/internal/app/wwclient/root.go @@ -118,15 +118,26 @@ func CobraRunE(cmd *cobra.Command, args []string) (err error) { ExpectContinueTimeout: 1 * time.Second, }, } - smbiosDump, err := smbios.New() - if err != nil { - wwlog.Error("Could not get SMBIOS info: %s", err) - os.Exit(1) + var localUUID uuid.UUID + var tag string + smbiosDump, smbiosErr := smbios.New() + if smbiosErr == nil { + sysinfoDump := smbiosDump.SystemInformation() + localUUID, _ = sysinfoDump.UUID() + x := smbiosDump.SystemEnclosure() + tag = strings.ReplaceAll(x.AssetTagNumber(), " ", "_") + } else { + // Raspberry Pi serial and DUID locations + // /sys/firmware/devicetree/base/serial-number + // /sys/firmware/devicetree/base/chosen/rpi-duid + piSerial, err := os.ReadFile("/sys/firmware/devicetree/base/serial-number") + if err != nil { + wwlog.Error("Could not get SMBIOS info: %s", smbiosErr) + os.Exit(1) + } + localUUID = uuid.NewSHA1(uuid.NameSpaceURL, []byte("http://raspberrypi.com/serial-number/"+string(piSerial))) + tag = "Unknown" } - sysinfoDump := smbiosDump.SystemInformation() - localUUID, _ := sysinfoDump.UUID() - x := smbiosDump.SystemEnclosure() - tag := strings.ReplaceAll(x.AssetTagNumber(), " ", "_") cmdline, err := os.ReadFile("/proc/cmdline") if err != nil {