1 |
williamc |
1.1 |
<! Style Sheet Header>
|
2 |
|
|
<html>
|
3 |
|
|
<head>
|
4 |
|
|
<title>scramintro.html</title>
|
5 |
williamc |
1.2 |
<body bgcolor=beige>
|
6 |
williamc |
1.1 |
<! End Style Sheet Header -----------Insert Text Here --------------------->
|
7 |
|
|
<center>
|
8 |
|
|
<H1>SCRAM</H1>
|
9 |
|
|
<font color=red>S</font>oftware <font color=red>C</font>onfiguration,
|
10 |
|
|
<font color=red>R</font>elease <font color=red>A</font>nd
|
11 |
|
|
<font color=red>M</font>anagement
|
12 |
|
|
</center>
|
13 |
|
|
<hr>
|
14 |
williamc |
1.3 |
<h2>Background</h2>
|
15 |
|
|
SCRAM has been developed to enable large, geographically dispersed and
|
16 |
|
|
autonomous groups to work together on software development projects.
|
17 |
|
|
The groups, primarily based in universities and national institutions,
|
18 |
|
|
independently manage their own resources. As such it can be extremely
|
19 |
|
|
difficult or even impossible to impose software process, adequate
|
20 |
|
|
documentation levels and heavy resource requirements - such as dedicating
|
21 |
|
|
entire machines to a single software development project.
|
22 |
|
|
<p>
|
23 |
|
|
The philosophy throughout the SCRAM project is, therefore, to
|
24 |
|
|
encourage good practice by making the intuitive easy and convenient way to do
|
25 |
|
|
things the right way of doing things. Take for example the fact that SCRAM is
|
26 |
|
|
controlled and configured through XML documents. Thus documentation has to
|
27 |
|
|
be kept up to date for SCRAM to even function.
|
28 |
|
|
<p>
|
29 |
williamc |
1.2 |
<h2>What is SCRAM?</h2>
|
30 |
williamc |
1.3 |
<h3>A Configuration Manager</h3>
|
31 |
|
|
The main task of the SCRAM tool is to ensure that all developers are
|
32 |
|
|
working with the same consistent set of products, libraries, environments
|
33 |
|
|
and source codes.
|
34 |
|
|
<ul>
|
35 |
|
|
<li>External Products Configuration<br>
|
36 |
|
|
A requirement of any SCRAM managed project is an
|
37 |
|
|
explicit statement, in the form of an XML document, of all the underlying
|
38 |
|
|
products and versions of external libraries and other software products
|
39 |
|
|
used. Each product must have a description document to tell SCRAM how
|
40 |
|
|
it is to be used, dependency information, environmental variables,
|
41 |
|
|
default system locations etc. Such description documents can be
|
42 |
|
|
maintained independently of SCRAM and imported into the project by
|
43 |
|
|
SCRAMs built-in url down-loading mechanism.
|
44 |
|
|
<li>Common Configurations<br>
|
45 |
|
|
It is often the case that many projects need to share the same configuration
|
46 |
|
|
in order that they can be inter-operable (e.g. Two applications using the
|
47 |
|
|
same database). SCRAM thus provides a mechanism for importing independently
|
48 |
|
|
maintained configuration documents automatically.
|
49 |
|
|
|
50 |
|
|
<li>Source Code Control<br>
|
51 |
|
|
SCRAM itself is not a code repository but any project must have access to
|
52 |
|
|
one or more such repositories from which it can checkout the appropriate
|
53 |
|
|
code into the appropriate place in the project structure. Currently it
|
54 |
|
|
only supports CVS but this could be easily extended to other repositories
|
55 |
|
|
if required.
|
56 |
|
|
|
57 |
|
|
<li>Environment Control<br>
|
58 |
|
|
The build and runtime environments are built up from the descriptions
|
59 |
|
|
of those required by external products and project specific environment
|
60 |
|
|
description documents.
|
61 |
|
|
</ul>
|
62 |
|
|
<h3>A distribution system</h3>
|
63 |
|
|
SCRAM projects can be 'bootstrapped' from a single document that describes
|
64 |
|
|
its structure and download information of other project documents and
|
65 |
|
|
components.<p>
|
66 |
|
|
From this document SCRAM can construct a copy of a project release. Connected
|
67 |
|
|
to a web browser such as netscape makes "single click" installation possible.
|
68 |
|
|
At present SCRAM is unable to automatically install external components
|
69 |
|
|
although the user can be directed to the correct documentation to do this
|
70 |
|
|
themselves. Binary distribution is not supported as building a distribution
|
71 |
|
|
is seen as a check that all the components of the system have been installed
|
72 |
|
|
properly. This feature could be added if user distributions were required.
|
73 |
|
|
|
74 |
|
|
<h3>A System resource/application interface</h3>
|
75 |
|
|
As no two people are the same, it is often the case that no two machines
|
76 |
|
|
are the same. Products can be installed in different places depending on
|
77 |
|
|
the whims of system administrators, policy makers and system constraints.
|
78 |
|
|
SCRAM matches up the request for a product from a projects configuration
|
79 |
|
|
to the system it is installing the project on. SCRAM does this
|
80 |
|
|
by a number of automated means and if it fails to find a product will prompt
|
81 |
|
|
the user for its location. SCRAM then maintains a database of such system
|
82 |
|
|
information for future reference.
|
83 |
|
|
|
84 |
|
|
<h3>A Build System</h3>
|
85 |
|
|
<ul>
|
86 |
|
|
<li> Abstraction of logical build elements from implementation details
|
87 |
|
|
<li> Associate directory and file structure with build operations
|
88 |
|
|
(e.g. everything in a directory libsrc could be automatically compiled
|
89 |
|
|
into a library ,
|
90 |
|
|
e.g.2 every binary in a directory test could be automatically linked
|
91 |
|
|
with a test utilities library)
|
92 |
|
|
<li> Definition of Classes of build objects.
|
93 |
|
|
e.g A library class can have types such as debug, archive, shared,
|
94 |
|
|
shared debug, profiled etc. Default types can be assigned
|
95 |
|
|
to a class/directory structure but are easy to override on the
|
96 |
|
|
command line.
|
97 |
|
|
<li> Strong environment control. Makes it easy to tweak general rules
|
98 |
|
|
for special cases - something not easy to do in make.
|
99 |
|
|
<li> Abstract dependency specification. You can link in a product by specifying
|
100 |
|
|
its name, SCRAM does the rest taking care of system specifics,
|
101 |
|
|
dependencies etc.
|
102 |
|
|
<li> Module Interfaces can be defined for large software modules to define
|
103 |
|
|
dependencies etc. Other modules can then simply load the interface to use
|
104 |
|
|
the module.
|
105 |
|
|
<li> Compatible with code repositories such as CVS which checkout the file
|
106 |
|
|
with the same date that it was checked in. This is a major flaw in make
|
107 |
|
|
which simply checks to see if a datea > dateb rather than datea != dateb.
|
108 |
|
|
</ul>
|
109 |
|
|
|
110 |
|
|
<h3>A development environment</h3>
|
111 |
|
|
Once a copy of a release is installed and built on a system it can be made
|
112 |
|
|
available for developers by adding it to SCRAMs list of projects.
|
113 |
|
|
Upon selecting an item from this list, a new development area is created
|
114 |
|
|
in which the developer can work independently of everyone else. The
|
115 |
|
|
development area will have the same configuration, environment etc. as
|
116 |
|
|
the base release. It will also automatically use libraries/headers etc.
|
117 |
|
|
from the base release if not rebuilt in the local development area. The
|
118 |
|
|
user is free to use whatever editors and other tools he/she prefers.
|
119 |
|
|
|
120 |
|
|
<h3>Project Isolation</h3>
|
121 |
|
|
SCRAM ensures that an installed release is independent of any other. This
|
122 |
|
|
allows developers to easily switch between projects/versions they might be
|
123 |
|
|
working on even though they may have very different and conflicting
|
124 |
|
|
environment requirements.
|
125 |
|
|
|
126 |
williamc |
1.2 |
<p>
|
127 |
williamc |
1.3 |
<h2>Summary</h2>
|
128 |
williamc |
1.1 |
<ul>
|
129 |
|
|
<li>Project installation with a click on a web page
|
130 |
|
|
<li>Control of Build Environment, including dependency tracking
|
131 |
|
|
<li>Fully configurable build operations, including default operations.
|
132 |
|
|
<li>Abstraction of logical build elements from the implementation details
|
133 |
|
|
<li>Reuse of configuration management elements between projects.
|
134 |
williamc |
1.3 |
<li>Configuration specifications with XML documents.
|
135 |
williamc |
1.1 |
</ul>
|
136 |
|
|
<p>
|
137 |
williamc |
1.2 |
<img src=../images/scram.jpg>
|
138 |
|
|
<p>
|
139 |
|
|
If you have any ideas
|
140 |
williamc |
1.1 |
that you think will make this project better then dont hesitate to tell me
|
141 |
|
|
(email me at the address given below).
|
142 |
|
|
<! Style Sheet Footer ---------------Do not change anything after this line-->
|
143 |
|
|
<hr>
|
144 |
|
|
<table border=1 width=100%>
|
145 |
|
|
<td align=left>
|
146 |
|
|
<a href=mailto:Christopher.Williams@cern.ch
|
147 |
|
|
>Chris Williams</a>
|
148 |
|
|
</td>
|
149 |
|
|
<td align=center>
|
150 |
|
|
<script language="JavaScript">
|
151 |
|
|
<!---//hide script from old browsers
|
152 |
|
|
document.write( "<br>Last updated "+ document.lastModified
|
153 |
|
|
);
|
154 |
|
|
//end hiding contents --->
|
155 |
|
|
</script>
|
156 |
|
|
</td>
|
157 |
|
|
<td align=right>Show <a href=/cgi-cmc/pagestat>Stats</a>
|
158 |
|
|
</td>
|
159 |
|
|
</table>
|
160 |
|
|
</body> </html>
|
161 |
|
|
<! End Style Sheet Footer>
|