mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-01-15 10:51:56 -06:00
c69d8084c1
This patch contains 2 parts. The first part is a small utility to create and validate the current API. To do this it needs to load ipalib which on a fresh system introduces a few problems, namely that it relies on a python plugin to set the default encoding to utf8. For our purposes we can skip that. It is also important that any optional plugins be loadable so the API can be examined. The second part is a version exchange between the client and server. The version has a major and a minor version. The major verion is updated whenever existing API changes. The minor version is updated when new API is added. A request will be rejected if either the major versions don't match or if the client major version is higher than then server major version (though by implication new API would return a command not found if allowed to proceed). To determine the API version of the server from a client use the ping command. ticket 584
98 lines
3.3 KiB
Plaintext
98 lines
3.3 KiB
Plaintext
Here is a quickie guide to get you started in IPA development.
|
|
|
|
Dependencies
|
|
------------
|
|
|
|
The quickest way to get the dependencies needed for building is:
|
|
|
|
# yum install rpm-build `grep "^BuildRequires" ipa.spec.in | awk '{ print $2 }' | grep -v "^/"`
|
|
|
|
This is currently (01/05/11):
|
|
|
|
yum install 389-ds-base-devel mozldap-devel svrcore-devel nspr-devel \
|
|
openssl-devel openldap-devel e2fsprogs-devel krb5-devel nss-devel \
|
|
libcap-devel python-devel autoconf automake libtool popt-devel m4 \
|
|
policycoreutils python-setuptools python-krbV xmlrpc-c-devel \
|
|
libcurl-devel gettext authconfig libuuid-devel
|
|
|
|
Building
|
|
--------
|
|
|
|
From the root of the source tree run:
|
|
$ make rpms
|
|
|
|
The resulting rpm packages are in dist/rpms:
|
|
|
|
# yum --nogpgcheck localinstall dist/rpms/*
|
|
# ipa-server-install
|
|
|
|
It may be possible to do a simple make all install but this has not been
|
|
well-tested. Additional work is done in pre/post install scripts in the ipa
|
|
spec file.
|
|
|
|
Developing plugins
|
|
------------------
|
|
|
|
It is possible to do management plugin development within the source tree.
|
|
|
|
To start with, you need a full IPA install on the current system. Build and
|
|
install the rpms and then configure IPA using ipa-server-install.
|
|
|
|
Get a TGT for the admin user with: kinit admin
|
|
|
|
Next you'll need 2 sessions in the source tree. In the first session run
|
|
python lite-server.py. In the second session you can run the ./ipa
|
|
tool and it will make requests to the lite-server listening on 127.0.0.1:8080.
|
|
|
|
This makes developing plugins much faster and you can also make use of the
|
|
Python pdb debugger on the server side.
|
|
|
|
You'll find you may need to refresh the underlying build if schema or other
|
|
changes are required.
|
|
|
|
Testing
|
|
-------
|
|
|
|
We use python nosetests to test for regressions in the management framework
|
|
and plugins. You'll need the python-nose package installed to run the tests.
|
|
|
|
To run all of the tests you will need 2 sessions, one to run the lite-server
|
|
and the other to execute the tests. You'll also need a TGT before starting
|
|
the lite-server:
|
|
|
|
% kinit admin
|
|
% make test
|
|
|
|
Some tests may be skipped. For example, all the XML-RPC tests will be skipped
|
|
if you haven't started the lite-server. The DNS tests will be skipped if
|
|
the underlying IPA installation doesn't configure DNS, etc.
|
|
|
|
API.txt
|
|
-------
|
|
The purpose of the file API.txt is to prevent accidental API changes. The
|
|
program ./makeapi creates file and also validates it (with the --validate
|
|
option). This validation is part of the build process.
|
|
|
|
There are three solutions to changes to the API:
|
|
|
|
1. Changes to existing API require a change to the MAJOR version.
|
|
2. Addition of new API requires a change to the MINOR version.
|
|
3. Or just back out your changes and don't make an API change.
|
|
|
|
If the API changes you'll need to run ./makeapi to update API.txt and
|
|
commit it along with VERSION with your API change.
|
|
|
|
If a module is optionally loaded then you will need to be able to
|
|
conditionally load it for API validation. The environment variable
|
|
api.env.validate_api is True during validation.
|
|
|
|
General Notes
|
|
-------------
|
|
IPA is not relocatable.
|
|
|
|
When building rpms the version contains the GIT id in the version. To prevent
|
|
this pass the argument IPA_VERSION_IS_GIT_SNAPSHOT=yes to make.
|
|
|
|
If you don't need a full CA during testing then using the self-signed CA
|
|
(pass --selfsign to ipa-server-install) takes less time to install.
|