# imgutil(1) - Work with confluent OS cloning and diskless images

## SYNOPSIS

`imgutil` `build` \[\]   
`imgutil` `exec` \[\]  \[...\]  
`imgutil` `unpack`    
`imgutil` `pack` \[\]    
`imgutil` `capture`

## DESCRIPTION

**imgutil** is a utility for creating, managing, and deploying OS images for diskless boot and system cloning in a Confluent environment. It supports building images from scratch, capturing images from running systems, and packing/unpacking diskless profiles.

## COMMANDS

- `build`: Build a new diskless image from scratch in the specified scratch directory.
- `exec`: Start the specified scratch directory as a container and optionally run a command inside it.
- `unpack`: Unpack a diskless image profile to a scratch directory for modification.
- `pack`: Pack a scratch directory into a diskless profile that can be deployed. If the image enables SELinux in `/etc/selinux/config`, the scratch directory is first labeled with the policy of the image. If labeling fails, pack fails.
- `capture`: Capture an image for cloning from a running system.

## BUILD OPTIONS

- `-r`, `--addrepos` : Repositories to add in addition to the main source. May be specified multiple times.
- `-p`, `--packagelist` : Filename of package list to replace default pkglist.
- `-a`, `--addpackagelist` : A list of additional packages to include. May be specified multiple times.
- `-s`, `--source` : Directory to pull installation from, typically a subdirectory of `/var/lib/confluent/distributions`. By default, the repositories for the build system are used. For Ubuntu, this is not supported; the build system repositories are always used.
- `--arch` : Target architecture to build for (`x86_64` or `aarch64`). For Ubuntu, the Debian-style names `amd64` and `arm64` are accepted as aliases. Building for a foreign architecture is supported on EL and Ubuntu build hosts and requires a statically linked qemu-user emulator registered in binfmt\_misc with the F (fix-binary) flag; on Ubuntu this is provided by the qemu-user-static package (qemu-user-binfmt as of Ubuntu 26.04). For EL, the architecture is also detected automatically when building from a `-s` source tree.
- `-y`, `--non-interactive`: Avoid prompting for confirmation.
- `--selinux`: Install the targeted SELinux policy and leave SELinux enforcing in the image instead of disabling it. EL8 and newer only. Labels come from the policy of the image. If labeling fails, for example because the build host enforces an older policy, the build fails.
- `-v`, `--volume` : Directory to make available in the build environment. `-v /` will cause it to be mounted in image as `/run/external/`. `-v /:/run/root` will override the target to be `/run/root`. Something like `/var/lib/repository:-` will cause it to mount to the identical path inside the image. May be specified multiple times.
- : Directory to build new diskless root in.

## EXEC OPTIONS

- `-v`, `--volume` : Directory to make available in the build environment. `-v /` will cause it to be mounted in image as `/run/external/`. `-v /:/run/root` will override the target to be `/run/root`. May be specified multiple times.
- : Directory of an unpacked diskless root.
- : Optional command to run (defaults to a shell).

## UNPACK OPTIONS

- : The diskless OS profile to unpack.
- : Directory to extract diskless root to.

## PACK OPTIONS

- `-b`, `--baseprofile` : Profile to copy extra info from. For example, to make a new version of an existing profile, reference the previous one as baseprofile.
- `-u`, `--unencrypted`: Pack an unencrypted image rather than encrypting.
- : Directory containing diskless root.
- : The desired diskless OS profile name to pack the root into.

## CAPTURE OPTIONS

- : Node to capture image from.
- : Profile name for captured image.

## EXAMPLES

Build a diskless image from a distribution:

```
imgutil build -s  alma-9.6-x86_64 /tmp/myimage
```

Build an aarch64 EL diskless image on an x86\_64 host (the architecture is detected from the source tree):

```
imgutil build -s alma-9.6-aarch64 /tmp/myimage
```

Build an aarch64 Ubuntu diskless image on an amd64 Ubuntu host:

```
imgutil build --arch aarch64 /tmp/myimage
```

Execute a shell in an unpacked image:

```
imgutil exec /tmp/myimage
```

Execute a specific command in an image:

```
imgutil exec /tmp/myimage /bin/rpm -qa
```

Unpack an existing profile for modification:

```
imgutil unpack myprofile /tmp/myimage
```

Pack a modified image into a new profile:

```
imgutil pack /tmp/myimage myprofile-v2
```

Capture an image from a running node:

```
imgutil capture node01 production-image
```

## FILES

- `/var/lib/confluent/public/os/`: Default location for OS profiles.
- `/var/lib/confluent/private/os/`: Location for encrypted image keys and private data.
- `/var/lib/confluent/distributions/`: Default location for installation sources.

## SEE ALSO

osdeploy(8)

## AUTHOR

Written for the Confluent project.
