Chapter 1. Producing a fully reproducable development environment

Henk Klöpping

Revision History
Revision $Id:$$Date:$$Author:$
Concept

Abstract

In this document we focus on the creation of a reproducable (version of) the development environment. Currently, that environment is envisioned as being a thick client (a Red Hat 9 Linux workstation implemented on a Compaq Evo PC). However, the techniques demonstrated in this document can be used for all (Red Hat) Linux workstations and servers running on a supported platform.

Table of Contents

Problem definition
Assumptions
The need for a fully reproducable environment
The toolsets
Kickstart
PXElinux
DHCP
NFS
Overview of the installation process

Problem definition

Abstract

We were not able to (re)create a Linux based developer environment quickly and accurately. We needed that ability to be able to support various software projects that may run in diverse environments. One measures a circle starting anywhere[1], so we started out by defining and setting up a prototype development environment and a set of procedures and tools to enable us to recreate that environment.

Assumptions

I assume the reader is aware of the four stages for software development: development, testing, acceptance testing and finally production. To be able to produce good software a set of well defined procedures needs to be put in place to enable correct migration from one stage to another. This document assumes that these procedures are in place, but does not focus on them. This document also touches on the subject of a Definitive Software Library but does not detail these concepts (these details can be found in The Definitive Software Library).

The need for a fully reproducable environment

The software development process does not stop after the delivery to our customers. They may find bugs our testprocedure did not discover or ask us to change the functionality of their (personalised) version.

In order to support our customers we need to be able to quickly retrieve an exact duplicate of the software we released to them. We need to install some kind of repository in which we will store all versions of our source code and compiled binaries. But we need more: whether or not an application works properly is influenced by all components that make up the environment used to create and run the software. Software may run perfectly on one system, but appear to be flawed on another, for example if the systems use different versions of some shared library. Therefore we need to be able to reproduce the environment in which the software was build and tested too, which includes hardware, operating systems, configuration and supporting software.

This document describes what tools and procedures to use to enable swift recreation of a (version of a) Linux workstation. It also defines the items that need to be stored in the DSL to enable the reconstruction. However, it does not detail the exact structure of the DSL, please consult The Definitive Software Library for details.



[1] Charles Fort