1.2. Building the bootc image
Build your Red Hat Enterprise Linux (RHEL) that contains MicroShift as a bootable container image by using a Containerfile.
Image mode for RHEL is Technology Preview. Using a bootc image in production environments is not supported.
Prerequisites
- A Red Hat Enterprise Linux (RHEL) 9.4 host with an active Red Hat subscription for building MicroShift bootc images and running containers.
-
You are logged into the RHEL 9.4 host using the user credentials that have
sudopermissions. -
The
rhocpandfast-datapathrepositories are accessible in the host subscription. The repositories do not necessarily need to be enabled on the host. - You have a remote registry such as {quay} for storing and accessing bootc images.
Procedure
Create a Containerfile that includes the following instructions:
Example Containerfile for RHEL image mode
FROM registry.redhat.io/rhel9/rhel-bootc:9.4 ARG USHIFT_VER=4.17 RUN dnf config-manager \ --set-enabled rhocp-${USHIFT_VER}-for-rhel-9-$(uname -m)-rpms \ --set-enabled fast-datapath-for-rhel-9-$(uname -m)-rpms RUN dnf install -y firewalld microshift && \ systemctl enable microshift && \ dnf clean all # Create a default 'redhat' user with the specified password. # Add it to the 'wheel' group to allow for running sudo commands. ARG USER_PASSWD RUN if [ -z "${USER_PASSWD}" ] ; then \ echo USER_PASSWD is a mandatory build argument && exit 1 ; \ fi RUN useradd -m -d /var/home/redhat -G wheel redhat && \ echo "redhat:${USER_PASSWD}" | chpasswd # Mandatory firewall configuration RUN firewall-offline-cmd --zone=public --add-port=22/tcp && \ firewall-offline-cmd --zone=trusted --add-source=10.42.0.0/16 && \ firewall-offline-cmd --zone=trusted --add-source=169.254.169.1 # Create a systemd unit to recursively make the root filesystem subtree # shared as required by OVN images RUN cat > /etc/systemd/system/microshift-make-rshared.service <<'EOF' [Unit] Description=Make root filesystem shared Before=microshift.service ConditionVirtualization=container [Service] Type=oneshot ExecStart=/usr/bin/mount --make-rshared / [Install] WantedBy=multi-user.target EOF RUN systemctl enable microshift-make-rshared.service重要Podman uses the host subscription information and repositories inside the container when building the container image. If the
rhocpandfast-datapathrepositories are not available on the host, the build fails.Create a local bootc image by running the following image build command:
PULL_SECRET=~/.pull-secret.json USER_PASSWD=<your_redhat_user_password>1 IMAGE_NAME=microshift-4.17-bootc $ sudo podman build --authfile "${PULL_SECRET}" -t "${IMAGE_NAME}" \ --build-arg USER_PASSWD="${USER_PASSWD}" \ -f Containerfile- 1
- Replace <your_redhat_user_password> with your password.
注記How secrets are used during the image build:
-
The podman
--authfileargument is required to pull the baserhel-bootc:9.4image from theregistry.redhat.ioregistry. -
The build
USER_PASSWDargument is used to set a password for theredhatuser.
Verification
Verify that the local bootc image was created by running the following command:
$ sudo podman images "${IMAGE_NAME}"Example output
REPOSITORY TAG IMAGE ID CREATED SIZE localhost/microshift-4.17-bootc latest 193425283c00 2 minutes ago 2.31 GB