diff --git a/pkg/disk/partition_table.go b/pkg/disk/partition_table.go index 48b9211f15..b14aea1431 100644 --- a/pkg/disk/partition_table.go +++ b/pkg/disk/partition_table.go @@ -17,6 +17,7 @@ type PartitionTable struct { SectorSize uint64 // Sector size in bytes ExtraPadding uint64 // Extra space at the end of the partition table (sectors) + StartOffset uint64 // Starting offset of the first partition in the table (Mb) } func NewPartitionTable(basePT *PartitionTable, mountpoints []blueprint.FilesystemCustomization, imageSize uint64, lvmify bool, requiredSizes map[string]uint64, rng *rand.Rand) (*PartitionTable, error) { @@ -77,6 +78,7 @@ func (pt *PartitionTable) Clone() Entity { Partitions: make([]Partition, len(pt.Partitions)), SectorSize: pt.SectorSize, ExtraPadding: pt.ExtraPadding, + StartOffset: pt.StartOffset, } for idx, partition := range pt.Partitions { @@ -364,6 +366,7 @@ func (pt *PartitionTable) relayout(size uint64) uint64 { } start := pt.AlignUp(header) + start += pt.StartOffset size = pt.AlignUp(size) var rootIdx = -1 diff --git a/pkg/distro/fedora/distro.go b/pkg/distro/fedora/distro.go index c0758afe21..8d237aa2d8 100644 --- a/pkg/distro/fedora/distro.go +++ b/pkg/distro/fedora/distro.go @@ -8,6 +8,7 @@ import ( "github.com/osbuild/images/internal/common" "github.com/osbuild/images/internal/environment" + "github.com/osbuild/images/internal/fsnode" "github.com/osbuild/images/internal/oscap" "github.com/osbuild/images/pkg/distro" "github.com/osbuild/images/pkg/osbuild" @@ -31,8 +32,11 @@ const ( // blueprint package set name blueprintPkgsKey = "blueprint" - //Kernel options for ami, qcow2, openstack, vhd and vmdk types - defaultKernelOptions = "ro no_timer_check console=ttyS0,115200n8 biosdevname=0 net.ifnames=0" + //Default kernel command line + defaultKernelOptions = "ro" + + // Added kernel command line options for ami, qcow2, openstack, vhd and vmdk types + cloudKernelOptions = "ro no_timer_check console=ttyS0,115200n8 biosdevname=0 net.ifnames=0" ) var ( @@ -61,6 +65,13 @@ var ( "dbus-parsec", } + minimalRawServices = []string{ + "NetworkManager.service", + "firewalld.service", + "initial-setup.service", + "sshd.service", + } + // Image Definitions imageInstallerImgType = imageType{ name: "image-installer", @@ -237,7 +248,7 @@ var ( "cloud-init-local.service", }, }, - kernelOptions: defaultKernelOptions, + kernelOptions: cloudKernelOptions, bootable: true, defaultSize: 5 * common.GibiByte, image: diskImage, @@ -265,7 +276,7 @@ var ( osPkgsKey: vmdkCommonPackageSet, }, defaultImageConfig: vmdkDefaultImageConfig, - kernelOptions: defaultKernelOptions, + kernelOptions: cloudKernelOptions, bootable: true, defaultSize: 2 * common.GibiByte, image: diskImage, @@ -283,7 +294,7 @@ var ( osPkgsKey: vmdkCommonPackageSet, }, defaultImageConfig: vmdkDefaultImageConfig, - kernelOptions: defaultKernelOptions, + kernelOptions: cloudKernelOptions, bootable: true, defaultSize: 2 * common.GibiByte, image: diskImage, @@ -346,6 +357,12 @@ var ( packageSets: map[string]packageSetFunc{ osPkgsKey: minimalrpmPackageSet, }, + defaultImageConfig: &distro.ImageConfig{ + EnabledServices: minimalRawServices, + // NOTE: temporary workaround for a bug in initial-setup that + // requires a kickstart file in the root directory. + Files: []*fsnode.File{initialSetupKickstart()}, + }, rpmOstree: false, kernelOptions: defaultKernelOptions, bootable: true, @@ -354,7 +371,7 @@ var ( buildPipelines: []string{"build"}, payloadPipelines: []string{"os", "image", "xz"}, exports: []string{"xz"}, - basePartitionTables: defaultBasePartitionTables, + basePartitionTables: minimalrawPartitionTables, } ) @@ -706,10 +723,12 @@ func newDistro(version int) distro.Distro { &platform.Aarch64{ BasePlatform: platform.BasePlatform{ FirmwarePackages: []string{ - "arm-image-installer", // ?? + "arm-image-installer", "bcm283x-firmware", - "iwl7260-firmware", - "uboot-images-armv8", // ?? + "brcmfmac-firmware", + "iwlwifi-mvm-firmware", + "realtek-firmware", + "uboot-images-armv8", }, }, UEFIVendor: "fedora", @@ -721,7 +740,7 @@ func newDistro(version int) distro.Distro { liveInstallerImgType, ) aarch64.addImageTypes( - &platform.Aarch64_IoT{ + &platform.Aarch64_Fedora{ BasePlatform: platform.BasePlatform{ ImageFormat: platform.FORMAT_RAW, }, @@ -771,10 +790,18 @@ func newDistro(version int) distro.Distro { minimalrawImgType, ) aarch64.addImageTypes( - &platform.Aarch64{ + &platform.Aarch64_Fedora{ UEFIVendor: "fedora", BasePlatform: platform.BasePlatform{ ImageFormat: platform.FORMAT_RAW, + FirmwarePackages: []string{ + "arm-image-installer", + "bcm283x-firmware", + "uboot-images-armv8", + }, + }, + BootFiles: [][2]string{ + {"/usr/share/uboot/rpi_arm64/u-boot.bin", "/boot/efi/rpi-u-boot.bin"}, }, }, minimalrawImgType, @@ -793,8 +820,10 @@ func newDistro(version int) distro.Distro { "grub2-tools", "grub2-tools-extra", "grub2-tools-minimal", + "brcmfmac-firmware", "iwlwifi-dvm-firmware", "iwlwifi-mvm-firmware", + "realtek-firmware", "microcode_ctl", "syslinux", "syslinux-nonlinux", @@ -816,6 +845,10 @@ func newDistro(version int) distro.Distro { "grub2-tools", "grub2-tools-extra", "grub2-tools-minimal", + "brcmfmac-firmware", + "iwlwifi-dvm-firmware", + "iwlwifi-mvm-firmware", + "realtek-firmware", "uboot-images-armv8", }, }, diff --git a/pkg/distro/fedora/images.go b/pkg/distro/fedora/images.go index e99d42e000..7f9040633e 100644 --- a/pkg/distro/fedora/images.go +++ b/pkg/distro/fedora/images.go @@ -6,6 +6,7 @@ import ( "github.com/osbuild/images/internal/common" "github.com/osbuild/images/internal/fdo" + "github.com/osbuild/images/internal/fsnode" "github.com/osbuild/images/internal/ignition" "github.com/osbuild/images/internal/oscap" "github.com/osbuild/images/internal/users" @@ -224,6 +225,9 @@ func osCustomizations( osc.PwQuality = imageConfig.PwQuality osc.WSLConfig = imageConfig.WSLConfig + osc.Files = append(osc.Files, imageConfig.Files...) + osc.Directories = append(osc.Directories, imageConfig.Directories...) + return osc } @@ -684,3 +688,13 @@ func makeOSTreePayloadCommit(options *ostree.ImageOptions, defaultRef string) (o RHSM: options.RHSM, }, nil } + +// initialSetupKickstart returns the File configuration for a kickstart file +// that's required to enable initial-setup to run on first boot. +func initialSetupKickstart() *fsnode.File { + file, err := fsnode.NewFile("/root/anaconda-ks.cfg", nil, "root", "root", []byte("# Run initial-setup on first boot\n# Created by osbuild\nfirstboot --reconfig\n")) + if err != nil { + panic(err) + } + return file +} diff --git a/pkg/distro/fedora/package_sets.go b/pkg/distro/fedora/package_sets.go index ccac6e8ec3..4ebcfa7adc 100644 --- a/pkg/distro/fedora/package_sets.go +++ b/pkg/distro/fedora/package_sets.go @@ -535,6 +535,12 @@ func minimalrpmPackageSet(t *imageType) rpmmd.PackageSet { return rpmmd.PackageSet{ Include: []string{ "@core", + "initial-setup", + "libxkbcommon", + "NetworkManager-wifi", + "brcmfmac-firmware", + "realtek-firmware", + "iwlwifi-mvm-firmware", }, } } diff --git a/pkg/distro/fedora/partition_tables.go b/pkg/distro/fedora/partition_tables.go index 03011234b0..0aa90723ac 100644 --- a/pkg/distro/fedora/partition_tables.go +++ b/pkg/distro/fedora/partition_tables.go @@ -108,6 +108,101 @@ var defaultBasePartitionTables = distro.BasePartitionTableMap{ }, } +var minimalrawPartitionTables = distro.BasePartitionTableMap{ + platform.ARCH_X86_64.String(): disk.PartitionTable{ + UUID: "D209C89E-EA5E-4FBD-B161-B461CCE297E0", + Type: "gpt", + StartOffset: 8 * common.MebiByte, + Partitions: []disk.Partition{ + { + Size: 200 * common.MebiByte, + Type: disk.EFISystemPartitionGUID, + UUID: disk.EFISystemPartitionUUID, + Payload: &disk.Filesystem{ + Type: "vfat", + UUID: disk.EFIFilesystemUUID, + Mountpoint: "/boot/efi", + Label: "EFI-SYSTEM", + FSTabOptions: "defaults,uid=0,gid=0,umask=077,shortname=winnt", + FSTabFreq: 0, + FSTabPassNo: 2, + }, + }, + { + Size: 500 * common.MebiByte, + Type: disk.XBootLDRPartitionGUID, + UUID: disk.FilesystemDataUUID, + Payload: &disk.Filesystem{ + Type: "ext4", + Mountpoint: "/boot", + Label: "boot", + FSTabOptions: "defaults", + FSTabFreq: 0, + FSTabPassNo: 0, + }, + }, + { + Size: 2 * common.GibiByte, + Type: disk.FilesystemDataGUID, + UUID: disk.RootPartitionUUID, + Payload: &disk.Filesystem{ + Type: "ext4", + Label: "root", + Mountpoint: "/", + FSTabOptions: "defaults", + FSTabFreq: 0, + FSTabPassNo: 0, + }, + }, + }, + }, + platform.ARCH_AARCH64.String(): disk.PartitionTable{ + UUID: "0xc1748067", + Type: "dos", + StartOffset: 8 * common.MebiByte, + Partitions: []disk.Partition{ + { + Size: 200 * common.MebiByte, + Type: "06", + Bootable: true, + Payload: &disk.Filesystem{ + Type: "vfat", + UUID: disk.EFIFilesystemUUID, + Mountpoint: "/boot/efi", + Label: "EFI-SYSTEM", + FSTabOptions: "defaults,uid=0,gid=0,umask=077,shortname=winnt", + FSTabFreq: 0, + FSTabPassNo: 2, + }, + }, + { + Size: 500 * common.MebiByte, + Type: "83", + Payload: &disk.Filesystem{ + Type: "ext4", + Mountpoint: "/boot", + Label: "boot", + FSTabOptions: "defaults", + FSTabFreq: 0, + FSTabPassNo: 0, + }, + }, + { + Size: 2 * common.GibiByte, + Type: "83", + Payload: &disk.Filesystem{ + Type: "ext4", + Label: "root", + Mountpoint: "/", + FSTabOptions: "defaults", + FSTabFreq: 0, + FSTabPassNo: 0, + }, + }, + }, + }, +} + var iotBasePartitionTables = distro.BasePartitionTableMap{ platform.ARCH_X86_64.String(): disk.PartitionTable{ UUID: "D209C89E-EA5E-4FBD-B161-B461CCE297E0", diff --git a/pkg/distro/image_config.go b/pkg/distro/image_config.go index 51ebb69166..dad0942fca 100644 --- a/pkg/distro/image_config.go +++ b/pkg/distro/image_config.go @@ -4,6 +4,7 @@ import ( "fmt" "reflect" + "github.com/osbuild/images/internal/fsnode" "github.com/osbuild/images/internal/shell" "github.com/osbuild/images/pkg/osbuild" "github.com/osbuild/images/pkg/subscription" @@ -62,6 +63,9 @@ type ImageConfig struct { UdevRules *osbuild.UdevRulesStageOptions GCPGuestAgentConfig *osbuild.GcpGuestAgentConfigOptions WSLConfig *osbuild.WSLConfStageOptions + + Files []*fsnode.File + Directories []*fsnode.Directory } // InheritFrom inherits unset values from the provided parent configuration and diff --git a/pkg/distro/rhel7/images.go b/pkg/distro/rhel7/images.go index e3ca6dc209..bf1987a5af 100644 --- a/pkg/distro/rhel7/images.go +++ b/pkg/distro/rhel7/images.go @@ -213,6 +213,9 @@ func osCustomizations( osc.UdevRules = imageConfig.UdevRules osc.GCPGuestAgentConfig = imageConfig.GCPGuestAgentConfig + osc.Files = append(osc.Files, imageConfig.Files...) + osc.Directories = append(osc.Directories, imageConfig.Directories...) + return osc } diff --git a/pkg/distro/rhel8/edge.go b/pkg/distro/rhel8/edge.go index 4fcd6fda2c..f19ffd2fce 100644 --- a/pkg/distro/rhel8/edge.go +++ b/pkg/distro/rhel8/edge.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/osbuild/images/internal/common" + "github.com/osbuild/images/internal/fsnode" "github.com/osbuild/images/pkg/distro" "github.com/osbuild/images/pkg/platform" "github.com/osbuild/images/pkg/rpmmd" @@ -148,8 +149,14 @@ func minimalRawImgType(rd distribution) imageType { packageSets: map[string]packageSetFunc{ osPkgsKey: minimalrpmPackageSet, }, + defaultImageConfig: &distro.ImageConfig{ + EnabledServices: minimalrawServices(rd), + // NOTE: temporary workaround for a bug in initial-setup that + // requires a kickstart file in the root directory. + Files: []*fsnode.File{initialSetupKickstart()}, + }, rpmOstree: false, - kernelOptions: "ro no_timer_check console=ttyS0,115200n8 biosdevname=0 net.ifnames=0", + kernelOptions: "ro", bootable: true, defaultSize: 2 * common.GibiByte, image: diskImage, @@ -401,3 +408,10 @@ func edgeServices(rd distribution) []string { return edgeServices } + +func minimalrawServices(rd distribution) []string { + // Common Services + var minimalrawServices = []string{"NetworkManager.service", "firewalld.service", "sshd.service", "initial-setup.service"} + + return minimalrawServices +} diff --git a/pkg/distro/rhel8/images.go b/pkg/distro/rhel8/images.go index 40d309dca8..cb7ca63bc7 100644 --- a/pkg/distro/rhel8/images.go +++ b/pkg/distro/rhel8/images.go @@ -5,6 +5,7 @@ import ( "math/rand" "github.com/osbuild/images/internal/fdo" + "github.com/osbuild/images/internal/fsnode" "github.com/osbuild/images/internal/ignition" "github.com/osbuild/images/internal/oscap" "github.com/osbuild/images/internal/users" @@ -251,6 +252,9 @@ func osCustomizations( osc.GCPGuestAgentConfig = imageConfig.GCPGuestAgentConfig osc.WSLConfig = imageConfig.WSLConfig + osc.Files = append(osc.Files, imageConfig.Files...) + osc.Directories = append(osc.Directories, imageConfig.Directories...) + return osc } @@ -599,3 +603,13 @@ func makeOSTreePayloadCommit(options *ostree.ImageOptions, defaultRef string) (o RHSM: options.RHSM, }, nil } + +// initialSetupKickstart returns the File configuration for a kickstart file +// that's required to enable initial-setup to run on first boot. +func initialSetupKickstart() *fsnode.File { + file, err := fsnode.NewFile("/root/anaconda-ks.cfg", nil, "root", "root", []byte("# Run initial-setup on first boot\n# Created by osbuild\nfirstboot --reconfig\nlang en_US.UTF-8\n")) + if err != nil { + panic(err) + } + return file +} diff --git a/pkg/distro/rhel8/package_sets.go b/pkg/distro/rhel8/package_sets.go index d8b7f781ba..6b478cac74 100644 --- a/pkg/distro/rhel8/package_sets.go +++ b/pkg/distro/rhel8/package_sets.go @@ -78,6 +78,11 @@ func minimalrpmPackageSet(t *imageType) rpmmd.PackageSet { return rpmmd.PackageSet{ Include: []string{ "@core", + "initial-setup", + "libxkbcommon", + "NetworkManager-wifi", + "iwl7260-firmware", + "iwl3160-firmware", }, } } diff --git a/pkg/distro/rhel9/edge.go b/pkg/distro/rhel9/edge.go index 9f0795281f..bea68f8bdc 100644 --- a/pkg/distro/rhel9/edge.go +++ b/pkg/distro/rhel9/edge.go @@ -5,6 +5,7 @@ import ( "github.com/osbuild/images/internal/common" "github.com/osbuild/images/internal/environment" + "github.com/osbuild/images/internal/fsnode" "github.com/osbuild/images/pkg/disk" "github.com/osbuild/images/pkg/distro" "github.com/osbuild/images/pkg/osbuild" @@ -183,15 +184,22 @@ var ( packageSets: map[string]packageSetFunc{ osPkgsKey: minimalrpmPackageSet, }, + defaultImageConfig: &distro.ImageConfig{ + EnabledServices: minimalrawServices, + SystemdUnit: systemdUnits, + // NOTE: temporary workaround for a bug in initial-setup that + // requires a kickstart file in the root directory. + Files: []*fsnode.File{initialSetupKickstart()}, + }, rpmOstree: false, - kernelOptions: "ro no_timer_check console=ttyS0,115200n8 biosdevname=0 net.ifnames=0", + kernelOptions: "ro", bootable: true, defaultSize: 2 * common.GibiByte, image: diskImage, buildPipelines: []string{"build"}, payloadPipelines: []string{"os", "image", "xz"}, exports: []string{"xz"}, - basePartitionTables: defaultBasePartitionTables, + basePartitionTables: minimalrawPartitionTables, } // Shared Services @@ -199,6 +207,9 @@ var ( // TODO(runcom): move fdo-client-linuxapp.service to presets? "NetworkManager.service", "firewalld.service", "sshd.service", "fdo-client-linuxapp.service", } + minimalrawServices = []string{ + "NetworkManager.service", "firewalld.service", "sshd.service", "initial-setup.service", + } //dropin to disable grub-boot-success.timer if greenboot present systemdUnits = []*osbuild.SystemdUnitStageOptions{ { @@ -213,6 +224,102 @@ var ( }, } // Partition tables + minimalrawPartitionTables = distro.BasePartitionTableMap{ + platform.ARCH_X86_64.String(): disk.PartitionTable{ + UUID: "D209C89E-EA5E-4FBD-B161-B461CCE297E0", + Type: "gpt", + StartOffset: 8 * common.MebiByte, + Partitions: []disk.Partition{ + { + Size: 200 * common.MebiByte, + Type: disk.EFISystemPartitionGUID, + UUID: disk.EFISystemPartitionUUID, + Payload: &disk.Filesystem{ + Type: "vfat", + UUID: disk.EFIFilesystemUUID, + Mountpoint: "/boot/efi", + Label: "EFI-SYSTEM", + FSTabOptions: "defaults,uid=0,gid=0,umask=077,shortname=winnt", + FSTabFreq: 0, + FSTabPassNo: 2, + }, + }, + { + Size: 500 * common.MebiByte, + Type: disk.XBootLDRPartitionGUID, + UUID: disk.FilesystemDataUUID, + Payload: &disk.Filesystem{ + Type: "xfs", + Mountpoint: "/boot", + Label: "boot", + FSTabOptions: "defaults", + FSTabFreq: 0, + FSTabPassNo: 0, + }, + }, + { + Size: 2 * common.GibiByte, + Type: disk.FilesystemDataGUID, + UUID: disk.RootPartitionUUID, + Payload: &disk.Filesystem{ + Type: "xfs", + Label: "root", + Mountpoint: "/", + FSTabOptions: "defaults", + FSTabFreq: 0, + FSTabPassNo: 0, + }, + }, + }, + }, + platform.ARCH_AARCH64.String(): disk.PartitionTable{ + UUID: "D209C89E-EA5E-4FBD-B161-B461CCE297E0", + Type: "gpt", + StartOffset: 8 * common.MebiByte, + Partitions: []disk.Partition{ + { + Size: 200 * common.MebiByte, + Type: disk.EFISystemPartitionGUID, + UUID: disk.EFISystemPartitionUUID, + Payload: &disk.Filesystem{ + Type: "vfat", + UUID: disk.EFIFilesystemUUID, + Mountpoint: "/boot/efi", + Label: "EFI-SYSTEM", + FSTabOptions: "defaults,uid=0,gid=0,umask=077,shortname=winnt", + FSTabFreq: 0, + FSTabPassNo: 2, + }, + }, + { + Size: 500 * common.MebiByte, + Type: disk.XBootLDRPartitionGUID, + UUID: disk.FilesystemDataUUID, + Payload: &disk.Filesystem{ + Type: "xfs", + Mountpoint: "/boot", + Label: "boot", + FSTabOptions: "defaults", + FSTabFreq: 0, + FSTabPassNo: 0, + }, + }, + { + Size: 2 * common.GibiByte, + Type: disk.FilesystemDataGUID, + UUID: disk.RootPartitionUUID, + Payload: &disk.Filesystem{ + Type: "xfs", + Label: "root", + Mountpoint: "/", + FSTabOptions: "defaults", + FSTabFreq: 0, + FSTabPassNo: 0, + }, + }, + }, + }, + } edgeBasePartitionTables = distro.BasePartitionTableMap{ platform.ARCH_X86_64.String(): disk.PartitionTable{ UUID: "D209C89E-EA5E-4FBD-B161-B461CCE297E0", diff --git a/pkg/distro/rhel9/images.go b/pkg/distro/rhel9/images.go index 461342f012..4cbcd85299 100644 --- a/pkg/distro/rhel9/images.go +++ b/pkg/distro/rhel9/images.go @@ -6,6 +6,7 @@ import ( "github.com/osbuild/images/internal/common" "github.com/osbuild/images/internal/fdo" + "github.com/osbuild/images/internal/fsnode" "github.com/osbuild/images/internal/ignition" "github.com/osbuild/images/internal/oscap" "github.com/osbuild/images/internal/users" @@ -248,6 +249,9 @@ func osCustomizations( osc.GCPGuestAgentConfig = imageConfig.GCPGuestAgentConfig osc.WSLConfig = imageConfig.WSLConfig + osc.Files = append(osc.Files, imageConfig.Files...) + osc.Directories = append(osc.Directories, imageConfig.Directories...) + return osc } @@ -647,3 +651,13 @@ func makeOSTreePayloadCommit(options *ostree.ImageOptions, defaultRef string) (o RHSM: options.RHSM, }, nil } + +// initialSetupKickstart returns the File configuration for a kickstart file +// that's required to enable initial-setup to run on first boot. +func initialSetupKickstart() *fsnode.File { + file, err := fsnode.NewFile("/root/anaconda-ks.cfg", nil, "root", "root", []byte("# Run initial-setup on first boot\n# Created by osbuild\nfirstboot --reconfig\nlang en_US.UTF-8\n")) + if err != nil { + panic(err) + } + return file +} diff --git a/pkg/distro/rhel9/package_sets.go b/pkg/distro/rhel9/package_sets.go index 3c054dcf85..d1228c3015 100644 --- a/pkg/distro/rhel9/package_sets.go +++ b/pkg/distro/rhel9/package_sets.go @@ -250,6 +250,11 @@ func minimalrpmPackageSet(t *imageType) rpmmd.PackageSet { return rpmmd.PackageSet{ Include: []string{ "@core", + "initial-setup", + "libxkbcommon", + "NetworkManager-wifi", + "iwl7260-firmware", + "iwl3160-firmware", }, } } diff --git a/pkg/platform/aarch64.go b/pkg/platform/aarch64.go index 2e8b81cd66..879de6becd 100644 --- a/pkg/platform/aarch64.go +++ b/pkg/platform/aarch64.go @@ -28,21 +28,21 @@ func (p *Aarch64) GetPackages() []string { return packages } -type Aarch64_IoT struct { +type Aarch64_Fedora struct { BasePlatform UEFIVendor string BootFiles [][2]string } -func (p *Aarch64_IoT) GetArch() Arch { +func (p *Aarch64_Fedora) GetArch() Arch { return ARCH_AARCH64 } -func (p *Aarch64_IoT) GetUEFIVendor() string { +func (p *Aarch64_Fedora) GetUEFIVendor() string { return p.UEFIVendor } -func (p *Aarch64_IoT) GetPackages() []string { +func (p *Aarch64_Fedora) GetPackages() []string { packages := p.BasePlatform.FirmwarePackages if p.UEFIVendor != "" { @@ -57,6 +57,6 @@ func (p *Aarch64_IoT) GetPackages() []string { return packages } -func (p *Aarch64_IoT) GetBootFiles() [][2]string { +func (p *Aarch64_Fedora) GetBootFiles() [][2]string { return p.BootFiles }