From 076c92089f60d81ff7a6245888d3d226a7dc33bb Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 5 Dec 2024 11:57:00 +0100 Subject: [PATCH] osbuild: add support for `swap` in the bootupd stage Add support for swap in bootupd device generation for both plain and LVM partitions. --- pkg/osbuild/bootupd_stage.go | 23 ++++++++++++++--------- pkg/osbuild/bootupd_stage_test.go | 20 ++++++++++++++++++-- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/pkg/osbuild/bootupd_stage.go b/pkg/osbuild/bootupd_stage.go index bee683fba9..3afa264a9a 100644 --- a/pkg/osbuild/bootupd_stage.go +++ b/pkg/osbuild/bootupd_stage.go @@ -110,17 +110,22 @@ func genMountsForBootupd(source string, pt *disk.PartitionTable) ([]Mount, error case *disk.LVMVolumeGroup: for i := range payload.LogicalVolumes { lv := &payload.LogicalVolumes[i] - mountable, ok := lv.Payload.(disk.Mountable) - if !ok { - return nil, fmt.Errorf("expected LV payload %+[1]v to be mountable, got %[1]T", lv.Payload) + switch payload := lv.Payload.(type) { + case disk.Mountable: + mount, err := genOsbuildMount(lv.Name, payload) + if err != nil { + return nil, err + } + mount.Source = lv.Name + mounts = append(mounts, *mount) + case *disk.Swap: + // nothing to do + default: + return nil, fmt.Errorf("expected LV payload %+[1]v to be mountable or swap, got %[1]T", lv.Payload) } - mount, err := genOsbuildMount(lv.Name, mountable) - if err != nil { - return nil, err - } - mount.Source = lv.Name - mounts = append(mounts, *mount) } + case *disk.Swap: + // nothing to do default: return nil, fmt.Errorf("type %T not supported by bootupd handling yet", part.Payload) } diff --git a/pkg/osbuild/bootupd_stage_test.go b/pkg/osbuild/bootupd_stage_test.go index e1791b5bc5..4374e5b6ef 100644 --- a/pkg/osbuild/bootupd_stage_test.go +++ b/pkg/osbuild/bootupd_stage_test.go @@ -249,6 +249,13 @@ var fakePt = &disk.PartitionTable{ FSTabPassNo: 1, }, }, + { + Size: 2 * datasizes.GibiByte, + Type: disk.SwapPartitionGUID, + Payload: &disk.Swap{ + Label: "swap", + }, + }, }, } @@ -354,7 +361,8 @@ func TestGenBootupdDevicesMountsHappyLVM(t *testing.T) { UEFIVendor: "test", } - fakePt := testdisk.MakeFakeLVMPartitionTable("/", "/home", "/boot/efi", "/boot") + fakePt := testdisk.MakeFakeLVMPartitionTable("/", "/home", "/boot/efi", "/boot", "swap") + devices, mounts, err := osbuild.GenBootupdDevicesMounts(filename, fakePt, pf) require.Nil(t, err) assert.Equal(t, devices, map[string]osbuild.Device{ @@ -381,6 +389,14 @@ func TestGenBootupdDevicesMountsHappyLVM(t *testing.T) { VGPartnum: common.ToPtr(3), }, }, + "lv-for-swap": { + Type: "org.osbuild.lvm2.lv", + Parent: "disk", + Options: &osbuild.LVM2LVDeviceOptions{ + Volume: "lv-for-swap", + VGPartnum: common.ToPtr(3), + }, + }, }) assert.Equal(t, []osbuild.Mount{ { @@ -424,5 +440,5 @@ func TestGenBootupdDevicesMountsLVM_NotMountableLV(t *testing.T) { _, _, err := osbuild.GenBootupdDevicesMounts(filename, fakePt, pf) require.Error(t, err) - require.Regexp(t, `expected LV payload .* to be mountable, got \*disk.LUKSContainer`, err.Error()) + require.Regexp(t, `expected LV payload .* to be mountable or swap, got \*disk.LUKSContainer`, err.Error()) }