Skip to content
Merged
Show file tree
Hide file tree
Changes from 24 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
7fe1686
Adding RHEL provider
yockgen Jan 28, 2026
ca0e52a
Fixing RHEL GPG key error
yockgen Jan 28, 2026
b0d7ca5
Renaming RHEL into RedHat-Compatible-Linux
yockgen Jan 29, 2026
9884528
Adding unit test for RedHat-Compatible-Linux provider
yockgen Jan 29, 2026
6674bd9
Merge branch 'main' into rhel-enabling
yockgen Feb 4, 2026
261e5e9
Making RCD compatible with ARM support
yockgen Feb 4, 2026
b0e4f88
Adding rpm OSes metadata saving and rpm package resolver to handle c…
yockgen Feb 4, 2026
aa56dd5
Merge branch 'main' into rhel-enabling
yockgen Feb 4, 2026
5a28d4f
Fixing verification error and disabled rpm optional package hard error
yockgen Feb 5, 2026
a52ebc4
Fixing chroot gpg key error issue for RCD
yockgen Feb 6, 2026
d391e27
Enabling dnf in chroot env for rpm OSes
yockgen Feb 6, 2026
332d252
Merge branch 'main' into rhel-enabling
yockgen Feb 8, 2026
e7d7326
changing RCD to use grub by default
yockgen Feb 9, 2026
f99c35f
Merge branch 'EMT_PTL' into rhel-enabling
yockgen Feb 10, 2026
8cf276f
Using Intel Kernel 6.12 for RCD for workaround of default kernel not …
yockgen Feb 10, 2026
f5c86f2
Moving intel kernel to default template
yockgen Feb 11, 2026
065ac76
Patched multi repos merging capability
yockgen Feb 11, 2026
ece3942
Fixing default kernel not installable issue
yockgen Feb 11, 2026
c9c0669
Merge branch 'main' into rhel-enabling
adimoft Feb 12, 2026
a6e18ca
Code cleanup for RCD
yockgen Feb 13, 2026
62c8a3b
Fixing unit test failed for config_test
yockgen Feb 13, 2026
7a2897f
Merge branch 'main' into rhel-enabling
yockgen Feb 13, 2026
37d7ef8
change naming of whitelist
samueltaripin Feb 11, 2026
98a6d6b
update rc2 for ubuntu ptl
samueltaripin Feb 11, 2026
d08fdd6
rename emt ptl
samueltaripin Feb 12, 2026
6ba5daa
ptl update
samueltaripin Feb 13, 2026
a8bfe59
Updated RCD dlstreamer template to allow white list
yockgen Feb 13, 2026
9cf5a3e
Merge branch 'main' into rhel-enabling
yockgen Feb 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions cmd/os-image-composer/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"github.com/open-edge-platform/os-image-composer/internal/provider/azl"
"github.com/open-edge-platform/os-image-composer/internal/provider/elxr"
"github.com/open-edge-platform/os-image-composer/internal/provider/emt"
"github.com/open-edge-platform/os-image-composer/internal/provider/rcd"
"github.com/open-edge-platform/os-image-composer/internal/provider/ubuntu"
"github.com/open-edge-platform/os-image-composer/internal/utils/logger"
"github.com/open-edge-platform/os-image-composer/internal/utils/system"
Expand Down Expand Up @@ -153,6 +154,10 @@ func InitProvider(os, dist, arch string) (provider.Provider, error) {
if err := ubuntu.Register(os, dist, arch); err != nil {
return nil, fmt.Errorf("registering ubuntu provider failed: %v", err)
}
case rcd.OsName:
if err := rcd.Register(os, dist, arch); err != nil {
return nil, fmt.Errorf("registering rcd provider failed: %v", err)
}
default:
return nil, fmt.Errorf("unsupported provider: %s", os)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
packages:
- createrepo_c
- centos-gpg-keys # Provides GPG keys for package verification
- centos-stream-release # Provides repo files and release info
- bash # The shell
- coreutils-single # Minimal version of basic tools (ls, cp, mv)
- glibc-minimal-langpack # Core libraries without extra languages
- dnf # Package manager (or 'microdnf' for even smaller)
- rpm # Package database tools
- findutils # Basic search tools (often needed by scripts)
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
packages:
- createrepo_c
- centos-gpg-keys # Provides GPG keys for package verification
- centos-stream-release # Provides repo files and release info
- bash # The shell
- coreutils-single # Minimal version of basic tools (ls, cp, mv)
- glibc-minimal-langpack # Core libraries without extra languages
- dnf # Package manager (or 'microdnf' for even smaller)
- rpm # Package database tools
- findutils # Basic search tools (often needed by scripts)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[cache-repo]
name=Local Cache Repo
baseurl=file:///cdrom/cache-repo
enabled=1
gpgcheck=0
skip_if_unavailable=1
sslverify=0
16 changes: 16 additions & 0 deletions config/osv/redhat-compatible-distro/el10/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# RHEL 10 OS Configuration
# This file defines architecture-specific build configurations

x86_64:
dist: rcd10 # Distribution identifier
arch: x86_64 # Target architecture
pkgType: rpm # Package management system
chrootenvConfigFile: chrootenvconfigs/chrootenv_x86_64.yml # Path to chrootenv config
releaseVersion: "10.0" # Distribution release version

aarch64:
dist: rcd10 # Distribution identifier
arch: aarch64 # Target architecture
pkgType: rpm # Package management system
chrootenvConfigFile: chrootenvconfigs/chrootenv_aarch64.yml # Path to chrootenv config
releaseVersion: "10.0" # Distribution release version
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[Match]
Name=e*

[Network]
DHCP=yes
IPv6AcceptRA=no

[DHCPv4]
SendRelease=false
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[Service]
ExecStart=
ExecStart=-/sbin/agetty --noclear --autologin root --keep-baud %I $TERM

# Default to tty1 but allow other choices
[Install]
Alias=getty.target.wants/getty@tty1.service
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[Service]
ExecStart=
ExecStart=-/sbin/agetty --noclear --autologin root --keep-baud %I $TERM

# Default to ttyS0 but allow other choices
[Install]
Alias=getty.target.wants/serial-getty@ttyS0.service
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
image:
name: rcd10-default-x86_64
version: "1.0.0"

target:
os: redhat-compatible-distro # Target OS name
dist: el10 # Target OS distribution
arch: x86_64 # Target OS architecture
imageType: img # Image type, valid value: [raw, iso, img].

systemConfig:
name: Default_Initrd
description: Default yml configuration for initrd image

bootloader:
bootType: efi # (efi or legacy)
provider: grub # (grub for efi and legacy mode, or systemd-boot for efi mode)

packages:
- core-packages-base-image
- dosfstools
- efibootmgr
- grub2-efi
- grub2-efi-binary
- grub2-pc
- ca-certificates
- cronie-anacron
- logrotate
- shadow-utils
- util-linux

additionalFiles:
- local: ../additionalfiles/99-dhcp-en.network
final: /etc/systemd/network/99-dhcp-en.network
- local: ../additionalfiles/getty@.service
final: /usr/lib/systemd/system/getty@.service
- local: ../additionalfiles/serial-getty@.service
final: /usr/lib/systemd/system/serial-getty@.service
- local: ../../../../../general/isolinux/attendedinstaller
final: /root/attendedinstaller
- local: ../../../../../../build/live-installer
final: /usr/bin/live-installer

users:
- name: root
startupScript: "/root/attendedinstaller"

kernel:
name: kernel
cmdline: "console=ttyS0,115200 console=tty0 loglevel=7"
packages:
- kernel
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
image:
name: rcd10-default-x86_64
version: "1.0.0"

target:
os: redhat-compatible-distro # Target OS name
dist: el10 # Target OS distribution
arch: x86_64 # Target OS architecture
imageType: iso # Image type, valid value: [raw, iso].

disk:
name: Default_ISO
partitionTableType: gpt # Partition table type, valid value: [gpt, mbr]
partitions: # Required for raw, optional for ISO, not needed for rootfs.
- id: boot
type: esp
flags:
- esp
- boot
start: 1MiB
end: 513MiB
fsType: fat32
mountPoint: /boot/efi

- id: rootfs
type: linux-root-amd64
start: 513MiB
end: "0" # 0 means use the rest of the disk space
fsType: ext4
mountPoint: /

systemConfig: # Required
name: Default_ISO
description: Default yml configuration for iso image

initramfs:
template: default-initrd-x86_64.yml

bootloader:
bootType: efi # (efi or legacy)
provider: grub # (grub for efi and legacy mode, or systemd-boot for efi mode)

packages:
# grub2-mkconfig
- grub2

# developer-packages
- build-essential
- cmake
- createrepo_c
- curl-devel
- device-mapper
- flex
- fuse-devel
- git
- golang
- iputils
- less
- linux-firmware
- net-tools
- ninja-build
- parted
- pciutils
- python3-pip
- tar
- texinfo
- usbutils

# virtualization-host-packages
- qemu-kvm
- qemu-img

# core-packages-image
- shim
- grub2-efi-binary
- ca-certificates
- cronie-anacron
- logrotate
- core-packages-base-image
- dracut-hostonly
- dracut-vrf
- initramfs
- shadow-utils

# core-tools-packages
- dnf
- vim
- wget

# hyperv packages
- dracut-hyperv
- hyperv-daemons

# ssh-server
- openssh-server

# selinux-full
- selinux-policy
- selinux-policy-devel
- policycoreutils-python-utils
- checkpolicy
- secilc
- setools-console

# drtm
- tboot
- tpm2-tools
- tpm2-tss

# virt-guest-packages
- dracut-virtio
- dracut-xen

additionalFiles:
- local: ../additionalfiles/99-dhcp-en.network
final: /etc/systemd/network/99-dhcp-en.network

kernel:
name: kernel
cmdline: "console=ttyS0,115200 console=tty0 loglevel=7"
packages:
- kernel
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
image:
name: rcd10-default-aarch64
version: "1.0.0"

target:
os: redhat-compatible-distro # Target OS name
dist: el10 # Target OS distribution
arch: aarch64 # Target OS architecture
imageType: raw # Image type, valid value: [raw, iso].

disk:
name: Default_Raw # 1:1 mapping to the systemConfigs name
artifacts:
-
type: raw # image file format
compression: gz # image compression format (optional)
size: 4GiB # 4G, 4GB, 4096 MiB also valid. (Required for raw)
partitionTableType: gpt # Partition table type, valid value: [gpt, mbr]
partitions: # Required for raw, optional for ISO, not needed for rootfs.
- id: boot
type: esp
flags:
- esp
- boot
start: 1MiB
end: 513MiB
fsType: fat32
mountPoint: /boot/efi
mountOptions: umask=0077

- id: rootfs
type: linux-root-amd64
start: 513MiB
end: 2561MiB # 513MiB + 2GiB (2048MiB) = 2561MiB
fsType: ext4
mountPoint: /
mountOptions: defaults, ro

- id: roothashmap
type: linux
start: 2561MiB
end: 3061MiB # 2561MiB + 500MiB = 3061MiB
fsType: ext4
mountPoint: none

- id: userdata
type: linux
start: 3061MiB
end: "0" # 2561MiB + 2GiB (2048MiB) = 4609MiB
fsType: ext4
mountPoint: /opt

systemConfig:
name: Default_Raw
description: Default yml configuration for raw image

bootloader:
bootType: efi # (efi or legacy)
provider: systemd-boot # (grub for efi and legacy mode, or systemd-boot for efi mode)

immutability:
enabled: true # default is true

packages:
# --- MINIMUM BOOTABLE BASE ---
- basesystem # The skeleton of the OS structure
- filesystem # Provides the basic directory layout (/, /etc, /usr, etc.)
- setup # Contains fundamental system configuration files (like /etc/passwd)
- glibc # The core C library for almost all binaries
- bash # The shell required for init scripts
- coreutils # Basic commands (ls, cp, mkdir) required during boot
- systemd # The init system (PID 1)
- util-linux # Required for mounting filesystems (mount, fdisk)
- kernel # The Linux kernel itself
- kernel-core # Essential kernel modules for hardware/filesystem support
- dracut # Used to generate the initramfs to find the root disk
- dnf # Even a minimum build needs a way to install more packages

# --- BOOTLOADER (For UEFI/UKI) ---
- grub2-common # The EFI boot manager
- shim-x64 # Necessary for UEFI handover

# --- MINIMUM CONFIGURATION ---
- hostname # To identify the system
- shadow-utils # To manage users/root password
- iproute # Minimum networking tool to bring up an interface
- ncurses # Required for terminal display

additionalFiles:
- local: ../additionalfiles/99-dhcp-en.network
final: /etc/systemd/network/99-dhcp-en.network

kernel:
name: kernel
cmdline: "console=ttyS0,115200 console=tty0 loglevel=7"
enableExtraModules: "usbcore usb-common"
packages:
- kernel
uki: true
Loading
Loading