Interactive progress with --progress-fd

This is an experimental feature; tracking issue: https://github.com/containers/bootc/issues/1016

While the bootc status tooling allows a client to discover the state of the system, during interactive changes such as bootc upgrade or bootc switch it is possible to monitor the status of downloads or other operations at a fine-grained level with --progress-fd.

The format of data output over --progress-fd is JSON Lines which is a series of JSON objects separated by newlines (the intermediate JSON content is guaranteed not to contain a literal newline).

You can find the JSON schema describing this version here: progress-v0.schema.json.

Deploying a new image with either switch or upgrade consists of three stages: pulling, importing, and staging. The pulling step downloads the image from the registry, offering per-layer and progress in each message. The importing step imports the image into storage and consists of a single step. Finally, staging runs a variety of staging tasks. Currently, they are staging the image to disk, pulling bound images, and removing old images.

Note that new stages or fields may be added at any time.

Importing and staging are affected by disk speed and the total image size. Pulling is affected by network speed and how many layers invalidate between pulls. Therefore, a large image with a good caching strategy will have longer importing and staging times, and a small bespoke container image will have negligible importing and staging times.