rpm-ostree/docs/repo_structure.md
Jonathan Lebon 271954a41c app: Add rpm-ostree compose extensions
This adds support for a new `rpm-ostree compose extensions` command`
which takes a treefile, a new extensions YAML file, and an OSTree repo
and ref. It performs a depsolve and downloads the extensions to a
provided output directory.

This is intended to replace cosa's `download-extensions`:
https://github.com/coreos/coreos-assembler/blob/master/src/download-extensions

The input YAML schema matches the one accepted by that script.

Some differences from the script:
- We have a guaranteed depsolve match and thus can avoid silly issues
  we've hit in RHCOS (like downloading the wrong `libprotobuf` for
  `usbguard` -- rhbz#1889694).
- We seamlessly re-use the same repos defined in the treefile, whereas
  the cosa script uses `reposdir=$dir` which doesn't have the same
  semantics (repo enablement is in that case purely based on the
  `enabled` flag in those repos, which may be different than what the
  rpm-ostree compose ran with).
- We perform more sanity-checks against the requested extensions, such
  as whether the extension is already in the base.
- We support no-change detection via a state SHA512 file for better
  integration in cosa and pipelines.
- We support a `match-base-evr` key, which forces the extension to have
  the same EVR as the one from a base package: this is helpful in the
  case of extensions which complement a base package, esp. those which
  may not have strong enough reldeps to enforce matching EVRs by
  depsolve alone (`kernel-headers` is an example of this).
- We don't try to organize the RPMs into separate directories by
  extension because IMO it's not at the right level. Instead, we should
  work towards higher-level metadata to represent extensions (see
  https://github.com/openshift/os/issues/409 which is related to this).

Closes: #2055
2021-01-23 17:12:09 +01:00

72 lines
1.6 KiB
Markdown

---
nav_order: 9
---
# Repository structure
{: .no_toc }
1. TOC
{:toc}
## Rpm-ostree source code
```
.
└─ src
├── app rpm-ostree CLI application
├── daemon rpm-ostree daemon providing D-Bus API
├── lib Public library: contains APIs for exploring rpmdb in OSTrees
└── libpriv Private API shared between app and daemon
```
## Rust Libraries
```
.
└─ rust Contains rust libraries that rpm-ostree uses─
```
## CI
```
.
├── ci Contains scripts to install build dependencies and run tests locally
└── .cci.jenkinsfile Configuration to run CoreOS Jenkins CI
```
## tests
```
.
└── tests Contains tests
```
## Documentation
```
.
├── docs Contains documentation for this repository
├── HACKING.md Contains hacking information for developers
└── man Contains man page for rpm-ostree
```
## Makefiles
These files are used when doing raw build instructions. You can find more info [here](https://github.com/projectatomic/rpm-ostree/blob/master/HACKING.md#raw-build-instructions):
```
.
├── Makefile-daemon.am
├── Makefile-decls.am
├── Makefile-lib-defines.am
├── Makefile-lib.am
├── Makefile-libpriv.am
├── Makefile-libdnf.am
├── Makefile-man.am
├── Makefile-tests.am
├── Makefile.am
├── Makefile-rpm-ostree.am
├── configure.ac
└── autogen.sh
```