Farrago Packaging


Overview

This document provides an overview of how the Farrago frameworks and plugins are built and packaged. Please read the architecture overview first.

Build Configuration

With a pluggable architecture, figuring out what needs to be built and how in order to create a useful specialized distribution can be a major headache. Our plan is to follow the Linux kernel configuration process at an abstract level, though of course the details are different:

NOTE: in the diagram above and in those which follow, the meaning of the pseudo-flowchart symbols is as follows:

Assembly Line

Once the top-level build scripts are defined for a particular distribution, the procedure for building the various core and extension components is as follows:

The result of this assembly line is a number of individual modules which have not yet been packaged into a redistributable form, plus an uninitialized catalog database. Further steps depend on the nature of the distribution to be produced (as covered in the next two sections).

System Packaging

One option is to package a distribution for an entire working system, as follows:

After plugin jars are built, the Initialization process performs enough bootstrapping to be able to load all required components and run site-independent initialization scripts. The result is an initialized site-independent catalog database; this must be included in the final packaging together with the executable components, and serves as a base for site-dependent initialization when a distribution is deployed. Of course, other resources such as documentation should be included in the final packaging, but are not shown here.

Plugin Packaging

The other distribution option is to package only individual plugins, with the intention that they be used together with some other full system distributions. In this case, it is a requirement that such plugins consist of only code, without model extensions, although the plugins are allowed to depend on model extensions provided with specific system distributions. The plugin-only packaging process is much simpler:

The diagram above illustrates the most general case of both Java and C++ code being required to implement the plugin.