diff --git a/internal/distro/rhel84/distro_v2.go b/internal/distro/rhel84/distro_v2.go index e00c8e289..cc9b72ec4 100644 --- a/internal/distro/rhel84/distro_v2.go +++ b/internal/distro/rhel84/distro_v2.go @@ -732,7 +732,7 @@ func (t *imageTypeS2) bootISOMonoStageOptions(kernelVer string) *osbuild.BootISO Size: 4096, Compression: osbuild.FSCompression{ Method: "xz", - Options: osbuild.FSCompressionOptions{ + Options: &osbuild.FSCompressionOptions{ // TODO: based on image arch BCJ: "x86", }, diff --git a/internal/distro/rhel85/distro.go b/internal/distro/rhel85/distro.go index 950c51c02..d382af46b 100644 --- a/internal/distro/rhel85/distro.go +++ b/internal/distro/rhel85/distro.go @@ -752,6 +752,10 @@ func (t *imageType) kickstartStageOptions(ostreeURL, ostreeRef string) *osbuild. } func (t *imageType) bootISOMonoStageOptions(kernelVer string) *osbuild.BootISOMonoStageOptions { + comprOptions := new(osbuild.FSCompressionOptions) + if bcj := osbuild.BCJOption(t.arch.Name()); bcj != "" { + comprOptions.BCJ = bcj + } return &osbuild.BootISOMonoStageOptions{ Product: osbuild.Product{ Name: "Red Hat Enterprise Linux", @@ -774,11 +778,8 @@ func (t *imageType) bootISOMonoStageOptions(kernelVer string) *osbuild.BootISOMo RootFS: osbuild.RootFS{ Size: 4096, Compression: osbuild.FSCompression{ - Method: "xz", - Options: osbuild.FSCompressionOptions{ - // TODO: based on image arch - BCJ: "x86", - }, + Method: "xz", + Options: comprOptions, }, }, } diff --git a/internal/osbuild2/bootiso_stage.go b/internal/osbuild2/bootiso_stage.go index 410fdf363..6420d8bdf 100644 --- a/internal/osbuild2/bootiso_stage.go +++ b/internal/osbuild2/bootiso_stage.go @@ -37,14 +37,28 @@ type RootFS struct { } type FSCompression struct { - Method string `json:"method"` - Options FSCompressionOptions `json:"options,omitempty"` + Method string `json:"method"` + Options *FSCompressionOptions `json:"options,omitempty"` } type FSCompressionOptions struct { BCJ string `json:"bcj"` } +// BCJOption returns the appropriate xz branch/call/jump (BCJ) filter for the +// given architecture +func BCJOption(arch string) string { + switch arch { + case "x86_64": + return "x86" + case "aarch64": + return "arm" + case "ppc64le": + return "powerpc" + } + return "" +} + func (BootISOMonoStageOptions) isStageOptions() {} type BootISOMonoStageInputs struct {