rpm-ostree/doc/compose-server.md
2014-10-31 14:39:57 -04:00

3.2 KiB

Installing and setting up a repository

First, unfortunately you must disable SELinux on the build host in order to support SELinux on the built system. See: https://bugzilla.redhat.com/show_bug.cgi?id=1060423

Once you have that done, choose a build directory. Here we'll use /srv/rpm-ostree.

# cd /srv/rpm-ostree
# mkdir repo
# ostree --repo=repo init --mode=archive-z2

Running rpm-ostree compose tree

This program takes as input a manifest file that describes the target system, and commits the result to an OSTree repository.

See also: https://github.com/projectatomic/rpm-ostree-toolbox

The input format is a JSON "treefile". See examples in doc/treefile-examples, as well as doc/treefile.md.

# rpm-ostree compose tree --repo=/srv/rpm-ostree/repo --proxy=http://127.0.0.1:8123 sometreefile.json

All this does is use yum to download RPMs from the referenced repos, and commit the result to the OSTree repository, using the ref named by ref. Note that we've specified a local caching proxy (polipo in this case) - otherwise we you will download the packages for each treecompose.

You can export /srv/rpm-ostree/repo via any static webserver.

The use of --proxy is not mandatory but strongly recommended - with this option you can avoid continually redownloading the packages every compose. I personally use Polipo, but you can of course any HTTP proxy you wish.

Treefile key documentation

  • ref: string, mandatory: Holds a string which will be the name of the branch for the content.

  • gpg_key string, optional: Key ID for GPG signing; the secret key must be in the home directory of the building user. Defaults to none.

  • repos array of strings, mandatory: Names of yum repositories to use, from the system /etc/yum.repos.d.

  • selinux: boolean, optional: Defaults to true. If false, then no SELinux labeling will be performed on the server side.

  • boot_location: string, optional: Historically, ostree put bootloader data in /boot. However, this has a few flaws; it gets shadowed at boot time, and also makes dealing with Anaconda installation harder. There are 3 possible values:

    • "legacy": the default, data goes in /boot
    • "both": Kernel data in /boot and /usr/lib/ostree-boot
    • "new": Kernel data in /usr/lib/ostree-boot
  • bootstrap_packages: Array of strings, mandatory: The glibc and nss-altfiles packages (and ideally nothing else) must be in this set; rpm-ostree will modify the /etc/nsswitch.conf in the target root to ensure that /usr/lib/passwd is used.

  • packages: Array of strings, mandatory: Set of installed packages. Names prefixed with an @ (e.g. @core) are taken to be the names of comps groups.

  • units: Array of strings, optional: Systemd units to enable by default

  • default_target: String, optional: Set the default systemd target

  • include: string, optional: Path to another treefile which will be used as an inheritance base. The semantics for inheritance are: Non-array values in child values override parent values. Array values are concatenated. Filenames will be resolved relative to the including treefile.