Skip to content
3 changes: 3 additions & 0 deletions pkg/disk/partition_table.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -364,6 +366,7 @@ func (pt *PartitionTable) relayout(size uint64) uint64 {
}

start := pt.AlignUp(header)
start += pt.StartOffset
Comment thread
achilleas-k marked this conversation as resolved.
size = pt.AlignUp(size)

var rootIdx = -1
Expand Down
55 changes: 44 additions & 11 deletions pkg/distro/fedora/distro.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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 (
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -237,7 +248,7 @@ var (
"cloud-init-local.service",
},
},
kernelOptions: defaultKernelOptions,
kernelOptions: cloudKernelOptions,
bootable: true,
defaultSize: 5 * common.GibiByte,
image: diskImage,
Expand Down Expand Up @@ -265,7 +276,7 @@ var (
osPkgsKey: vmdkCommonPackageSet,
},
defaultImageConfig: vmdkDefaultImageConfig,
kernelOptions: defaultKernelOptions,
kernelOptions: cloudKernelOptions,
bootable: true,
defaultSize: 2 * common.GibiByte,
image: diskImage,
Expand All @@ -283,7 +294,7 @@ var (
osPkgsKey: vmdkCommonPackageSet,
},
defaultImageConfig: vmdkDefaultImageConfig,
kernelOptions: defaultKernelOptions,
kernelOptions: cloudKernelOptions,
bootable: true,
defaultSize: 2 * common.GibiByte,
image: diskImage,
Expand Down Expand Up @@ -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,
Expand All @@ -354,7 +371,7 @@ var (
buildPipelines: []string{"build"},
payloadPipelines: []string{"os", "image", "xz"},
exports: []string{"xz"},
basePartitionTables: defaultBasePartitionTables,
basePartitionTables: minimalrawPartitionTables,
}
)

Expand Down Expand Up @@ -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",
Expand All @@ -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,
},
Expand Down Expand Up @@ -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,
Expand All @@ -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",
Expand All @@ -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",
},
},
Expand Down
14 changes: 14 additions & 0 deletions pkg/distro/fedora/images.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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
}

Expand Down Expand Up @@ -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
}
6 changes: 6 additions & 0 deletions pkg/distro/fedora/package_sets.go
Original file line number Diff line number Diff line change
Expand Up @@ -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",
},
}
}
Expand Down
95 changes: 95 additions & 0 deletions pkg/distro/fedora/partition_tables.go
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
4 changes: 4 additions & 0 deletions pkg/distro/image_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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
Expand Down
3 changes: 3 additions & 0 deletions pkg/distro/rhel7/images.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down
16 changes: 15 additions & 1 deletion pkg/distro/rhel8/edge.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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
}
Loading