Skip to content


Repository files navigation

Build Status test coverage


Koschei is a software for running a service for scratch-rebuilding RPM packages in Koji instance when their build-dependencies change or after some time elapse.


Python code dependencies:

  • alembic
  • fedora_messaging
  • flask
  • flask-sqlalchemy
  • hawkey
  • humanize
  • jinja2
  • koji
  • librepo
  • psycopg2
  • rpm
  • sqlalchemy

Test dependencies (optional):

  • nose
  • mock


  • httpd with mod_wsgi (other WSGI servers should work too, but were not tested)
  • postgresql (can be external service)
  • koji hub (can be external service)
  • fedora-messaging (optional)


The configuration is formed by merging default configuration values and the local configuration in /etc/koschei/. The backend, frontend and admin script have separate configuration files in /etc/koschei, named config-backend.cfg, config-frontend.cfg and config-admin.cfg, respectively. The cfg files are regular Python files that expect assignment to config dictionary variable. The default configuration file is stored at /usr/share/koschei/config.cfg and contains comments documenting possible configuration options. Keep in mind that the merging of configurations is recursive, it merges all dictionaries, not just the top-level ones.


For production deployment use Koschei container images.

Koschei is split into multiple components that can function independently - backend, frontend and admin. Each are configured separately and can be deployed in different containers on different machines.

Setting up the database:

  • Install PostgreSQL server with dnf install postgresql-server. Other database servers are not supported and won't work.
  • Execute postgresql-setup initdb to initialize the database
  • Enable the service with systemctl enable postgresql-server and start it with systemctl start postgresql-server
  • Create the database with createdb koschei
  • If your database is on separate host or you didn't follow the steps here exactly, you'll need to configure the database connection in respective configuration files of backend, frontend and admin (see configuration section).
  • Populate DB schema with koschei-admin create-db
  • Create at least one package collection using koschei-admin create-collection (see its help for parameters)

Koschei administration script koschei-admin is independent from other services. It is used to perform various administration tasks such as adding packages or creating collections. See its help (-h option) for list of commands and help of individual commands (such as koschei-admin create-collection -h).

Koschei backend consists of multiple services that can be ran separately, for example in different containers. For fully working instance you'll want to run all of them, for passive instance that doesn't submit builds, you'll want to skip koschei-scheduler. For submiting builds, you need to install a koji certificate at /home/koschei/.fedora.cert (and also the CA and server CA certificates). The cert files have the same layout as when generated using fedora-cert and using fedpkg or koji client. If you want to use different locations, you can specify them in the config-backend.cfg file.

The web frontend is a WSGi application, which can be run within Apache httpd server. Koschei ships httpd configuration file that should work out-of-the-box as you start httpd. You should override the application secret used for authentication in /etc/koschei/config-frontend.cfg.


After Koschei update to a newer version, you need to manually stop the services (including httpd) and execute DB migrations. Migrations are executed by koschei-admin alembic upgrade head. Then the services can be started again.


Koschei is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.

Koschei is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

A copy of the GNU General Public License is contained in the LICENSE.txt file.