Ce contenu n'est pas disponible dans la langue sélectionnée.
Chapter 3. Creating bootc compatible base disk images with bootc-image-builder
The bootc-image-builder
, available as a Technology Preview, is a containerized tool to create disk images from bootable container images. You can use the images that you build to deploy disk images in different environments, such as the edge, server, and clouds.
Red Hat provides the bootc-image-builder
tool as a Technology Preview. Technology Preview features provide early access to upcoming product innovations, enabling customers to test functionality and provide feedback during the development process. However, these features are not fully supported. Documentation for a Technology Preview feature might be incomplete or include only basic installation and configuration information. See Technology Preview Features Support Scope on the Red Hat Customer Portal for information about the support scope for Technology Preview features.
3.1. Introducing image mode for RHEL for bootc-image-builder
With the bootc-image-builder
tool, you can convert bootable container images into disk images for a variety of different platforms and formats. Converting bootable container images into disk images is equivalent to installing a bootable container. After you deploy these disk images to the target environment, you can update them directly from the container registry.
Building base disk images which come from private registries by using bootc-image-builder
is not supported in this release.
The bootc-image-builder tool
supports generating the following image types:
- Disk image formats, such as ISO, suitable for disconnected installations.
Virtual disk images formats, such as:
- QEMU copy-on-write (QCOW2)
- Amazon Machine Image (AMI)/ — Raw
- Virtual Machine Image (VMI)
Deploying from a container image is beneficial when you run VMs or servers because you can achieve the same installation result. That consistency extends across multiple different image types and platforms when you build them from the same container image. Consequently, you can minimize the effort in maintaining operating system images across platforms. You can also update systems that you deploy from these disk images by using the bootc
tool, instead of re-creating and uploading new disk images with bootc-image-builder
.
Generic base container images do not include any default passwords or SSH keys. Also, the disk images that you create by using the bootc-image-builder
tool do not contain the tools that are available in common disk images, such as cloud-init
. These disk images are transformed container images only.
Although you can deploy a rhel-9-bootc
image directly, you can also create your own customized images that are derived from this bootable base image. The bootc-image-builder
tool takes the rhel-9-bootc
OCI container image as an input.
Additional resources
3.2. Installing bootc-image-builder
The bootc-image-builder
is intended to be used as a container and it is not available as an RPM package in RHEL. To access it, follow the procedure.
Prerequisites
-
The
container-tools
meta-package is installed. The meta-package contains all container tools, such as Podman, Buildah, and Skopeo. -
You are authenticated to
registry.redhat.io
. For details, see Red Hat Container Registry Authentication.
Procedure
Login to authenticate to
registry.redhat.io
:$ sudo podman login registry.redhat.io
Install the
bootc-image-builder
tool:$ sudo podman pull registry.redhat.io/rhel9/bootc-image-builder
Verification
List all images pulled to your local system:
$ sudo podman images REPOSITORY TAG IMAGE ID CREATED SIZE registry.redhat.io/rhel9/bootc-image-builder latest b361f3e845ea 24 hours ago 676 MB
Additional resources
3.3. Creating QCOW2 images by using bootc-image-builder
Build a RHEL bootable container image into a QEMU Disk Images (QCOW2) image for the architecture that you are running the commands on.
The RHEL base image does not include a default user. Optionally, you can inject a user configuration with the --config
option to run the bootc-image-builder container. Alternatively, you can configure the base image with cloud-init
to inject users and SSH keys on first boot. See Injecting users and SSH keys by using cloud-init.
Prerequisites
- You have Podman installed on your host machine.
-
You have
virt-install
installed on your host machine. -
You have root access to run the
bootc-image-builder
tool, and run the containers in--privileged
mode, to build the images.
Procedure
Optional: Create a
config.toml
to configure user access, for example:[[blueprint.customizations.user]] name = "user" password = "pass" key = "ssh-rsa AAA ... user@email.com" groups = ["wheel"]
Run
bootc-image-builder
. Optionally, if you want to use user access configuration, pass theconfig.toml
as an argument.NoteIf you do not have the container storage mount and
--local
image options, your image must be public.The following is an example of creating a public QCOW2 image:
$ sudo podman run \ --rm \ -it \ --privileged \ --pull=newer \ --security-opt label=type:unconfined_t \ -v ./config.toml:/config.toml \ -v ./output:/output \ -v /var/lib/containers/storage:/var/lib/containers/storage \ registry.redhat.io/rhel9/bootc-image-builder:latest \ --type qcow2 \ --config config.toml \ quay.io/<namespace>/<image>:<tag>
The following is an example of creating a private QCOW2 image:
$ sudo podman run \ --rm \ -it \ --privileged \ --pull=newer \ --security-opt label=type:unconfined_t \ -v ./config.toml:/config.toml \ -v ./output:/output \ registry.redhat.io/rhel9/bootc-image-builder:latest \ --type qcow2 \ --config config.toml \ quay.io/<namespace>/<image>:<tag>
You can find the
.qcow2
image in the output folder.
Next steps
- You can deploy your image. See Deploying a container image using KVM with a QCOW2 disk image.
- You can make updates to the image and push the changes to a registry. See Managing RHEL bootable images.
3.4. Creating AMI images by using bootc-image-builder and uploading it to AWS
Create an Amazon Machine Image (AMI) from a bootable container image and use it to launch an Amazon Web Service EC2 (Amazon Elastic Compute Cloud) instance.
Prerequisites
- You have Podman installed on your host machine.
-
You have an existing
AWS S3
bucket within your AWS account. -
You have root access to run the
bootc-image-builder
tool, and run the containers in--privileged
mode, to build the images. -
You have the
vmimport
service role configured on your account to import an AMI into your AWS account.
Procedure
Create a disk image from the bootable container image.
- Configure the user details in the Containerfile. Make sure that you assign it with sudo access.
- Build a customized operating system image with the configured user from the Containerfile. It creates a default user with passwordless sudo access.
Optional: Configure the machine image with
cloud-init
. See Injecting users and SSH keys by using cloud-init. The following is an example:FROM registry.redhat.io/rhel9/rhel-bootc:9.4 RUN dnf -y install cloud-init && \ ln -s ../cloud-init.target /usr/lib/systemd/system/default.target.wants && \ rm -rf /var/{cache,log} /var/lib/{dnf,rhsm}
NoteYou can also use
cloud-init
to add users and additional configuration by using instance metadata.Build the bootable container image. For example, to deploy the image to an
x86_64
AWS machine, use the following commands:$ podman build -t quay.io/<namespace>/<image>:<tag> . $ podman push quay.io/<namespace>/<image>:<tag> .
Use the
bootc-image-builder
tool to create an AMI from the bootc container image.$ sudo podman run \ --rm \ -it \ --privileged \ --pull=newer \ -v $HOME/.aws:/root/.aws:ro \ --env AWS_PROFILE=default \ registry.redhat.io/rhel9/bootc-image-builder:latest \ --type ami \ --aws-ami-name rhel-bootc-x86 \ --aws-bucket rhel-bootc-bucket \ --aws-region us-east-1 \ quay.io/<namespace>/<image>:<tag>
NoteThe following flags must be specified all together. If you do not specify any flag, the AMI is exported to your output directory.
-
--aws-ami-name
- The name of the AMI image in AWS -
--aws-bucket
- The target S3 bucket name for intermediate storage when you are creating the AMI --aws-region
- The target region for AWS uploadsThe
bootc-image-builder
tool builds an AMI image and uploads it to your AWS s3 bucket by using your AWS credentials to push and register an AMI image after building it.
-
Next steps
- You can deploy your image. See Deploying a container image to AWS with an AMI disk image.
- You can make updates to the image and push the changes to a registry. See Managing RHEL bootable images.
Additional resources
3.5. Creating Raw disk images by using bootc-image-builder
You can convert a bootable container image to a Raw image with an MBR or GPT partition table by using bootc-image-builder
. The RHEL base image does not include a default user, so optionally, you can inject a user configuration with the --config
option to run the bootc-image-builder
container. Alternatively, you can configure the base image with cloud-init
to inject users and SSH keys on first boot. See Injecting users and SSH keys by using cloud-init.
Prerequisites
- You have Podman installed on your host machine.
-
You have root access to run the
bootc-image-builder
tool, and run the containers in--privileged
mode, to build the images. - You have pulled your target container image in the container storage.
Procedure
Optional: Create a
config.toml
to configure user access, for example:[[blueprint.customizations.user]] name = "user" password = "pass" key = "ssh-rsa AAA ... user@email.com" groups = ["wheel"]
Run
bootc-image-builder
. If you want to use user access configuration, pass theconfig.toml
as an argument:$ sudo podman run \ --rm \ -it \ --privileged \ --pull=newer \ --security-opt label=type:unconfined_t \ -v /var/lib/containers/storage:/var/lib/containers/storage \ -v ./config.toml:/config.toml \ -v ./output:/output \ registry.redhat.io/rhel9/bootc-image-builder:latest \ --local \ --type raw \ --config config.toml \ quay.io/<namespace>/<image>:<tag>
You can find the
.raw
image in the output folder.
Next steps
- You can deploy your image. See Deploying a container image by using KVM with a QCOW2 disk image.
- You can make updates to the image and push the changes to a registry. See Managing RHEL bootable images.
3.6. Creating ISO images by using bootc-image-builder
You can use bootc-image-builder
to create an ISO from which you can perform an offline deployment of a bootable container.
Prerequisites
- You have Podman installed on your host machine.
-
You have root access to run the
bootc-image-builder
tool, and run the containers in--privileged
mode, to build the images.
Procedure
Run
bootc-image-builder
:$ sudo podman run \ --rm \ -it \ --privileged \ --pull=newer \ --security-opt label=type:unconfined_t \ -v $(pwd)/config.toml:/config.toml \ -v $(pwd)/output:/output \ registry.redhat.io/rhel9/bootc-image-builder:latest \ --type iso \ --config config.toml \ quay.io/<namespace>/<image>:<tag>
You can find the
.iso
image in the output folder.
Next steps
You can use the ISO image on unattended installation methods, such as USB sticks or Install-on-boot. The installable boot ISO contains a configured Kickstart file. See Deploying a container image by using Anaconda and Kickstart.
WarningBooting the ISO on a machine with an existing operating system or data can be destructive, because the Kickstart is configured to automatically reformat the first disk on the system.
- You can make updates to the image and push the changes to a registry. See Managing RHEL bootable images.
3.7. Verification and troubleshooting
- If you have any issues configuring the requirements for your AWS image, see the following documentation
- For more details on users, groups, SSH keys, and secrets, see