1 |
sashby |
1.1 |
%%____________________________________________________________________
|
2 |
|
|
%% File: Introduction.tex
|
3 |
|
|
%%____________________________________________________________________
|
4 |
|
|
%%
|
5 |
|
|
%% Author: Shaun ASHBY <Shaun.Ashby@cern.ch>
|
6 |
|
|
%% Update: 2005-11-02 17:04:04+0100
|
7 |
|
|
%% Revision: $Id$
|
8 |
|
|
%%
|
9 |
|
|
%% Copyright: 2005 (C) Shaun ASHBY
|
10 |
|
|
%%
|
11 |
|
|
%%--------------------------------------------------------------------
|
12 |
|
|
\chapter{Introduction}\label{ch:intro}
|
13 |
|
|
\index{Introduction}
|
14 |
|
|
\scram\ has been developed to enable large, geographically dispersed
|
15 |
|
|
and autonomous groups to work together on software development
|
16 |
|
|
projects. The groups, primarily based in universities and academic
|
17 |
|
|
institutions, independently manage their own resources. As such it can
|
18 |
|
|
be extremely difficult or even impossible to impose software process,
|
19 |
|
|
adequate documentation levels and heavy resource requirements - such
|
20 |
|
|
as dedicating entire machines to a single software development
|
21 |
|
|
project.
|
22 |
|
|
|
23 |
|
|
\section{What is SCRAM?}\index{SCRAM!What is SCRAM?}
|
24 |
|
|
|
25 |
|
|
\scram\ is a configuration management tool, a distribution system, a
|
26 |
|
|
build system and resource manager, with local resources and
|
27 |
|
|
applications managed in a transparent way. In addition it provides a
|
28 |
|
|
common development environment. These features are described more
|
29 |
|
|
fully below.
|
30 |
|
|
|
31 |
|
|
\subsection{Configuration Management}\label{sec:cm}
|
32 |
|
|
\index{SCRAM!configuration management}
|
33 |
|
|
The main task of \scram\ is to ensure that all developers are working
|
34 |
|
|
with the same consistent set of external products, libraries,
|
35 |
|
|
environments and source codes. Configuration management methods ensure
|
36 |
|
|
that this is possible.
|
37 |
|
|
\begin{description}
|
38 |
|
|
\item [\textsc{external products configuration}]\mbox{}\\
|
39 |
|
|
A requirement of any \scram\ managed project is an explicit
|
40 |
|
|
statement, in the form of a special-purpose document, of all
|
41 |
|
|
underlying products and versions of external libraries and other
|
42 |
|
|
software products used. Each product must have a description
|
43 |
|
|
document to inform \scram\ how it is to be used, to supply dependency
|
44 |
|
|
information, set environmental variables, and give default system
|
45 |
|
|
locations. Such description documents can be maintained
|
46 |
|
|
independently of \scram\ and imported into the project by
|
47 |
|
|
\scram's built-in URL downloading mechanism.
|
48 |
|
|
\item[\textsc{common configurations}]\mbox{}\\
|
49 |
|
|
It is often the case that many projects need to share the same
|
50 |
|
|
configuration in order that they can be inter-operable (\eg two
|
51 |
|
|
applications using the same database). \scram\ thus provides a
|
52 |
|
|
mechanism for importing independently maintained configuration
|
53 |
|
|
documents automatically.
|
54 |
|
|
\item[\textsc{source code control}]\mbox{}\\
|
55 |
|
|
\scram\ itself is not a code repository. Any project must have
|
56 |
|
|
access to one or more such repositories from which it can checkout
|
57 |
|
|
the appropriate code into the appropriate place in the project
|
58 |
|
|
structure. Currently, CVS is used for all source code management.
|
59 |
|
|
Both source code and project configuration files are tagged with a
|
60 |
|
|
CVS symbolic tag when ready for release.
|
61 |
|
|
\item[\textsc{environment control}]\mbox{}\\
|
62 |
|
|
The build and runtime environments are constructed automatically
|
63 |
|
|
from the description documents of the required external products and
|
64 |
|
|
the project-specific environment.
|
65 |
|
|
\end{description}
|
66 |
|
|
|
67 |
|
|
|
68 |
|
|
\subsection{The Distribution System}\label{sec:dist}
|
69 |
|
|
\index{SCRAM!distribution system}
|
70 |
|
|
\index{bootstrapping}
|
71 |
|
|
\scram\ projects can be `bootstrapped' from a single description
|
72 |
|
|
document in which the structure and download information of other
|
73 |
|
|
required project documents and components is declared.
|
74 |
|
|
|
75 |
|
|
\ni From this document \scram\ can construct a copy of a project release.
|
76 |
|
|
Connected to a properly configured web browser such as Netscape makes
|
77 |
|
|
automatic project installation possible. At present, \scram\ is unable
|
78 |
|
|
to automatically install external components although the user can be
|
79 |
|
|
directed to the correct documentation to enable him/her to do this.
|
80 |
|
|
Binary distribution is not supported as building a distribution is
|
81 |
|
|
seen as a check that all the components of the system have been
|
82 |
|
|
installed properly. Other tools, compatible with \scram\, are available
|
83 |
|
|
to produce binary distributions from project releases.
|
84 |
|
|
|
85 |
|
|
\subsection{A System Resource/Application Interface}\label{sec:resource}
|
86 |
|
|
\index{SCRAM!resource manager}
|
87 |
|
|
\index{SCRAM!application interface}
|
88 |
|
|
Often, machines are not installed with the various products in the
|
89 |
|
|
same directories, their locations decided upon by system
|
90 |
|
|
administrators or system constraints (sizes of filesystems, for
|
91 |
|
|
example). Install locations can also vary from platform to platform.
|
92 |
|
|
\scram\ matches up the request for a product in a project configuration
|
93 |
|
|
to the system it is installing the project on. Automated means are
|
94 |
|
|
used to achieve this but the user will be prompted if a product cannot
|
95 |
|
|
be found. The user also can have full interactive control of these
|
96 |
|
|
setup stages if preferred.
|
97 |
|
|
|
98 |
|
|
\ni A database of system information is maintained by \scram\ for
|
99 |
|
|
future reference in each project area.
|
100 |
|
|
|
101 |
|
|
\subsection{A Build System}\label{sec:bs}
|
102 |
|
|
\index{SCRAM!build system}
|
103 |
|
|
The build system can be used to build shared or archive libraries,
|
104 |
|
|
plug-in modules, binaries or additional libraries (for a test suite,
|
105 |
|
|
for example). The configuration documents within the project area
|
106 |
|
|
describe the actions to be taken during the build process. These
|
107 |
|
|
actions can be global, or specific to parts of the source directory
|
108 |
|
|
tree structure. (\eg everything in a directory \texttt{libsrc} could
|
109 |
|
|
be automatically compiled into a library or every binary in a
|
110 |
|
|
directory called \texttt{test} could be automatically linked with a
|
111 |
|
|
test utilities library).
|
112 |
|
|
\index{available library classes}
|
113 |
|
|
\ni Classes of build objects can be defined: for example, a library class
|
114 |
|
|
can have types such as {\em debug}, {\em archive}, {\em shared}, {\em
|
115 |
|
|
shared debug}, \etc Default types can be assigned to a
|
116 |
|
|
class/directory structure but can be easily overriden.% with options
|
117 |
|
|
%from the command line.
|
118 |
|
|
The environment can be easily tuned for
|
119 |
|
|
special cases by simply modifying the templates defining the general
|
120 |
|
|
rules. The dependencies are specified in an abstract manner. Extra
|
121 |
|
|
external products to be included during linking can be referred to
|
122 |
|
|
by name with \scram\ taking care of the system specifics.
|
123 |
|
|
\index{module interfaces}
|
124 |
|
|
\ni Module interfaces can be defined for large software modules to define
|
125 |
|
|
dependencies \etc Other modules can then simply load the interface to
|
126 |
|
|
use the module.
|
127 |
|
|
|
128 |
|
|
\subsection{A Development Environment}\label{sec:de}
|
129 |
|
|
\index{SCRAM!development environment}
|
130 |
|
|
Once a copy of a project is installed and built on a particular
|
131 |
|
|
platform it can be made publicly available (\ie {\em released}) for developers
|
132 |
|
|
by adding it to \scram's list of projects (the project database).
|
133 |
|
|
|
134 |
|
|
\ni Upon selecting an item from this list, a new development area is
|
135 |
|
|
created in which the developer can work independently of everyone
|
136 |
|
|
else. The development area will have the same configuration and
|
137 |
|
|
environment as the base release. It will also automatically use
|
138 |
|
|
libraries and headers from the base release if not rebuilt in the
|
139 |
|
|
local development area.
|
140 |
|
|
|
141 |
|
|
\subsection{Project Isolation}
|
142 |
|
|
\index{SCRAM!project isolation}
|
143 |
|
|
\scram\ ensures that an installed release is independent of any other.
|
144 |
|
|
This allows developers to easily switch between projects/versions they
|
145 |
|
|
might be working on even though they may have very different and
|
146 |
|
|
conflicting environment requirements.
|
147 |
|
|
%%
|
148 |
|
|
\index{SCRAM!overview}
|
149 |
|
|
\begin{latexonly}
|
150 |
|
|
\begin{figure}[ht]
|
151 |
|
|
\begin{center}
|
152 |
|
|
\leavevmode \epsfig{file=images/scram.eps, width=\linewidth}
|
153 |
|
|
\caption[A SCRAM overview.]
|
154 |
|
|
{A SCRAM overview.}
|
155 |
|
|
\label{f:SCRAM}
|
156 |
|
|
\end{center}
|
157 |
|
|
\end{figure}
|
158 |
|
|
\end{latexonly}
|
159 |
|
|
|
160 |
|
|
\ni In summary, \scram\ can provide
|
161 |
|
|
\begin{itemize}
|
162 |
|
|
\item project installation with a click on a web page;
|
163 |
|
|
\item control of the build environment, including dependency tracking;
|
164 |
|
|
\item fully configurable build operations, including default operations;
|
165 |
|
|
\item abstraction of logical build elements from the implementation details;
|
166 |
|
|
\item re-use of configuration management elements between projects.
|
167 |
|
|
\end{itemize}
|
168 |
|
|
|
169 |
|
|
|
170 |
|
|
\section{The Structure of This Guide}
|
171 |
|
|
|
172 |
|
|
This document can be broken down as follows: firstly,
|
173 |
|
|
Chapter~\ref{ch:install} gives some details on how to obtain \scram\
|
174 |
|
|
and instructions on how to create a local installation.
|
175 |
|
|
Chapter~\ref{ch:creatingprojects} contains all information necessary for
|
176 |
|
|
administrators (or users wanting to use \scram\ privately) to
|
177 |
|
|
create new projects using \scram\ as the management tool, and to
|
178 |
|
|
maintain them. The various types of project configuration files, and
|
179 |
|
|
the purposes of each (with use cases), are also described.
|
180 |
|
|
Chapter~\ref{ch:examples} serves as a resource for developers who
|
181 |
|
|
use \scram\ in their environment, providing some examples and tips covering topics
|
182 |
|
|
like changing tool configurations or adding new external tools in a
|
183 |
|
|
private area.
|
184 |
|
|
|
185 |
|
|
\ni Finally there is a summary page containing help for usage for all of
|
186 |
|
|
the currently supported \scram\ commands (p~\pageref{ch:quickhelpguide}).
|
187 |
|
|
|
188 |
|
|
\newpage % Start on a fresh page
|
189 |
|
|
|
190 |
|
|
%%% Local Variables:
|
191 |
|
|
%%% mode: latex
|
192 |
|
|
%%% TeX-master: "SCRAM-manual"
|
193 |
|
|
%%% End:
|
194 |
|
|
|
195 |
|
|
%%____________________________________________________________________
|
196 |
|
|
%% End of Introduction.tex
|
197 |
|
|
%%____________________________________________________________________
|
198 |
|
|
%%
|