Story #8924

Updated by almost 3 years ago

### Fedora IoT Overview 

 Fedora IoT and Fedora Siliverblue distributions use OSTree repositories to receive updates. Unlike traditional distributions that rely on package managers such `yum` and `dnf` to install updates, Fedora IoT uses OSTree to pull entire disk images from a repository. Each commit in an OSTree repository represents a full disk image for a system. During an update, a machine running Fedora IoT pulls down the latest commit and tries to boot into it. If it can't boot successfully, it will fall back to booting to the previous commit. The commit is made of many small files that the client downloads. Repositories can also provide `static deltas` for two commits. These static deltas allow a client to download a single file that represents a change that can be applied to the current commit on the client in order to produce the new commit. The size of the `static delta` depends on how much change occurred between the two commits.   


 ### Anatomy of an OSTree repository 

 OSTree repositories consist of `refs` and `commits`. Each `commit` can have a parent commit. This relationship between commits creates a history that clients can follow if they need to revert to a previous state. Each `ref` is like a branch in a git repository. Each `ref` has its own set of commits that represent its history. The `commits` can be shared between `refs`.   

 ### Creating OSTree content 

 `osbuild-composer` is a service for building customized operating system images. Instructions for creating a commit are here[0]. The output of `osbuild-composer` can be an archive that contains OSTree commits or a VM disk image with the commits embedded. Disk images can be used to boot a machine initially. Future updates for that machine are best delivered using archives of commits. The archives are expanded and then made available to the system using a web server.  

 ### Pulp's role in managing OSTree repositories 

 Pulp needs to allow users to upload OSTree commit archives into repositories. Pulp needs to serve the uncompressed archives to clients. Each time an archive with commits is uploaded, a new repository version should be created. OSTree repositories need to keep track of `refs` and `commits` as separate content types.  

 Users need to be able to sync an OSTree repository from one Pulp instance to another Pulp instance.  

 Users need to be able to delete OSTree repository version. 

 Users need to be able to copy `refs` and individual `commits` from one repository to another repository.