uturn is a continuous integration system. While primitive in some ways, it uses advanced features of modern Linux to manage build roots efficiently and cleanly. Build roots are maintained as btrfs subvolumes and projects are built and tested in a btrfs snapshot of a pristine build root. To ensure maximum isolation from the host system, the build roots are activated using systemd-nspawn, which also brings up enough of the system that many tests can run inside the container. The main build script is uturn-builder.sh, which typically runs in a daemon mode, rebuilding projects when a new upstream version is committed. This mode relies of notification over ssh and the git repo must be configured to run the uturn-post-receive hook. If uturn-bot.sh is running, uturn-builder.sh will use it to log the build status to IRC. If a build config file specifies an upstream, the builder will try to push into the upstream repo if the build was successful. The core build system is independent of any package manager, but the uturn repo has a couple of helper scripts for creating build roots using yum and Fedora: cache-rpms.sh This script downloads and caches RPMs needed to create a given install root. create-container.sh This creates a build root from the local cached RPMs. both tools source a simple config file that defines the build root. The config file is just a few variable assignments: name Name of the build root rpms The RPMs that should be available in the build root release Fedora release version arch The arch of the RPMs that should be available in the build root buildarch The buildarch of the RPMs that should be available in the build root repo The base name of the local download repo The create repo script configures the build root and installs the systemd uturn target which systemd-nspawn will boot into to build the project.