# Image Builder

Builds Fedora/RHEL/Centos images like Packer but for Red Hat.

<https://osbuild.org/docs/user-guide/blueprint-reference/>

Default credentials for included images is:

username: `ducoterra`

password: `osbuild`

## Warning

From the [Red Hat
Documentation](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html-single/composing_installing_and_managing_rhel_for_edge_images/index):

> You cannot build an operating system image that differs from the RHEL image
> builder host. For example, you cannot use a RHEL system to build Fedora or
> CentOS images.

## Installing

```bash
# Install the packages
dnf install -y osbuild-composer composer-cli

# Start/enable the service
systemctl enable --now osbuild-composer.socket

# Optional: add your user to the weldr group
sudo usermod -aG weldr $USER

# Optional: cockpit dependency
dnf install -y cockpit-composer

# Optional: allow security profiles
dnf install openscap-scanner scap-security-guide
```

## Building Images

1. Create a toml file describing your image

    See `fedora42-base.toml` for an example.

2. Push the toml to composer

    ```bash
    composer-cli blueprints push active/software_osbuild/fedora42-base.toml
    
    # List blueprints
    composer-cli blueprints list
    ```

3. Generate the image

    ```bash
    # List image types
    composer-cli compose types

    # Build the image
    composer-cli compose start fedora42-base qcow2

    # Check status
    watch composer-cli compose status

    # Download logs if error
    cd /tmp && composer-cli compose logs 52963ac9-b680-4def-baaf-252845f0e3fe

    # Delete failed images
    composer-cli compose list failed -j | jq '.[].body.failed.[]?.id' | xargs -I '%' composer-cli compose delete '%'

    # Delete successful images
    composer-cli compose list finished -j | jq '.[].body.finished.[]?.id' | xargs -I '%' composer-cli compose delete '%'
    ```

4. Run the image

    ```bash
    # List your images
    composer-cli compose list finished

    # Download the image
    composer-cli compose image --filename active/software_osbuild/secrets/fedora43-base.qcow2 image-uuid

    # Test with qemu
    virt-install \
    --name "fedora43-base" \
    --boot uefi,firmware.feature0.name=secure-boot,firmware.feature0.enabled=no \
    --cpu host-passthrough --vcpus sockets=1,cores=8,threads=2 \
    --ram=8192 \
    --os-variant=fedora41 \
    --network bridge:virbr0 \
    --graphics none \
    --console pty,target.type=virtio \
    --import --disk "path=active/software_osbuild/secrets/fedora43-base.qcow2,bus=virtio"
    ```

### Image Build and Watch One Liner

```bash
composer-cli blueprints push active/software_osbuild/fedora43-base.toml && \
composer-cli compose start fedora43-base qcow2 && \
watch composer-cli compose status
```