The image builder command-line interface (image-builder) provides a straightforward way to create customized Red Hat Enterprise Linux (RHEL) images. This guide explains how to build an Extended Update Support (EUS) image for Red Hat Enterprise Linux 9.6.
Build a Red Hat Enterprise Linux EUS image
Prerequisites:
- A running instance of Red Hat Enterprise Linux 9.8 or 10.2
- This system is registered via subscription-manager or rhc to receive updates
Define a repository configuration (rhel-9.6.json). To ensure the image-builder uses the RHEL EUS repositories, you need to define them in a JSON file. This example uses a file named repos/rhel-9.6.json. The filename must match the distribution name passed to image builder. It also must live in a directory that we will point the CLI to (repos in this case). Create the file with this content:
{
"x86_64": [
{
"name": "appstream",
"metalink": "",
"baseurl": "https://cdn.redhat.com/content/eus/rhel9/9.6/x86_64/appstream/os/",
"mirrorlist": "",
"gpgkey": "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release",
"check_gpg": true,
"metadata_expire": "",
"rhsm": true
},
{
"name": "baseos",
"metalink": "",
"baseurl": "https://cdn.redhat.com/content/eus/rhel9/9.6/x86_64/baseos/os/",
"mirrorlist": "",
"gpgkey": "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release",
"check_gpg": true,
"metadata_expire": "",
"rhsm": true
}
]
}The image blueprint file (blueprint.toml) defines the image customizations. The key to the EUS image is configuring a systemd service to register the system and enable the EUS repositories after the initial boot since the image-builder uses the base repositories during the build.
Create your blueprint.toml file with the following content:
name = "RHEL EUS 9.6"
description = "Builds a RHEL 9.6 image with EUS enabled"
version = "0.0.1"
[[customizations.user]]
name = "admin"
description = "Administrator account"
password = "$6$cCl5f5tctmPw0n3V$AGP3IuIcBCVzRKEgBuvgoT9kUSX34QRFGErt80GER/Ow3c3kA9MeegNZMGF2DBHRXBM/GpuQtXXfxCiVgwB4F."
groups = ["wheel"]
[[customizations.files]]
path = "/etc/systemd/system/firstboot-single.service"
data = """
[Service]
Type=oneshot
ExecStart=subscription-manager register --org=$ORG_ID --activationkey=$ACTIVATION_KEY
ExecStart=subscription-manager release --set=9.6
ExecStart=subscription-manager repos --disable=* --enable=rhel-9-for-x86_64-appstream-eus-rpms --enable=rhel-9-for-x86_64-baseos-eus-rpms
[Install]
WantedBy=default.target
"""
[customizations.services]
enabled = ["firstboot-single"]This example creates an admin user and a service to manage the RHEL subscription manager and repository setup. For the admin user, you can generate a hashed password using this command:
openssl passwd -6Note that the password for the admin user in this example is set to password.
To register for Red Hat updates, set the $ORG_ID and $ACTIVATION_KEY variables in the previous blueprint.
Install image-builder:
sudo dnf install image-builderNext, build the image. With the repository file and blueprint in place, use the image-builder command-line tool. This command builds a qcow2 image for RHEL 9.6, instructing the tool to use your custom repository directory.
sudo image-builder build qcow2 --distro rhel-9.6 --force-repo-dir ./repos/ --blueprint=blueprint.tomlThis will produce the RHEL 9.6 EUS-enabled image.
Launch the image. The resulting image file will be located at:
./rhel-9.6-qcow2-x86_64/rhel-9.6-qcow2-x86_64.qcow2 Ensure your user owns it:
chown $USER ./rhel-9.6-qcow2-x86_64/rhel-9.6-qcow2-x86_64.qcow2 Launch it with the following:
virt-install \
--name rhel-96-eus \
--ram 4096 \
--vcpus 2 \
--os-variant rhel9.6 \
--disk path=./rhel-9.6-qcow2-x86_64/rhel-9.6-qcow2-x86_64.qcow2,format=qcow2 \
--network default \
--import \
--graphics vnc,listen=0.0.0.0 \
--wait 0Learn more
Explore more image building further. Dive into the options available in a blueprint. See all the image types you can build via image-builder list.