README.txt 7.18 KB
Newer Older
1
=============
2 3 4
ERP5 buildout
=============

Łukasz Nowak's avatar
Łukasz Nowak committed
5
Introduction
6 7
============

8
ERP5 Buildout provides a way to build and manage ERP5 software components
9 10
with all needed dependencies.

11 12 13
ERP5 Buildout also provides a way to manage separate installation instances of
ERP5 to share non-data components of an ERP5 software installation from a
single location, allowing for easy component upgrade.
14

15 16 17 18 19
Note for Zope 2.8
-----------------

Those instructions are for ERP5 running with Zope 2.12. Please refer to small
notes below to see differences between 2.12 and 2.8.
20 21 22 23

Software
========

24
Software part is system independent.
25

26 27 28 29
Requirements to build ERP5 Appliance are:

 * C and C++ compiler (gcc and g++)
 * standard C and C++ library with development headers (glibc and libstdc++)
Łukasz Nowak's avatar
Łukasz Nowak committed
30 31 32
 * make
 * patch
 * python (>=2.4) with development headers (to run buildout)
33

34 35
Setup
-----
Łukasz Nowak's avatar
Łukasz Nowak committed
36

37
Create directory for buildout and its extends cache:
38

39
  $ mkdir -p ~/erp5.buildout/{downloads,extends-cache}
40

41
Go to this directory:
42

43
  $ cd ~/erp5.buildout
44

45
Create buildout.cfg there:
46

47
  $ cat > buildout.cfg
48

49 50 51 52 53 54
[buildout]
extends = https://svn.erp5.org/repos/public/erp5/trunk/buildout/buildout-2.12.cfg
# In case of Zope 2.9 use:
#  extends = https://svn.erp5.org/repos/public/erp5/trunk/buildout/buildout.cfg
extends-cache = extends-cache
^D
55

56 57
Bootstrap buildout
~~~~~~~~~~~~~~~~~~
58

59 60
WARNING: please read "Troubleshooting" section bellow, you may need to
unset environment variables in your GNU/Linux distribution
61

62
  $ python -S -c 'import urllib2;print urllib2.urlopen("http://svn.zope.org/*checkout*/zc.buildout/trunk/bootstrap/bootstrap.py").read()' | python -S -
63

64 65
Run the buildout
~~~~~~~~~~~~~~~~
66

67
  $ bin/buildout -v
68

69 70 71
This will download and install the software components needed to run ERP5 on
Zope including Zope plus dependencies (including
Acquisition with _aq_dynamic patch) and CMF 2.2 plus dependencies.
72

73 74
Note on -S: this switch is overridden by PYTHON_PATH environment variable. In
doubt, unset it before invoking that command.
75

76 77
Post-build check
----------------
78

79 80
There are tests for buildout in:
  https://svn.erp5.org/repos/public/erp5/trunk/buildout/tests/assertSoftware.py
81

82
Download this file, for example by using provided svn:
83

84 85 86
 $ parts/subversion/bin/svn export --non-interactive --trust-server-cert https://svn.erp5.org/repos/public/erp5/trunk/buildout/tests/assertSoftware.py
Run:
  python assertSoftware.py
87 88 89 90

Instances
=========

91 92 93 94 95 96 97 98
Note: Instance generation is still a work in progress. In particular, these
instructions should be much simplified.

After the software components are built, we can generate ERP5 instance
buildouts from that software.

Assuming the ERP5 software buildout is available in ~/erp5.buildout the
following sequence of steps should result in a working "instance" buildout:
99

100 101 102
$ mkdir ~/instances                         # 0
$ cd ~/instances                            # 1
$ cat > buildout.cfg                        # 3
103 104

[buildout]
105 106 107 108 109 110 111 112 113 114
# Reuse extends from software
extends-cache = ~/erp5.buildout/extends-cache
# Default run buildout in offline mode.
offline = true
# Note: In case of Zope 2.8 use:
#  https://svn.erp5.org/repos/public/erp5/trunk/buildout/profiles/development.cfg

extends =
  https://svn.erp5.org/repos/public/erp5/trunk/buildout/profiles/development-2.12.cfg
  ~/erp5.buildout/instance.inc
115 116 117 118 119 120 121

parts =
  mysql-instance
  oood-instance
  supervisor-instance
^D

122 123
$ ~/erp5.buildout/bin/bootstrap2.6      # 4
$ bin/buildout -v         # 5
124

125 126 127
The software-home configuration (along with the 'extends-cache' in the
'instance-profiles' symlink) provides all the information and components that
would otherwise have to be downloaded.
128

129 130 131 132
The steps above generate instance configurations for mysql and the
OpenOffice.org document conversion daemon. We need mysql, in particular,
to be running before configuring an actual ERP5 instance, so we'll start
supervisor:
133

134
$ bin/supervisord                   # 6
135

136 137 138
Now it is time to give supervisor few moments (about 10 seconds) to start all
required services. By running bin/supervisorctl status one can be informed if mysql
and oood are running.
139

140 141
Also, we need databases in the mysql server that correspond to both the ERP5
instance we're going to create, and the testrunner we will want to run:
142

143 144 145 146 147 148 149 150
$ var/bin/mysql -h 127.0.0.1 -u root
mysql> create database development_site;
mysql> grant all privileges on development_site.* to 'development_user'@'localhost' identified by 'development_password';
mysql> grant all privileges on development_site.* to 'development_user'@'127.0.0.1' identified by 'development_password';
mysql> create database test212;
mysql> grant all privileges on test212.* to 'test'@'localhost';
mysql> grant all privileges on test212.* to 'test'@'127.0.0.1';
mysql> exit
151

152 153 154 155 156 157 158 159 160 161 162
Now edit buildout.cfg and add "runUnitTest" (w/o quotes) to 'buildout:parts'.
The "development-instance" part will be pulled in automatically as a
dependency:

$ $EDITOR buildout.cfg                  # 7

Then run buildout again to finish the configuration

$ bin/buildout -ov         # 8

Now a fully configured development instance will be available in the directory
163
"parts/erp5_instance", so you can do:
164

165
 $ parts/erp5_instance/bin/zopectl fg
166 167 168 169 170 171 172 173 174 175

And see an ERP5 instance running on "http://localhost:18080/". The port '18080'
refers to the 'development-instance:http-address' setting in
'profiles/development-2.12.cfg'. The file 'instance-profiles/zope-2.12.cfg'
provides the "Manager" credentials you should use (usually zope:zope), in
the 'zope-instance-template:user' variable.

You should also be able to run ERP5 unit tests like so:

 $ bin/runUnitTest testClassTool
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195

Troubleshooting
===============

In various Linux distributions python is heavily patched and user related
environment variables are set system wide. This affects behaviour of python
and introduces various problem with running buildout.

In case of such issues consider resetting some python environment variables
before running buildout:

 * PYTHONPATH
 * PYTHONSTARTUP
 * PYTHONDONTWRITEBYTECODE

Example:

$ unset PYTHONPATH PYTHONSTARTUP PYTHONDONTWRITEBYTECODE
$ make
$ # other buildout related commands
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224

TODO
====

 * Refactor the .cfg files to reduce duplication and so that only the
   'instance-profiles' directory needs to be symlinked. Alternatively, push all
   .cfg files into a single 'profiles'
   directory.

 * Combine steps 2, 3 and 4 into a single step by creating a more powerful
   'bootstrap2.6' script.

 * Running 'buildout' twice in the instance (once to configure 'supervisor',
   'mysql' and 'oood' and once to setup the ZODB ERP5 instance) is confusing
   and error-prone. A buildout shouldn't deal with persistent state, only with
   file installation. Move the mysql database and ERP5 ZODB instance creation
   procedures to dedicated scripts in 'bin/' instead of implicitly running them
   in the (second) buildout run.

 * Patch the SOAPpy package provided by Nexedi so it doesn't fail with a
   SyntaxError on Python 2.6. Right now we're using a SOAPpy repackaging from
   http://ibid.omnia.za.net/eggs/ .

 * See if we can use http://pypi.python.org/pypi/zc.sourcerelease/ to generate
   a single (humongous) tarball with all needed software components for fully
   offline operation.

 * Figure out why garbage is left on <software_home>/parts/unit_test after the
   test run. It can influence later test runs.