We tend to primarily develop by building rpms and installing them rather than ‘make install’. The make install method should work but it isn’t tested extensively.

The spec files within this repo are similar but not the same as in the Fedora or RHEL repo.

Details about build system can be found in the V4/Build system refactoring design page.

The VERSION file#

The version of IPA is mostly controlled in the file VERSION.m4 in the root of the IPA git repo. This file is generally self-explanatory but it does distinguish between developer builds and final releases. This is really only important if you are building RPMs, it puts the GIT version into the release so you can easily tell where in the revision history you are working from.

To build a release, define IPA_VERSION_IS_GIT_SNAPSHOT as no in VERSION.m4 file before you execute the build.

Building from the git#

First, clone our git tree of your project:

$ git clone

Next, we will install all packages needed to build FreeIPA as they do not have to be installed on your system. You can install them easily by following instructions:

$ cd freeipa
$ cp freeipa-builddep.spec # this is workaround for yum-builddep: file name has to end with ".spec"
$ sudo yum-builddep freeipa-builddep.spec

or with dnf (and builddep plugin from dnf-plugins-core:

$ sudo dnf install rpm-build
$ sudo dnf builddep -b -D "with_wheels 1" -D "with_lint 1" --spec \ --best --allowerasing --setopt=install_weak_deps=False

A dose of --enablerepo=updates-testing may at times be needed.

Depending on the git branch which we want to build, Fedora official repositories don’t always contain versions of packages required for the build and installation. These requirements are located in COPR repositories. Current ones are:

To use the repo run (requires dnf-plugins-core package installed):

$ sudo dnf copr enable @freeipa/freeipa-master

When all packages required for the build are installed, you can start building FreeIPA. The result will be a tarball with sources, SRPM and RPMs that can be installed on a system:

$ ./
$ sudo yum localinstall dist/rpms/*.rpm

or with dnf

$ sudo dnf install dist/rpms/*.rpm

Sometimes the build can fail because of garbage from branch switching or previous builds. To avoid that, clean the git repository, but make sure that all your changes are committed.

$ git clean -dfx

Running FreeIPA In-tree#

If you have IPA installed on your development system you can do some limited in-tree development of management plugins. To do this:

Server setup:

  • As root user, install IPA using ipa-server-install

  • Create ~/.ipa/alias/.pwd and enter the admin password

  • Run kinit admin

  • To run the server, execute python

Client setup:

FreeIPA will detect that it is running in-tree and will use the port and XML-RPC location that is listening only. If you make changes to the server-side of a plugin you’ll need to restart