diff --git a/internal/distro/rhel8/distro.go b/internal/distro/rhel8/distro.go index 88116cb25..f64798a75 100644 --- a/internal/distro/rhel8/distro.go +++ b/internal/distro/rhel8/distro.go @@ -3,6 +3,7 @@ package rhel8 import ( "encoding/json" "errors" + "fmt" "sort" "strconv" @@ -581,10 +582,122 @@ func tarAssembler(filename, compression string) *osbuild.Assembler { }) } +func ostreeCommitAssembler(options distro.ImageOptions, arch distro.Arch) *osbuild.Assembler { + ref := options.OSTree.Ref + if ref == "" { + ref = fmt.Sprintf("rhel/8/%s/edge", arch.Name()) + } + return osbuild.NewOSTreeCommitAssembler( + &osbuild.OSTreeCommitAssemblerOptions{ + Ref: ref, + Parent: options.OSTree.Parent, + Tar: osbuild.OSTreeCommitAssemblerTarOptions{ + Filename: "commit.tar", + }, + }, + ) +} + // New creates a new distro object, defining the supported architectures and image types func New() distro.Distro { const GigaByte = 1024 * 1024 * 1024 + edgeImgTypeX86_64 := imageType{ + name: "rhel-edge-commit", + filename: "commit.tar", + mimeType: "application/x-tar", + packages: []string{ + "redhat-release", // TODO: is this correct for Edge? + "glibc", "glibc-minimal-langpack", "nss-altfiles", + "kernel", + "dracut-config-generic", "dracut-network", + "basesystem", "bash", "platform-python", + "shadow-utils", "chrony", "setup", "shadow-utils", + "sudo", "systemd", "coreutils", "util-linux", + "curl", "vim-minimal", + "rpm", "rpm-ostree", "polkit", + "lvm2", "cryptsetup", "pinentry", + "e2fsprogs", "dosfstools", + "keyutils", "gnupg2", + "attr", "xz", "gzip", + "firewalld", "iptables", + "NetworkManager", "NetworkManager-wifi", "NetworkManager-wwan", + "wpa_supplicant", + "dnsmasq", "traceroute", + "hostname", "iproute", "iputils", + "openssh-clients", "procps-ng", "rootfiles", + "openssh-server", "passwd", + "policycoreutils", "policycoreutils-python-utils", + "selinux-policy-targeted", "setools-console", + "less", "tar", "rsync", + "fwupd", "usbguard", + "bash-completion", "tmux", + "ima-evm-utils", + "audit", "rng-tools", + "podman", "container-selinux", "skopeo", "criu", + "slirp4netns", "fuse-overlayfs", + "clevis", "clevis-dracut", "clevis-luks", + // x86 specific + "grub2", "grub2-efi-x64", "efibootmgr", "shim-x64", "microcode_ctl", + "iwl1000-firmware", "iwl100-firmware", "iwl105-firmware", "iwl135-firmware", + "iwl2000-firmware", "iwl2030-firmware", "iwl3160-firmware", "iwl5000-firmware", + "iwl5150-firmware", "iwl6000-firmware", "iwl6050-firmware", "iwl7260-firmware", + }, + enabledServices: []string{ + "NetworkManager.service", "firewalld.service", "rngd.service", "sshd.service", + }, + rpmOstree: true, + assembler: func(uefi bool, options distro.ImageOptions, arch distro.Arch) *osbuild.Assembler { + return ostreeCommitAssembler(options, arch) + }, + } + edgeImgTypeAarch64 := imageType{ + name: "rhel-edge-commit", + filename: "commit.tar", + mimeType: "application/x-tar", + packages: []string{ + "redhat-release", // TODO: is this correct for Edge? + "glibc", "glibc-minimal-langpack", "nss-altfiles", + "kernel", + "dracut-config-generic", "dracut-network", + "basesystem", "bash", "platform-python", + "shadow-utils", "chrony", "setup", "shadow-utils", + "sudo", "systemd", "coreutils", "util-linux", + "curl", "vim-minimal", + "rpm", "rpm-ostree", "polkit", + "lvm2", "cryptsetup", "pinentry", + "e2fsprogs", "dosfstools", + "keyutils", "gnupg2", + "attr", "xz", "gzip", + "firewalld", "iptables", + "NetworkManager", "NetworkManager-wifi", "NetworkManager-wwan", + "wpa_supplicant", + "dnsmasq", "traceroute", + "hostname", "iproute", "iputils", + "openssh-clients", "procps-ng", "rootfiles", + "openssh-server", "passwd", + "policycoreutils", "policycoreutils-python-utils", + "selinux-policy-targeted", "setools-console", + "less", "tar", "rsync", + "fwupd", "usbguard", + "bash-completion", "tmux", + "ima-evm-utils", + "audit", "rng-tools", + "podman", "container-selinux", "skopeo", "criu", + "slirp4netns", "fuse-overlayfs", + "clevis", "clevis-dracut", "clevis-luks", + // aarch64 specific + "grub2-efi-aa64", "efibootmgr", "shim-aa64", + "iwl7260-firmware", + }, + enabledServices: []string{ + "NetworkManager.service", "firewalld.service", "rngd.service", "sshd.service", + }, + rpmOstree: true, + assembler: func(uefi bool, options distro.ImageOptions, arch distro.Arch) *osbuild.Assembler { + return ostreeCommitAssembler(options, arch) + }, + } amiImgType := imageType{ name: "ami", filename: "image.vhdx", @@ -887,6 +1000,7 @@ func New() distro.Distro { } x8664.setImageTypes( amiImgType, + edgeImgTypeX86_64, qcow2ImageType, openstackImgType, tarImgType, @@ -908,6 +1022,7 @@ func New() distro.Distro { } aarch64.setImageTypes( amiImgType, + edgeImgTypeAarch64, qcow2ImageType, openstackImgType, tarImgType, diff --git a/internal/store/json.go b/internal/store/json.go index 60c590b8d..1a6cc86fe 100644 --- a/internal/store/json.go +++ b/internal/store/json.go @@ -336,6 +336,7 @@ var imageTypeCompatMapping = map[string]string{ "partitioned-disk": "Partitioned-disk", "tar": "Tar", "fedora-iot-commit": "fedora-iot-commit", + "rhel-edge-commit": "rhel-edge-commit", "test_type": "test_type", // used only in json_test.go "test_type_invalid": "test_type_invalid", // used only in json_test.go }