The purpose of this document is to describe systems and services used for generic Modularity development, research and possibly future infrastructure deployments, and is intended as a reference guide for the involved engineers and the so-called doers-of-things.
If you’re new to Modularity, start with the following instead:
We use a number of systems for Modularity work. Some of those are dedicated installations for our cause, some are generic and shared with other Fedora initiatives. This section focuses on the former.
The main and currently the only dedicated system we have.
This is an OpenStack instance running Fedora. In case the
dev.fed-mod.org domain name no longer works, the IPv4 address is
126.96.36.199. We use a shared user account named
you need access, contact any of the current engineers and provide them
with your public SSH key.
We run automatic COPR
of certain modularity projects (fm, modulemd and modulemd-resolver) with
a cron job every 15 minutes. Edit
~fedora/rebuild_packages.sh to add
We also run automatic readthedocs.org documentation builds every 15 minutes for fm and modulemd with simple cron jobs.
The metadata-service is deployed on this system and handles all
^/fm/(.+) HTTP requests. This API isn’t really defined yet. Browse
the project’s sources to see how it works.
Our Taiga status reports are also hosted on this sytem and regenerated every 15 minutes, again, with a cron job.
Other agile tools such as the Modularity Bot or sprint-tools for
Trello/Taiga synchronization are also hosted here. See
~fedora/sprint_tools and the
various related cron jobs.
The host is running a generic httpd webserver. The configuration is kept
/etc/httpd/conf.d/fm.conf and we use the default web root for our
/var/www/html. For example, the experimental modules
repository is hosted there.
Feel free to use this for whatever you need. However, keep in mind the available disk space on this machine is fairly limited.
The high-level purpose of the majority of the services listed below is described in the Modularity/Infra document.
Module input data consists of two main parts — the module definition file in the modulemd format and the components, such as RPMs (coincidentally the only format we currently support but expect that to change at some point in the future). In Fedora, both the modulemd files and the components’ SPEC files are stored in dist-git and the associated ACLs are stored in pkgdb (Package Database).
We use namespaces to distinguish between modules and RPMs in those two
systems, aptly named
For development and testing purposes we use the staging dist-git
instance which supports the
above mentioned namespaces. The recommended way to interact with
dist-git is using the
fedpkg tool and configuring it to interact
with this instance.
Once you have installed fedpkg, edit
fedpkg.conf is located) to change all occurrences of
Here is an example:
Install pag via
$ sudo dnf install -y pag. Once you have done this,
download and set up the custom rpkg repo:
$ cd /tmp $ pag clone karsten/rpkg $ cd rpkg/src
Next, set fpkg to point to stg/rida. To do this, add
/tmp/rpkg and input the following content:
[fedpkg] lookaside = http://pkgs.stg.fedoraproject.org/repo/pkgs lookasidehash = md5 lookaside_cgi = https://pkgs.stg.fedoraproject.org/repo/pkgs/upload.cgi gitbaseurl = ssh://%(user)email@example.com/%(module)s anongiturl = git://pkgs.stg.fedoraproject.org/%(module)s tracbaseurl = https://%(user)s:%(password)firstname.lastname@example.org/rel-eng/login/xmlrpc branchre = f\d$|f\d\d$|el\d$|olpc\d$|master$ kojiconfig = /etc/koji-stage.conf build_client = koji clone_config = bz.default-tracker bugzilla.redhat.com bz.default-product Fedora bz.default-version rawhide bz.default-component %(module)s sendemail.to %(module)email@example.com distgit_namespaced = True ridaurl = https://dev.fed-mod.org:5000/rida
Next, get the sources:
$ fedpkg --config /etc/rpkg/fedpkg-stage.conf co modules/testmodule --anonymous
--anonymous is used in case you are not a packager on stg
$ cd testmodule $ fedpkg --config /etc/rpkg/fedpkg-stage.conf module-build
A staging pkgdb instance is also available, storing the modules’ ACL entries.
Contact people with the admin ACL privileges for the given module for commit access. Contact User:Ralph if you need a new module pkgdb entry & dist-git repository.
We expect to use fedmsg extensively for inter-component communication in all stages of module build, testing and distribution.
However, since we don’t do any of those things yet, there’s not much to say about this. Read the upstream documentation to see what Fedora Messaging is about.
The module builder consists of three main components: the build orchestrator, the koji build system and the pungi compose tool. The basic, overly simplified idea of building modules is:
There are still many open questions regarding this process. We will fine-tune the details on the go.
The orchestrator is a service with a publicly available interface that
the clients can interact with, for example by issuing
fedpkg module-build as a module packager, that orchestrates the
complete build of modules as noted above. Note the orchestrator doesn’t
yet exist and although we don’t have any specific design in mind, we
expect to have something ready in the near future.
The orchestrator will emit fedmsg messages to interact with other infrastructure components. It will work with PDC to both store (via pdc-updater) and retrieve module dependency graphs. It will also require its own database to track module build states. The public interface will not be an XMLRPC.
And the service will most likely be hosted on dev.fed-mod.org.
The module RPM content will be built in koji. The current idea is to use koji tags and targets to represent modules and tag inheritance to define buildroots for RPM components. The orchestrator needs to be able to manage these.
We expect to use the staging koji instance once we have a usable and somewhat stable orchestrator. Until then, and to allow more flexibility when developing against koji, we also have our own Fedora 24-based koji virtual machines you can play with. They’re too large to be shared on dev.fed-mod.org. Contact User:Psabata if you’re interested in getting them.
Once all the components in the module are built, the orchestrator will signal pungi to create deliverables, such as RPM repositories or container images, from the respective koji tags. pungi will also store compose information in PDC (again, via pdc-updater), push the deliverables to mirrors (either directly or via an update system) and interact with various other currently nonexistent RCM tools.
We’re considering putting all or most of this functionality directly into koji.
We would like to store certain practical bits about modules in PDC (Product Definition Center) so that it can be easily viewed and queried by both humans and other infrastructure tools. Specifically, we’re interested in two kinds of information:
The first use case requires a new data type to be created in PDC.
There’s a staging PDC instance available we hope to use later in the development cycle.
We might set up our own instance on dev.fed-mod.org, if necessary.
pdc-updater is a simple, stateless service that responds to fedmsg events and populates the PDC database. It already exists but needs some patching to support the new data type we require.
It is unclear whether a staging pdc-updater is available. We might as well deploy our own on dev.fed-mod.org.
Once built, modules could be composed into products such as Fedora Workstation, Fedora Server or maybe even anything the user defines either for integration QA purposes or building custom-tailored system images for and by the end users. See the Modularity/Infra document for more information about these concepts.
CaaS is not yet properly designed or implemented. Therefore we haven’t thought about deployment either.
The same for the so-called Pixie dust.
Both modules and module composes will need to be held by some unspecified service before they get pushed to the master mirror. This is necessary for two reasons:
This might be implemented by patching the current Fedora update system and/or introducing yet another service/layer. We could use the staging bodhi instance for development. Note we have no staging mirrors or systems capable of serving this kind of content at the moment.
We also use a number of other systems and services.
There’s a @modularity project space on COPR where we build & share our tools such as fm, modulemd or modulemd-resolver. All modularity-wg FAS group members should have permissions to create new projects there. Contact any modularity-wg sponsor or administrator to join the group.
We have a number of Fedora Infra Jenkins jobs set up for the CI of our tooling. Contact User:James if you’d like something added there.
In order to collect our changes and submit them as pull requests, we
have our own forks for some projects which are hosted on GitHub. For
grooming prior to submitting things upstream (e.g. reviewing and merging
pull requests from individual contributors against our forks),
contributors are added to the
team in the
organization. Please ping Nils Philippsen
(github) to get yourself added.